ctype-win1250ch.c
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:26k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2003 MySQL AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. /*
  14.    Shared, independent copyright: (C) 2001 Jan Pazdziora.
  15.    Development of this software was supported by Neocortex, s.r.o.
  16.    MySQL AB expresses its gratitude to Jan for for giving us this software.
  17.    Bug reports and suggestions are always welcome.
  18.    This file implements the collating sequence for Windows-1250
  19.    character set. It merely extends the binary sorting of US-ASCII
  20.    by adding characters with diacritical marks into proper places.
  21.    In addition, it sorts 'ch' between 'h' and 'i', and the sorting
  22.    is case sensitive, with uppercase being sorted first, in the
  23.    second pass.
  24. */
  25. /*
  26.  * This comment is parsed by configure to create ctype.c,
  27.  * so don't change it unless you know what you are doing.
  28.  *
  29.  * .configure. strxfrm_multiply_win1250ch=2
  30.  */
  31. #define REAL_MYSQL
  32. #ifdef REAL_MYSQL
  33. #include "my_global.h"
  34. #include "m_string.h"
  35. #include "m_ctype.h"
  36. #else
  37. #include <stdio.h>
  38. #define uchar unsigned char
  39. #endif
  40. #ifdef HAVE_CHARSET_cp1250
  41. static uint16 tab_cp1250_uni[256]={
  42.      0,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
  43. 0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
  44. 0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
  45. 0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
  46. 0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
  47. 0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
  48. 0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
  49. 0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
  50. 0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
  51. 0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
  52. 0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
  53. 0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
  54. 0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
  55. 0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
  56. 0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
  57. 0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
  58. 0x20AC,     0,0x201A,     0,0x201E,0x2026,0x2020,0x2021,
  59.      0,0x2030,0x0160,0x2039,0x015A,0x0164,0x017D,0x0179,
  60.      0,0x2018,0x2019,0x201C,0x201D,0x2022,0x2013,0x2014,
  61.      0,0x2122,0x0161,0x203A,0x015B,0x0165,0x017E,0x017A,
  62. 0x00A0,0x02C7,0x02D8,0x0141,0x00A4,0x0104,0x00A6,0x00A7,
  63. 0x00A8,0x00A9,0x015E,0x00AB,0x00AC,0x00AD,0x00AE,0x017B,
  64. 0x00B0,0x00B1,0x02DB,0x0142,0x00B4,0x00B5,0x00B6,0x00B7,
  65. 0x00B8,0x0105,0x015F,0x00BB,0x013D,0x02DD,0x013E,0x017C,
  66. 0x0154,0x00C1,0x00C2,0x0102,0x00C4,0x0139,0x0106,0x00C7,
  67. 0x010C,0x00C9,0x0118,0x00CB,0x011A,0x00CD,0x00CE,0x010E,
  68. 0x0110,0x0143,0x0147,0x00D3,0x00D4,0x0150,0x00D6,0x00D7,
  69. 0x0158,0x016E,0x00DA,0x0170,0x00DC,0x00DD,0x0162,0x00DF,
  70. 0x0155,0x00E1,0x00E2,0x0103,0x00E4,0x013A,0x0107,0x00E7,
  71. 0x010D,0x00E9,0x0119,0x00EB,0x011B,0x00ED,0x00EE,0x010F,
  72. 0x0111,0x0144,0x0148,0x00F3,0x00F4,0x0151,0x00F6,0x00F7,
  73. 0x0159,0x016F,0x00FA,0x0171,0x00FC,0x00FD,0x0163,0x02D9
  74. };
  75. /* 0000-00FD , 254 chars */
  76. static uchar tab_uni_cp1250_plane00[]={
  77. 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
  78. 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
  79. 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
  80. 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
  81. 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,0x4D,0x4E,0x4F,
  82. 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5A,0x5B,0x5C,0x5D,0x5E,0x5F,
  83. 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,0x6B,0x6C,0x6D,0x6E,0x6F,
  84. 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A,0x7B,0x7C,0x7D,0x7E,0x7F,
  85. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  86. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  87. 0xA0,0x00,0x00,0x00,0xA4,0x00,0xA6,0xA7,0xA8,0xA9,0x00,0xAB,0xAC,0xAD,0xAE,0x00,
  88. 0xB0,0xB1,0x00,0x00,0xB4,0xB5,0xB6,0xB7,0xB8,0x00,0x00,0xBB,0x00,0x00,0x00,0x00,
  89. 0x00,0xC1,0xC2,0x00,0xC4,0x00,0x00,0xC7,0x00,0xC9,0x00,0xCB,0x00,0xCD,0xCE,0x00,
  90. 0x00,0x00,0x00,0xD3,0xD4,0x00,0xD6,0xD7,0x00,0x00,0xDA,0x00,0xDC,0xDD,0x00,0xDF,
  91. 0x00,0xE1,0xE2,0x00,0xE4,0x00,0x00,0xE7,0x00,0xE9,0x00,0xEB,0x00,0xED,0xEE,0x00,
  92. 0x00,0x00,0x00,0xF3,0xF4,0x00,0xF6,0xF7,0x00,0x00,0xFA,0x00,0xFC,0xFD};
  93. /* 0102-017E , 125 chars */
  94. static uchar tab_uni_cp1250_plane01[]={
  95. 0xC3,0xE3,0xA5,0xB9,0xC6,0xE6,0x00,0x00,0x00,0x00,0xC8,0xE8,0xCF,0xEF,0xD0,0xF0,
  96. 0x00,0x00,0x00,0x00,0x00,0x00,0xCA,0xEA,0xCC,0xEC,0x00,0x00,0x00,0x00,0x00,0x00,
  97. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  98. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xC5,0xE5,0x00,0x00,0xBC,0xBE,0x00,0x00,0xA3,
  99. 0xB3,0xD1,0xF1,0x00,0x00,0xD2,0xF2,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD5,0xF5,
  100. 0x00,0x00,0xC0,0xE0,0x00,0x00,0xD8,0xF8,0x8C,0x9C,0x00,0x00,0xAA,0xBA,0x8A,0x9A,
  101. 0xDE,0xFE,0x8D,0x9D,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xD9,0xF9,0xDB,0xFB,
  102. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x8F,0x9F,0xAF,0xBF,0x8E,0x9E};
  103. /* 2013-20AC , 154 chars */
  104. static uchar tab_uni_cp1250_plane20[]={
  105. 0x96,0x97,0x00,0x00,0x00,0x91,0x92,0x82,0x00,0x93,0x94,0x84,0x00,0x86,0x87,0x95,
  106. 0x00,0x00,0x00,0x85,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x89,0x00,0x00,
  107. 0x00,0x00,0x00,0x00,0x00,0x00,0x8B,0x9B,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  108. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  109. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  110. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  111. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  112. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  113. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  114. 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x80};
  115. /* 02C7-02DD ,  23 chars */
  116. static uchar tab_uni_cp1250_plane02[]={
  117. 0xA1,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
  118. 0x00,0xA2,0xFF,0x00,0xB2,0x00,0xBD};
  119. /* 2122-2122 ,   1 chars */
  120. static uchar tab_uni_cp1250_plane21[]={
  121. 0x99};
  122. static MY_UNI_IDX idx_uni_cp1250[]={
  123.   {0x0000,0x00FD,tab_uni_cp1250_plane00},
  124.   {0x0102,0x017E,tab_uni_cp1250_plane01},
  125.   {0x2013,0x20AC,tab_uni_cp1250_plane20},
  126.   {0x02C7,0x02DD,tab_uni_cp1250_plane02},
  127.   {0x2122,0x2122,tab_uni_cp1250_plane21},
  128.   {0,0,NULL}
  129. };
  130. static uchar NEAR ctype_win1250ch[] = {
  131. 0x00,
  132. 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
  133. 0x20, 0x28, 0x28, 0x28, 0x28, 0x28, 0x20, 0x20,
  134. 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
  135. 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
  136. 0x48, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
  137. 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
  138. 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84, 0x84,
  139. 0x84, 0x84, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
  140. 0x10, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x01,
  141. 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
  142. 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
  143. 0x01, 0x01, 0x01, 0x10, 0x10, 0x10, 0x10, 0x10,
  144. 0x10, 0x82, 0x82, 0x82, 0x82, 0x82, 0x82, 0x02,
  145. 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
  146. 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
  147. 0x02, 0x02, 0x02, 0x10, 0x10, 0x10, 0x10, 0x20,
  148. 0x20, 0x20, 0x10, 0x20, 0x10, 0x10, 0x10, 0x10,
  149. 0x20, 0x10, 0x01, 0x10, 0x01, 0x01, 0x01, 0x01,
  150. 0x20, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10,
  151. 0x20, 0x10, 0x02, 0x10, 0x02, 0x02, 0x02, 0x02,
  152. 0x48, 0x10, 0x10, 0x01, 0x10, 0x01, 0x10, 0x01,
  153. 0x10, 0x10, 0x01, 0x10, 0x10, 0x10, 0x10, 0x01,
  154. 0x10, 0x10, 0x10, 0x02, 0x10, 0x10, 0x10, 0x10,
  155. 0x10, 0x02, 0x02, 0x10, 0x01, 0x10, 0x02, 0x02,
  156. 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
  157. 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
  158. 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x10,
  159. 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x02,
  160. 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
  161. 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
  162. 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x10,
  163. 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x10
  164. };
  165. static uchar NEAR to_lower_win1250ch[] = {
  166. 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
  167. 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
  168. 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
  169. 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
  170. 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
  171. 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
  172. 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
  173. 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
  174. 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
  175. 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
  176. 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
  177. 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
  178. 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
  179. 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
  180. 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
  181. 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
  182. 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
  183. 0x88, 0x89, 0x9a, 0x8b, 0x9c, 0x9d, 0x9e, 0x9f,
  184. 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
  185. 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
  186. 0xa0, 0xa1, 0xa2, 0xb3, 0xa4, 0xb9, 0xa6, 0xdf,
  187. 0xa8, 0xa9, 0xba, 0xab, 0xac, 0xad, 0xae, 0xbf,
  188. 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
  189. 0xb8, 0xb9, 0xba, 0xbb, 0xbe, 0xbd, 0xbe, 0xbf,
  190. 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
  191. 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
  192. 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xd7,
  193. 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xdf,
  194. 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
  195. 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
  196. 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
  197. 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
  198. };
  199. static uchar NEAR to_upper_win1250ch[] = {
  200. 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
  201. 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
  202. 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
  203. 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
  204. 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
  205. 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
  206. 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
  207. 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
  208. 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
  209. 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
  210. 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
  211. 0x58, 0x59, 0x5a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
  212. 0x60, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
  213. 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f,
  214. 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
  215. 0x58, 0x59, 0x5a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
  216. 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
  217. 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
  218. 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
  219. 0x98, 0x99, 0x8a, 0x9b, 0x8c, 0x8d, 0x8e, 0x8f,
  220. 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
  221. 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
  222. 0xb0, 0xb1, 0xb2, 0xa3, 0xb4, 0xb5, 0xb6, 0xb7,
  223. 0xb8, 0xa5, 0xaa, 0xbb, 0xbc, 0xbd, 0xbc, 0xaf,
  224. 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
  225. 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
  226. 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
  227. 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xa7,
  228. 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
  229. 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
  230. 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xf7,
  231. 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xff
  232. };
  233. static uchar NEAR sort_order_win1250ch[] = {
  234. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
  235. 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
  236. 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
  237. 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
  238. 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
  239. 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
  240. 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
  241. 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
  242. 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
  243. 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
  244. 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
  245. 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
  246. 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
  247. 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223,
  248. 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
  249. 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255
  250. };
  251. static uchar NEAR _sort_order_win1250ch1[] = {
  252. 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
  253. 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
  254. 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
  255. 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81, 0x81,
  256. /* space ord 32 0x20 */
  257. 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
  258. 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f, 0x90, 0x91,
  259. /* 0 ord 48 0x30 */
  260. 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
  261. 0x9a, 0x9b,
  262.     /* colon ord 58 0x3a */
  263.     0x9c, 0x9d, 0x9e, 0x9f, 0xa0, 0xa1,
  264. 0xa2,
  265.       /* A ord 65 0x41 */
  266.       0xa4, 0xa5,
  267.   /* C ord 67 0x43 */
  268.   0xff, 0xa8, 0xa9, 0xaa, 0xab,
  269. 0xac, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4,
  270. 0xb5, 0xb6,
  271.     /* R ord 82 0x52 */
  272.     0xb7, 
  273.   /* S ord 83 0x53 */
  274.   0xb9, 0xbc, 0xbd, 0xbe, 0xbf,
  275. 0xc0, 0xc1, 0xc2,
  276.   /* [ ord 91 0x5b */
  277.   0xc4, 0xc5, 0xc6, 0xc7, 0xc8,
  278. 0xc9,
  279.       /* a ord 97 0x61 */
  280.       0xa4, 0xa5, 0xff, 0xa8, 0xa9, 0xaa, 0xab,
  281. 0xac, 0xae, 0xaf, 0xb0, 0xb1, 0xb2, 0xb3, 0xb4,
  282. 0xb5, 0xb6, 0xb7, 0xb9, 0xbc, 0xbd, 0xbe, 0xbf,
  283. 0xc0, 0xc1, 0xc2,
  284.   /* { ord 123 0x7b */
  285.   0xca, 0xcb, 0xcc, 0xcd, 0x81,
  286. 0x81, 0x81, 0xce, 0x81, 0xcf, 0xd0, 0xd1, 0xd2,
  287. 0x81, 0xd3,
  288.     /* Scaron ord 138 0x8a */
  289.     0xba, 0xd4, 0xb9, 0xbc, 0xc3, 0xc2,
  290. 0x81, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9, 0xda, 0xdb,
  291. 0x81, 0xdc, 0xba, 0xdd, 0xb9, 0xbc, 0xc3, 0xc2,
  292. /* nobreakspace ord 160 0xa0 */
  293. 0x82, 0xde, 0xdf, 0xb1, 0xe0, 0xa4, 0xe1, 0xe2,
  294. 0xe3, 0xe4, 0xb9, 0xe5, 0xe6, 0xe7, 0xe8, 0xc2,
  295. 0xe9, 0xea, 0xeb, 0xb1, 0xed, 0xee, 0x81, 0xef,
  296. /* cedilla ord 183 0xb8 */
  297. 0xf0, 0xa4, 0xb9, 0xf1, 0xb1, 0xf2, 0xb1, 0xc2,
  298. 0xb7, 0xa4, 0xa4, 0xa4, 0xa4, 0xb1, 0xa6, 0xa6,
  299. 0xa7, 0xa9, 0xa9, 0xa9, 0xa9, 0xae, 0xae, 0xa8,
  300. /* Eth ord 208 0xd0 */
  301. 0xa8, 0xb3, 0xb3, 0xb4, 0xb4, 0xb4, 0xb4, 0xf3,
  302. 0xb8, 0xbd, 0xbd, 0xbd, 0xbd, 0xc1, 0xbc, 0xbb,
  303. /* racute ord 224 0xe0 */
  304. 0xb7, 0xa4, 0xa4, 0xa4, 0xa4, 0xb1, 0xa6, 0xa6,
  305. 0xa7, 0xa9, 0xa9, 0xa9, 0xa9, 0xae, 0xae, 0xa8,
  306. /* eth ord 240 0xf0 */
  307. 0xa8, 0xb3, 0xb3, 0xb4, 0xb4, 0xb4, 0xb4, 0xf4,
  308. 0xb8, 0xbd, 0xbd, 0xbd, 0xbd, 0xc1, 0xbc, 0xf5
  309. };
  310. static uchar NEAR _sort_order_win1250ch2[] = {
  311. 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
  312. 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11,
  313. 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,
  314. 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21,
  315. /* space ord 32 0x20 */
  316. 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
  317. 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
  318. /* 0 ord 48 0x30 */
  319. 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
  320. 0x01, 0x01,
  321.     /* colon ord 58 0x3a */
  322.     0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
  323. 0x01,
  324.       /* A ord 65 0x41 */
  325.       0x01, 0x01,
  326.   /* C ord 67 0x43 */
  327.   0xff, 0x01, 0x01, 0x01, 0x01,
  328. 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
  329. 0x01, 0x01,
  330.     /* R ord 82 0x52 */
  331.     0x01, 
  332.   /* S ord 83 0x53 */
  333.   0x01, 0x01, 0x01, 0x01, 0x01,
  334. 0x01, 0x01, 0x01,
  335.   /* [ ord 91 0x5b */
  336.   0x01, 0x01, 0x01, 0x01, 0x01,
  337. 0x01,
  338.       /* a ord 97 0x61 */
  339.       0x02, 0x02, 0xff, 0x02, 0x02, 0x02, 0x02,
  340. 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
  341. 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
  342. 0x02, 0x02, 0x02,
  343.   /* { ord 123 0x7b */
  344.   0x01, 0x01, 0x01, 0x01, 0x22,
  345. 0x23, 0x24, 0x01, 0x25, 0x01, 0x01, 0x01, 0x01,
  346. 0x26, 0x01,
  347.     /* Scaron ord 138 0x8a */
  348.     0x01, 0x01, 0x03, 0x03, 0x01, 0x05,
  349. 0x27, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
  350. 0x28, 0x01, 0x02, 0x01, 0x04, 0x04, 0x02, 0x06,
  351. /* nobreakspace ord 160 0xa0 */
  352. 0x02, 0x01, 0x01, 0x07, 0x01, 0x11, 0x01, 0x01,
  353. 0x01, 0x01, 0x05, 0x01, 0x01, 0x01, 0x01, 0x03,
  354. 0x01, 0x01, 0x01, 0x08, 0x01, 0x01, 0x29, 0x01,
  355. /* cedilla ord 184 0xb8 */
  356. 0x01, 0x12, 0x06, 0x01, 0x05, 0x01, 0x06, 0x04,
  357. 0x03, 0x03, 0x05, 0x07, 0x09, 0x03, 0x03, 0x05,
  358. 0x01, 0x03, 0x09, 0x07, 0x05, 0x03, 0x05, 0x03,
  359. /* Eth ord 208 0xd0 */
  360. 0x05, 0x03, 0x05, 0x03, 0x05, 0x09, 0x07, 0x01,
  361. 0x01, 0x05, 0x03, 0x09, 0x07, 0x03, 0x05, 0x01,
  362. /* racute ord 224 0xe0 */
  363. 0x04, 0x04, 0x06, 0x08, 0x0a, 0x04, 0x04, 0x06,
  364. 0x02, 0x04, 0x0a, 0x08, 0x06, 0x04, 0x06, 0x04,
  365. /* eth ord 240 0xf0 */
  366. 0x06, 0x04, 0x06, 0x04, 0x06, 0x0a, 0x08, 0x01,
  367. 0x02, 0x06, 0x04, 0x0a, 0x08, 0x04, 0x06, 0x01
  368. };
  369. struct wordvalue {
  370. const uchar * word;
  371. uchar pass1;
  372. uchar pass2;
  373. };
  374. static struct wordvalue doubles[] = {
  375. { (uchar*) "ch", 0xad, 0x03 },
  376. { (uchar*) "c",  0xa6, 0x02 },
  377. { (uchar*) "Ch", 0xad, 0x02 },
  378. { (uchar*) "CH", 0xad, 0x01 },
  379. { (uchar*) "C",  0xa6, 0x01 },
  380. };
  381. #define NEXT_CMP_VALUE(src, p, pass, value, len)
  382. while (1) {
  383. if (IS_END(p, src, len)) {
  384. if (pass == 0 && len > 0) { p= src; pass++; }
  385. else { value = 0; break; }
  386. }
  387. value = ((pass == 0) ? _sort_order_win1250ch1[*p]
  388. : _sort_order_win1250ch2[*p]);
  389. if (value == 0xff) {
  390. int i;
  391. for (i = 0; i < (int) sizeof(doubles); i++) {
  392. const uchar * patt = doubles[i].word;
  393. const uchar * q = (const uchar *) p;
  394. while (*patt
  395. && !(IS_END(q, src, len))
  396. && (*patt == *q)) {
  397. patt++; q++;
  398. }
  399. if (!(*patt)) {
  400. value = (int)((pass == 0)
  401. ? doubles[i].pass1
  402. : doubles[i].pass2);
  403. p = (const uchar *) q - 1;
  404. break;
  405. }
  406. }
  407. }
  408. p++;
  409. break;
  410. }
  411. #define IS_END(p, src, len) (((char *)p - (char *)src) >= (len))
  412. static int my_strnncoll_win1250ch(CHARSET_INFO *cs __attribute__((unused)), 
  413.   const uchar * s1, uint len1,
  414.                                   const uchar * s2, uint len2,
  415.                                   my_bool s2_is_prefix)
  416. {
  417.   int v1, v2;
  418.   const uchar * p1, * p2;
  419.   int pass1 = 0, pass2 = 0;
  420.   int diff;
  421.   if (s2_is_prefix && len1 > len2)
  422.     len1=len2;
  423.   p1 = s1; p2 = s2;
  424.   do
  425.   {
  426.     NEXT_CMP_VALUE(s1, p1, pass1, v1, (int)len1);
  427.     NEXT_CMP_VALUE(s2, p2, pass2, v2, (int)len2);
  428.     if ((diff = v1 - v2))
  429.       return diff;
  430.   } while (v1);
  431.   return 0;
  432. }
  433. /*
  434.   TODO: Has to be fixed as strnncollsp in ctype-simple
  435. */
  436. static
  437. int my_strnncollsp_win1250ch(CHARSET_INFO * cs, 
  438.      const uchar *s, uint slen, 
  439.      const uchar *t, uint tlen)
  440. {
  441.   for ( ; slen && s[slen-1] == ' ' ; slen--);
  442.   for ( ; tlen && t[tlen-1] == ' ' ; tlen--);
  443.   return my_strnncoll_win1250ch(cs,s,slen,t,tlen,0);
  444. }
  445. static int my_strnxfrm_win1250ch(CHARSET_INFO * cs  __attribute__((unused)),
  446.  uchar * dest, uint len, 
  447.  const uchar * src, uint srclen)
  448. {
  449.   int value;
  450.   const uchar * p;
  451.   int pass = 0;
  452.   uint totlen = 0;
  453.   p = src;
  454.   do {
  455.     NEXT_CMP_VALUE(src, p, pass, value, (int)srclen);
  456.     if (totlen <= len)
  457.       dest[totlen] = value;
  458.     totlen++;
  459.   } while (value) ;
  460.   if (len > totlen)
  461.     bfill(dest + totlen, len - totlen, ' ');
  462.   return len;
  463. }
  464. #undef IS_END
  465. #ifdef REAL_MYSQL
  466. static uchar NEAR like_range_prefix_min_win1250ch[]=
  467. {
  468.   0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
  469.   0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
  470.   0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
  471.   0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
  472.   0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
  473.   0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
  474.   0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
  475.   0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
  476.   0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47,
  477.   0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,
  478.   0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
  479.   0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,
  480.   0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
  481.   0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
  482.   0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
  483.   0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,
  484.   0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
  485.   0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,
  486.   0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
  487.   0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F,
  488.   0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
  489.   0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,
  490.   0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7,
  491.   0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,
  492.   0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
  493.   0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
  494.   0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7,
  495.   0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
  496.   0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
  497.   0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
  498.   0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
  499.   0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
  500. };
  501. /*
  502.   The letter "C" is a special case:
  503.   "CH" is sorted between "H" and "I".
  504.   prefix_max for "C" is "I":  prefix_max[0x43] == 0x49
  505.   prefix_max for "c" is "i":  prefix_max[0x63] == 0x69
  506.   For all other characters:   prefix_max[i]    == i
  507. */
  508. static uchar NEAR like_range_prefix_max_win1250ch[]=
  509. {
  510.   0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
  511.   0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
  512.   0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
  513.   0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
  514.   0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
  515.   0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
  516.   0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
  517.   0x38, 0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F,
  518.   0x40, 0x41, 0x42, 0x49, 0x44, 0x45, 0x46, 0x47,
  519.   0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F,
  520.   0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57,
  521.   0x58, 0x59, 0x5A, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F,
  522.   0x60, 0x61, 0x62, 0x69, 0x64, 0x65, 0x66, 0x67,
  523.   0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F,
  524.   0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
  525.   0x78, 0x79, 0x7A, 0x7B, 0x7C, 0x7D, 0x7E, 0x7F,
  526.   0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
  527.   0x88, 0x89, 0x8A, 0x8B, 0x8C, 0x8D, 0x8E, 0x8F,
  528.   0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
  529.   0x98, 0x99, 0x9A, 0x9B, 0x9C, 0x9D, 0x9E, 0x9F,
  530.   0xA0, 0xA1, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
  531.   0xA8, 0xA9, 0xAA, 0xAB, 0xAC, 0xAD, 0xAE, 0xAF,
  532.   0xB0, 0xB1, 0xB2, 0xB3, 0xB4, 0xB5, 0xB6, 0xB7,
  533.   0xB8, 0xB9, 0xBA, 0xBB, 0xBC, 0xBD, 0xBE, 0xBF,
  534.   0xC0, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7,
  535.   0xC8, 0xC9, 0xCA, 0xCB, 0xCC, 0xCD, 0xCE, 0xCF,
  536.   0xD0, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6, 0xD7,
  537.   0xD8, 0xD9, 0xDA, 0xDB, 0xDC, 0xDD, 0xDE, 0xDF,
  538.   0xE0, 0xE1, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
  539.   0xE8, 0xE9, 0xEA, 0xEB, 0xEC, 0xED, 0xEE, 0xEF,
  540.   0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7,
  541.   0xF8, 0xF9, 0xFA, 0xFB, 0xFC, 0xFD, 0xFE, 0xFF
  542. };
  543. #define min_sort_char 'x20'
  544. #define max_sort_char 'xff'
  545. /*
  546. ** Calculate min_str and max_str that ranges a LIKE string.
  547. ** Arguments:
  548. ** ptr Pointer to LIKE string.
  549. ** ptr_length Length of LIKE string.
  550. ** escape Escape character in LIKE.  (Normally '').
  551. ** All escape characters should be removed from min_str and max_str
  552. ** res_length   Length of min_str and max_str.
  553. ** min_str      Smallest case sensitive string that ranges LIKE.
  554. ** Should be space padded to res_length.
  555. ** max_str Largest case sensitive string that ranges LIKE.
  556. ** Normally padded with the biggest character sort value.
  557. **
  558. ** The function should return 0 if ok and 1 if the LIKE string can't be
  559. ** optimized !
  560. */
  561. static my_bool
  562. my_like_range_win1250ch(CHARSET_INFO *cs __attribute__((unused)),
  563. const char *ptr, uint ptr_length,
  564. pbool escape, pbool w_one, pbool w_many,
  565. uint res_length,
  566. char *min_str, char *max_str,
  567. uint *min_length, uint *max_length)
  568. {
  569.   int only_min_found= 1;
  570.   const char *end = ptr + ptr_length;
  571.   char *min_org = min_str;
  572.   char *min_end = min_str + res_length;
  573.   /* return 1; */
  574.   for (; ptr != end && min_str != min_end ; ptr++)
  575.   {
  576.     if (*ptr == escape && ptr+1 != end)
  577.       ptr++; /* Skip escape */
  578.     else if (*ptr == w_one || *ptr == w_many) /* '_' or '%' in SQL */
  579.       break;
  580.     *min_str = like_range_prefix_min_win1250ch[(uint)(*ptr)];
  581.     if (*min_str != min_sort_char)
  582.       only_min_found= 0;
  583.     min_str++;
  584.     *max_str++ = like_range_prefix_max_win1250ch[(uint)(*ptr)];
  585.   }
  586.   *min_length = (uint) (min_str - min_org);
  587.   *max_length = res_length;
  588.   while (min_str != min_end)
  589.   {
  590.     *min_str++ = min_sort_char;
  591.     *max_str++ = max_sort_char;
  592.   }
  593.   return (only_min_found);
  594. }
  595. static MY_COLLATION_HANDLER my_collation_czech_ci_handler =
  596. {
  597.   NULL, /* init */
  598.   my_strnncoll_win1250ch,
  599.   my_strnncollsp_win1250ch,
  600.   my_strnxfrm_win1250ch,
  601.   my_like_range_win1250ch,
  602.   my_wildcmp_8bit,
  603.   my_strcasecmp_8bit,
  604.   my_instr_simple,
  605.   my_hash_sort_simple
  606. };
  607. CHARSET_INFO my_charset_cp1250_czech_ci =
  608. {
  609.   34,0,0,                                     /* number    */
  610.   MY_CS_COMPILED|MY_CS_STRNXFRM|MY_CS_CSSORT, /* state     */
  611.   "cp1250",                                   /* cs name   */
  612.   "cp1250_czech_cs",                          /* name      */
  613.   "",                                         /* comment   */
  614.   NULL,                                       /* tailoring */
  615.   ctype_win1250ch,
  616.   to_lower_win1250ch,
  617.   to_upper_win1250ch,
  618.   sort_order_win1250ch,
  619.   NULL, /* contractions */
  620.   NULL, /* sort_order_big*/
  621.   tab_cp1250_uni, /* tab_to_uni   */
  622.   idx_uni_cp1250, /* tab_from_uni */
  623.   NULL, /* state_map    */
  624.   NULL, /* ident_map    */
  625.   2, /* strxfrm_multiply */
  626.   1, /* mbminlen  */
  627.   1, /* mbmaxlen  */
  628.   0, /* min_sort_char */
  629.   0, /* max_sort_char */
  630.   0,                            /* escape_with_backslash_is_dangerous */
  631.   &my_charset_8bit_handler,
  632.   &my_collation_czech_ci_handler
  633. };
  634. #endif /* REAL_MYSQL */
  635. #endif /* HAVE_CHARSET_cp1250 */