~drizzle-trunk/drizzle/development

1 by brian
clean slate
1
/* Copyright (C) 2000-2003 MySQL AB
2
3
   This program is free software; you can redistribute it and/or modify
4
   it under the terms of the GNU General Public License as published by
5
   the Free Software Foundation; version 2 of the License.
6
7
   This program is distributed in the hope that it will be useful,
8
   but WITHOUT ANY WARRANTY; without even the implied warranty of
9
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10
   GNU General Public License for more details.
11
12
   You should have received a copy of the GNU General Public License
13
   along with this program; if not, write to the Free Software
14
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
15
16
/*
17
   Copyright (C) 2003  by Sathit Jittanupat
18
          <jsat66@hotmail.com,jsat66@yahoo.com>
19
	* solving bug crash with long text field string
20
	* sorting with different number of space or sign char. within string
21
22
   Copyright (C) 2001  by Korakot Chaovavanich <korakot@iname.com> and
23
			  Apisilp Trunganont <apisilp@pantip.inet.co.th>
24
   Copyright (C) 1998, 1999 by Pruet Boonma <pruet@eng.cmu.ac.th>
25
   Copyright (C) 1998  by Theppitak Karoonboonyanan <thep@links.nectec.or.th>
26
   Copyright (C) 1989, 1991 by Samphan Raruenrom <samphan@thai.com>
27
28
   Permission to use, copy, modify, distribute and sell this software
29
   and its documentation for any purpose is hereby granted without fee,
30
   provided that the above copyright notice appear in all copies.
31
   Samphan Raruenrom , Theppitak Karoonboonyanan , Pruet Boonma ,
32
   Korakot Chaovavanich and Apisilp Trunganont makes no representations
33
   about the suitability of this software for any purpose.  It is provided
34
   "as is" without express or implied warranty.
35
*/
36
37
38
/*
39
   This file is basicly tis620 character sets with some extra functions
40
   for tis-620 handling
41
*/
42
43
/*
44
 * This comment is parsed by configure to create ctype.c,
45
 * so don't change it unless you know what you are doing.
46
 *
47
 * .configure. strxfrm_multiply_tis620=4
48
 */
49
50
#include <my_global.h>
51
#include <my_sys.h>
52
#include "m_string.h"
53
#include "m_ctype.h"
54
#include "t_ctype.h"
55
56
#ifdef HAVE_CHARSET_tis620
57
58
#define BUFFER_MULTIPLY 4
59
#define M  L_MIDDLE
60
#define U  L_UPPER
61
#define L  L_LOWER
62
#define UU L_UPRUPR
63
#define X  L_MIDDLE
64
65
66
static int t_ctype[][TOT_LEVELS] = {
67
    /*0x00*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
68
    /*0x01*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
69
    /*0x02*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
70
    /*0x03*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
71
    /*0x04*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
72
    /*0x05*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
73
    /*0x06*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
74
    /*0x07*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
75
    /*0x08*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
76
    /*0x09*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
77
    /*0x0A*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
78
    /*0x0B*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
79
    /*0x0C*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
80
    /*0x0D*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
81
    /*0x0E*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
82
    /*0x0F*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
83
    /*0x10*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
84
    /*0x11*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
85
    /*0x12*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
86
    /*0x13*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
87
    /*0x14*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
88
    /*0x15*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
89
    /*0x16*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
90
    /*0x17*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
91
    /*0x18*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
92
    /*0x19*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
93
    /*0x1A*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
94
    /*0x1B*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
95
    /*0x1C*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
96
    /*0x1D*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
97
    /*0x1E*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
98
    /*0x1F*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
99
    /*0x20*/ { IGNORE, IGNORE, L3_SPACE, IGNORE, M},
100
    /*0x21*/ { IGNORE, IGNORE, L3_EXCLAMATION, IGNORE, M    },
101
    /*0x22*/ { IGNORE, IGNORE, L3_QUOTATION, IGNORE, M	    },
102
    /*0x23*/ { IGNORE, IGNORE, L3_NUMBER, IGNORE, M	    },
103
    /*0x24*/ { IGNORE, IGNORE, L3_DOLLAR, IGNORE, M	    },
104
    /*0x25*/ { IGNORE, IGNORE, L3_PERCENT, IGNORE, M	    },
105
    /*0x26*/ { IGNORE, IGNORE, L3_AMPERSAND, IGNORE, M	    },
106
    /*0x27*/ { IGNORE, IGNORE, L3_APOSTROPHE, IGNORE, M     },
107
    /*0x28*/ { IGNORE, IGNORE, L3_L_PARANTHESIS, IGNORE, M  },
108
    /*0x29*/ { IGNORE, IGNORE, L3_R_PARENTHESIS, IGNORE, M  },
109
    /*0x2A*/ { IGNORE, IGNORE, L3_ASTERISK, IGNORE, M	    },
110
    /*0x2B*/ { IGNORE, IGNORE, L3_PLUS, IGNORE, M	    },
111
    /*0x2C*/ { IGNORE, IGNORE, L3_COMMA, IGNORE, M	    },
112
    /*0x2D*/ { IGNORE, IGNORE, L3_HYPHEN, IGNORE, M	    },
113
    /*0x2E*/ { IGNORE, IGNORE, L3_FULL_STOP, IGNORE, M	    },
114
    /*0x2F*/ { IGNORE, IGNORE, L3_SOLIDUS, IGNORE, M	    },
115
    /*0x30*/ { L1_08, L2_BLANK, L3_BLANK, L4_BLANK, M  },
116
    /*0x31*/ { L1_18, L2_BLANK, L3_BLANK, L4_BLANK, M  },
117
    /*0x32*/ { L1_28, L2_BLANK, L3_BLANK, L4_BLANK, M  },
118
    /*0x33*/ { L1_38, L2_BLANK, L3_BLANK, L4_BLANK, M  },
119
    /*0x34*/ { L1_48, L2_BLANK, L3_BLANK, L4_BLANK, M  },
120
    /*0x35*/ { L1_58, L2_BLANK, L3_BLANK, L4_BLANK, M  },
121
    /*0x36*/ { L1_68, L2_BLANK, L3_BLANK, L4_BLANK, M  },
122
    /*0x37*/ { L1_78, L2_BLANK, L3_BLANK, L4_BLANK, M  },
123
    /*0x38*/ { L1_88, L2_BLANK, L3_BLANK, L4_BLANK, M  },
124
    /*0x39*/ { L1_98, L2_BLANK, L3_BLANK, L4_BLANK, M  },
125
    /*0x3A*/ { IGNORE, IGNORE, L3_COLON, IGNORE, M	    },
126
    /*0x3B*/ { IGNORE, IGNORE, L3_SEMICOLON, IGNORE, M	    },
127
    /*0x3C*/ { IGNORE, IGNORE, L3_LESS_THAN, IGNORE, M	    },
128
    /*0x3D*/ { IGNORE, IGNORE, L3_EQUAL, IGNORE, M	    },
129
    /*0x3E*/ { IGNORE, IGNORE, L3_GREATER_THAN, IGNORE, M   },
130
    /*0x3F*/ { IGNORE, IGNORE, L3_QUESTION, IGNORE, M	    },
131
    /*0x40*/ { IGNORE, IGNORE, L3_AT, IGNORE, M		    },
132
    /*0x41*/ { L1_A8, L2_BLANK, L3_BLANK, L4_CAP, M  },
133
    /*0x42*/ { L1_B8, L2_BLANK, L3_BLANK, L4_CAP, M  },
134
    /*0x43*/ { L1_C8, L2_BLANK, L3_BLANK, L4_CAP, M  },
135
    /*0x44*/ { L1_D8, L2_BLANK, L3_BLANK, L4_CAP, M  },
136
    /*0x45*/ { L1_E8, L2_BLANK, L3_BLANK, L4_CAP, M  },
137
    /*0x46*/ { L1_F8, L2_BLANK, L3_BLANK, L4_CAP, M  },
138
    /*0x47*/ { L1_G8, L2_BLANK, L3_BLANK, L4_CAP, M  },
139
    /*0x48*/ { L1_H8, L2_BLANK, L3_BLANK, L4_CAP, M  },
140
    /*0x49*/ { L1_I8, L2_BLANK, L3_BLANK, L4_CAP, M  },
141
    /*0x4A*/ { L1_J8, L2_BLANK, L3_BLANK, L4_CAP, M  },
142
    /*0x4B*/ { L1_K8, L2_BLANK, L3_BLANK, L4_CAP, M  },
143
    /*0x4C*/ { L1_L8, L2_BLANK, L3_BLANK, L4_CAP, M  },
144
    /*0x4D*/ { L1_M8, L2_BLANK, L3_BLANK, L4_CAP, M  },
145
    /*0x4E*/ { L1_N8, L2_BLANK, L3_BLANK, L4_CAP, M  },
146
    /*0x4F*/ { L1_O8, L2_BLANK, L3_BLANK, L4_CAP, M  },
147
    /*0x50*/ { L1_P8, L2_BLANK, L3_BLANK, L4_CAP, M  },
148
    /*0x51*/ { L1_Q8, L2_BLANK, L3_BLANK, L4_CAP, M  },
149
    /*0x52*/ { L1_R8, L2_BLANK, L3_BLANK, L4_CAP, M  },
150
    /*0x53*/ { L1_S8, L2_BLANK, L3_BLANK, L4_CAP, M  },
151
    /*0x54*/ { L1_T8, L2_BLANK, L3_BLANK, L4_CAP, M  },
152
    /*0x55*/ { L1_U8, L2_BLANK, L3_BLANK, L4_CAP, M  },
153
    /*0x56*/ { L1_V8, L2_BLANK, L3_BLANK, L4_CAP, M  },
154
    /*0x57*/ { L1_W8, L2_BLANK, L3_BLANK, L4_CAP, M  },
155
    /*0x58*/ { L1_X8, L2_BLANK, L3_BLANK, L4_CAP, M  },
156
    /*0x59*/ { L1_Y8, L2_BLANK, L3_BLANK, L4_CAP, M  },
157
    /*0x5A*/ { L1_Z8, L2_BLANK, L3_BLANK, L4_CAP, M  },
158
    /*0x5B*/ { IGNORE, IGNORE, L3_L_BRACKET, IGNORE, M	    },
159
    /*0x5C*/ { IGNORE, IGNORE, L3_BK_SOLIDUS, IGNORE, M     },
160
    /*0x5D*/ { IGNORE, IGNORE, L3_R_BRACKET, IGNORE, M	    },
161
    /*0x5E*/ { IGNORE, IGNORE, L3_CIRCUMFLEX, IGNORE, M     },
162
    /*0x5F*/ { IGNORE, IGNORE, L3_LOW_LINE, IGNORE, M	    },
163
    /*0x60*/ { IGNORE, IGNORE, L3_GRAVE, IGNORE, M	    },
164
    /*0x61*/ { L1_A8, L2_BLANK, L3_BLANK, L4_MIN, M  },
165
    /*0x62*/ { L1_B8, L2_BLANK, L3_BLANK, L4_MIN, M  },
166
    /*0x63*/ { L1_C8, L2_BLANK, L3_BLANK, L4_MIN, M  },
167
    /*0x64*/ { L1_D8, L2_BLANK, L3_BLANK, L4_MIN, M  },
168
    /*0x65*/ { L1_E8, L2_BLANK, L3_BLANK, L4_MIN, M  },
169
    /*0x66*/ { L1_F8, L2_BLANK, L3_BLANK, L4_MIN, M  },
170
    /*0x67*/ { L1_G8, L2_BLANK, L3_BLANK, L4_MIN, M  },
171
    /*0x68*/ { L1_H8, L2_BLANK, L3_BLANK, L4_MIN, M  },
172
    /*0x69*/ { L1_I8, L2_BLANK, L3_BLANK, L4_MIN, M  },
173
    /*0x6A*/ { L1_J8, L2_BLANK, L3_BLANK, L4_MIN, M  },
174
    /*0x6B*/ { L1_K8, L2_BLANK, L3_BLANK, L4_MIN, M  },
175
    /*0x6C*/ { L1_L8, L2_BLANK, L3_BLANK, L4_MIN, M  },
176
    /*0x6D*/ { L1_M8, L2_BLANK, L3_BLANK, L4_MIN, M  },
177
    /*0x6E*/ { L1_N8, L2_BLANK, L3_BLANK, L4_MIN, M  },
178
    /*0x6F*/ { L1_O8, L2_BLANK, L3_BLANK, L4_MIN, M  },
179
    /*0x70*/ { L1_P8, L2_BLANK, L3_BLANK, L4_MIN, M  },
180
    /*0x71*/ { L1_Q8, L2_BLANK, L3_BLANK, L4_MIN, M  },
181
    /*0x72*/ { L1_R8, L2_BLANK, L3_BLANK, L4_MIN, M  },
182
    /*0x73*/ { L1_S8, L2_BLANK, L3_BLANK, L4_MIN, M  },
183
    /*0x74*/ { L1_T8, L2_BLANK, L3_BLANK, L4_MIN, M  },
184
    /*0x75*/ { L1_U8, L2_BLANK, L3_BLANK, L4_MIN, M  },
185
    /*0x76*/ { L1_V8, L2_BLANK, L3_BLANK, L4_MIN, M  },
186
    /*0x77*/ { L1_W8, L2_BLANK, L3_BLANK, L4_MIN, M  },
187
    /*0x78*/ { L1_X8, L2_BLANK, L3_BLANK, L4_MIN, M  },
188
    /*0x79*/ { L1_Y8, L2_BLANK, L3_BLANK, L4_MIN, M  },
189
    /*0x7A*/ { L1_Z8, L2_BLANK, L3_BLANK, L4_MIN, M  },
190
    /*0x7B*/ { IGNORE, IGNORE, L3_L_BRACE, IGNORE, M	    },
191
    /*0x7C*/ { IGNORE, IGNORE, L3_V_LINE, IGNORE, M	    },
192
    /*0x7D*/ { IGNORE, IGNORE, L3_R_BRACE, IGNORE, M	    },
193
    /*0x7E*/ { IGNORE, IGNORE, L3_TILDE, IGNORE, M	    },
194
    /*0x7F*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
195
    /*0x80*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
196
    /*0x81*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
197
    /*0x82*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
198
    /*0x83*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
199
    /*0x84*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
200
    /*0x85*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
201
    /*0x86*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
202
    /*0x87*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
203
    /*0x88*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
204
    /*0x89*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
205
    /*0x8A*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
206
    /*0x8B*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
207
    /*0x8C*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
208
    /*0x8D*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
209
    /*0x8E*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
210
    /*0x8F*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
211
    /*0x90*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
212
    /*0x91*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
213
    /*0x92*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
214
    /*0x93*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
215
    /*0x94*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
216
    /*0x95*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
217
    /*0x96*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
218
    /*0x97*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
219
    /*0x98*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
220
    /*0x99*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
221
    /*0x9A*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
222
    /*0x9B*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
223
    /*0x9C*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
224
    /*0x9D*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
225
    /*0x9E*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
226
    /*0x9F*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
227
    /*0xA0*/ { IGNORE, IGNORE, L3_NB_SACE, IGNORE, X	    },
228
    /*0xA1*/ { L1_KO_KAI, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
229
    /*0xA2*/ { L1_KHO_KHAI, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
230
    /*0xA3*/ { L1_KHO_KHUAT, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
231
    /*0xA4*/ { L1_KHO_KHWAI, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
232
    /*0xA5*/ { L1_KHO_KHON, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
233
    /*0xA6*/ { L1_KHO_RAKHANG, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
234
    /*0xA7*/ { L1_NGO_NGU, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
235
    /*0xA8*/ { L1_CHO_CHAN, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
236
    /*0xA9*/ { L1_CHO_CHING, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
237
    /*0xAA*/ { L1_CHO_CHANG, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
238
    /*0xAB*/ { L1_SO_SO, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
239
    /*0xAC*/ { L1_CHO_CHOE,	L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
240
    /*0xAD*/ { L1_YO_YING, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
241
    /*0xAE*/ { L1_DO_CHADA,	L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
242
    /*0xAF*/ { L1_TO_PATAK,	L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
243
    /*0xB0*/ { L1_THO_THAN,	L2_BLANK,L3_BLANK, L4_BLANK, M | _consnt},
244
    /*0xB1*/ { L1_THO_NANGMONTHO, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
245
    /*0xB2*/ { L1_THO_PHUTHAO, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
246
    /*0xB3*/ { L1_NO_NEN, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
247
    /*0xB4*/ { L1_DO_DEK, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
248
    /*0xB5*/ { L1_TO_TAO, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
249
    /*0xB6*/ { L1_THO_THUNG, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
250
    /*0xB7*/ { L1_THO_THAHAN, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
251
    /*0xB8*/ { L1_THO_THONG, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
252
    /*0xB9*/ { L1_NO_NU, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
253
    /*0xBA*/ { L1_BO_BAIMAI, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
254
    /*0xBB*/ { L1_PO_PLA, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
255
    /*0xBC*/ { L1_PHO_PHUNG, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
256
    /*0xBD*/ { L1_FO_FA, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
257
    /*0xBE*/ { L1_PHO_PHAN, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
258
    /*0xBF*/ { L1_FO_FAN, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
259
    /*0xC0*/ { L1_PHO_SAMPHAO, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
260
    /*0xC1*/ { L1_MO_MA, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
261
    /*0xC2*/ { L1_YO_YAK, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
262
    /*0xC3*/ { L1_RO_RUA, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
263
    /*0xC4*/ { L1_RU, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
264
    /*0xC5*/ { L1_LO_LING, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
265
    /*0xC6*/ { L1_LU, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
266
    /*0xC7*/ { L1_WO_WAEN, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
267
    /*0xC8*/ { L1_SO_SALA, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
268
    /*0xC9*/ { L1_SO_RUSI, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
269
    /*0xCA*/ { L1_SO_SUA, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
270
    /*0xCB*/ { L1_HO_HIP, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
271
    /*0xCC*/ { L1_LO_CHULA,	L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
272
    /*0xCD*/ { L1_O_ANG, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
273
    /*0xCE*/ { L1_HO_NOKHUK, L2_BLANK, L3_BLANK, L4_BLANK, M | _consnt},
274
    /*0xCF*/ { IGNORE, IGNORE, L3_PAIYAN_NOI, IGNORE, M},
275
    /*0xD0*/ { L1_SARA_A, L2_BLANK, L3_BLANK, L4_BLANK, M | _fllwvowel},
276
    /*0xD1*/ { L1_MAI_HAN_AKAT, L2_BLANK, L3_BLANK, L4_BLANK, U | _uprvowel},
277
    /*0xD2*/ { L1_SARA_AA, L2_BLANK, L3_BLANK, L4_BLANK, M | _fllwvowel},
278
    /*0xD3*/ { L1_SARA_AM, L2_BLANK, L3_BLANK, L4_BLANK, M | _fllwvowel},
279
    /*0xD4*/ { L1_SARA_I, L2_BLANK, L3_BLANK, L4_BLANK, U | _uprvowel},
280
    /*0xD5*/ { L1_SARA_II, L2_BLANK, L3_BLANK, L4_BLANK, U | _uprvowel},
281
    /*0xD6*/ { L1_SARA_UE, L2_BLANK, L3_BLANK, L4_BLANK, U | _uprvowel},
282
    /*0xD7*/ { L1_SARA_UEE, L2_BLANK, L3_BLANK, L4_BLANK, U | _uprvowel},
283
    /*0xD8*/ { L1_SARA_U, L2_BLANK, L3_BLANK, L4_BLANK, L | _lwrvowel},
284
    /*0xD9*/ { L1_SARA_UU, L2_BLANK, L3_BLANK, L4_BLANK, L | _lwrvowel},
285
    /*0xDA*/ { IGNORE, L2_PINTHU, L3_BLANK, L4_BLANK, L  },
286
    /*0xDB*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
287
    /*0xDC*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
288
    /*0xDD*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
289
    /*0xDE*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
290
    /*0xDF*/ { IGNORE, IGNORE, L3_BAHT, IGNORE, M},
291
    /*0xE0*/ { L1_SARA_E, L2_BLANK, L3_BLANK, L4_BLANK, M | _ldvowel },
292
    /*0xE1*/ { L1_SARA_AE, L2_BLANK, L3_BLANK, L4_BLANK, M | _ldvowel },
293
    /*0xE2*/ { L1_SARA_O, L2_BLANK, L3_BLANK, L4_BLANK, M | _ldvowel  },
294
    /*0xE3*/ { L1_SARA_AI_MAIMUAN,	L2_BLANK, L3_BLANK, L4_BLANK, M | _ldvowel },
295
    /*0xE4*/ { L1_SARA_AI_MAIMALAI, L2_BLANK, L3_BLANK, L4_BLANK, M | _ldvowel },
296
    /*0xE5*/ { L1_SARA_AA, L2_BLANK, L3_BLANK, L4_EXT, M  | _fllwvowel },
297
    /*0xE6*/ { IGNORE, IGNORE, L3_MAI_YAMOK, IGNORE, M | _stone },
298
    /*0xE7*/ { IGNORE, L2_TYKHU, L3_BLANK, L4_BLANK, U | _diacrt1 | _stone  },
299
    /*0xE8*/ { IGNORE, L2_TONE1, L3_BLANK, L4_BLANK, UU | _tone | _combine | _stone  },
300
    /*0xE9*/ { IGNORE, L2_TONE2, L3_BLANK, L4_BLANK, UU | _tone | _combine | _stone  },
301
    /*0xEA*/ { IGNORE, L2_TONE3, L3_BLANK, L4_BLANK, UU | _tone | _combine | _stone  },
302
    /*0xEB*/ { IGNORE, L2_TONE4, L3_BLANK, L4_BLANK, UU | _tone | _combine | _stone },
303
    /*0xEC*/ { IGNORE, L2_GARAN, L3_BLANK, L4_BLANK, UU | _diacrt2 | _combine | _stone },
304
    /*0xED*/ { L1_NKHIT, L2_BLANK, L3_BLANK, L4_BLANK, U | _diacrt1  },
305
    /*0xEE*/ { IGNORE, L2_YAMAK, L3_BLANK, L4_BLANK, U | _diacrt1 },
306
    /*0xEF*/ { IGNORE, IGNORE, L3_FONGMAN, IGNORE, M  },
307
    /*0xF0*/ { L1_08, L2_THAII, L3_BLANK, L4_BLANK, M | _tdig },
308
    /*0xF1*/ { L1_18, L2_THAII, L3_BLANK, L4_BLANK, M | _tdig },
309
    /*0xF2*/ { L1_28, L2_THAII, L3_BLANK, L4_BLANK, M | _tdig },
310
    /*0xF3*/ { L1_38, L2_THAII, L3_BLANK, L4_BLANK, M | _tdig },
311
    /*0xF4*/ { L1_48, L2_THAII, L3_BLANK, L4_BLANK, M | _tdig },
312
    /*0xF5*/ { L1_58, L2_THAII, L3_BLANK, L4_BLANK, M | _tdig },
313
    /*0xF6*/ { L1_68, L2_THAII, L3_BLANK, L4_BLANK, M | _tdig },
314
    /*0xF7*/ { L1_78, L2_THAII, L3_BLANK, L4_BLANK, M | _tdig },
315
    /*0xF8*/ { L1_88, L2_THAII, L3_BLANK, L4_BLANK, M | _tdig },
316
    /*0xF9*/ { L1_98, L2_THAII, L3_BLANK, L4_BLANK, M | _tdig },
317
    /*0xFA*/ { IGNORE, IGNORE, L3_ANGKHANKHU, IGNORE, X },
318
    /*0xFB*/ { IGNORE, IGNORE, L3_KHOMUT, IGNORE, X },
319
    /*0xFC*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
320
    /*0xFD*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
321
    /*0xFE*/ { IGNORE, IGNORE, IGNORE, IGNORE, X },
322
    /* Utilize 0xFF for max_sort_chr in my_like_range_tis620 */
323
    /*0xFF*/ { 255 /*IGNORE*/, IGNORE, IGNORE, IGNORE, X },
324
};
325
326
static uchar ctype_tis620[257] =
327
{
328
  0,				/* For standard library */
329
  32,32,32,32,32,32,32,32,32,40,40,40,40,40,32,32,
330
  32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,32,
331
  72,16,16,16,16,16,16,16,16,16,16,16,16,16,16,16,
332
  132,132,132,132,132,132,132,132,132,132,16,16,16,16,16,16,
333
  16,129,129,129,129,129,129,1,1,1,1,1,1,1,1,1,
334
  1,1,1,1,1,1,1,1,1,1,1,16,16,16,16,16,
335
  16,130,130,130,130,130,130,2,2,2,2,2,2,2,2,2,
336
  2,2,2,2,2,2,2,2,2,2,2,16,16,16,16,32,
337
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
338
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
339
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
340
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
341
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
342
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
343
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
344
  0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
345
};
346
347
static uchar to_lower_tis620[]=
348
{
349
  '\000','\001','\002','\003','\004','\005','\006','\007',
350
  '\010','\011','\012','\013','\014','\015','\016','\017',
351
  '\020','\021','\022','\023','\024','\025','\026','\027',
352
  '\030','\031','\032','\033','\034','\035','\036','\037',
353
  ' ',	 '!',	'"',   '#',   '$',   '%',   '&',   '\'',
354
  '(',	 ')',	'*',   '+',   ',',   '-',   '.',   '/',
355
  '0',	 '1',	'2',   '3',   '4',   '5',   '6',   '7',
356
  '8',	 '9',	':',   ';',   '<',   '=',   '>',   '?',
357
  '@',	 'a',	'b',   'c',   'd',   'e',   'f',   'g',
358
  'h',	 'i',	'j',   'k',   'l',   'm',   'n',   'o',
359
  'p',	 'q',	'r',   's',   't',   'u',   'v',   'w',
360
  'x',	 'y',	'z',   '[',   '\\',  ']',   '^',   '_',
361
  '`',	 'a',	'b',   'c',   'd',   'e',   'f',   'g',
362
  'h',	 'i',	'j',   'k',   'l',   'm',   'n',   'o',
363
  'p',	 'q',	'r',   's',   't',   'u',   'v',   'w',
364
  'x',	 'y',	'z',   '{',   '|',   '}',   '~',   '\177',
365
  (uchar) '\200',(uchar) '\201',(uchar) '\202',(uchar) '\203',(uchar) '\204',(uchar) '\205',(uchar) '\206',(uchar) '\207',
366
  (uchar) '\210',(uchar) '\211',(uchar) '\212',(uchar) '\213',(uchar) '\214',(uchar) '\215',(uchar) '\216',(uchar) '\217',
367
  (uchar) '\220',(uchar) '\221',(uchar) '\222',(uchar) '\223',(uchar) '\224',(uchar) '\225',(uchar) '\226',(uchar) '\227',
368
  (uchar) '\230',(uchar) '\231',(uchar) '\232',(uchar) '\233',(uchar) '\234',(uchar) '\235',(uchar) '\236',(uchar) '\237',
369
  (uchar) '\240',(uchar) '\241',(uchar) '\242',(uchar) '\243',(uchar) '\244',(uchar) '\245',(uchar) '\246',(uchar) '\247',
370
  (uchar) '\250',(uchar) '\251',(uchar) '\252',(uchar) '\253',(uchar) '\254',(uchar) '\255',(uchar) '\256',(uchar) '\257',
371
  (uchar) '\260',(uchar) '\261',(uchar) '\262',(uchar) '\263',(uchar) '\264',(uchar) '\265',(uchar) '\266',(uchar) '\267',
372
  (uchar) '\270',(uchar) '\271',(uchar) '\272',(uchar) '\273',(uchar) '\274',(uchar) '\275',(uchar) '\276',(uchar) '\277',
373
  (uchar) '\300',(uchar) '\301',(uchar) '\302',(uchar) '\303',(uchar) '\304',(uchar) '\305',(uchar) '\306',(uchar) '\307',
374
  (uchar) '\310',(uchar) '\311',(uchar) '\312',(uchar) '\313',(uchar) '\314',(uchar) '\315',(uchar) '\316',(uchar) '\317',
375
  (uchar) '\320',(uchar) '\321',(uchar) '\322',(uchar) '\323',(uchar) '\324',(uchar) '\325',(uchar) '\326',(uchar) '\327',
376
  (uchar) '\330',(uchar) '\331',(uchar) '\332',(uchar) '\333',(uchar) '\334',(uchar) '\335',(uchar) '\336',(uchar) '\337',
377
  (uchar) '\340',(uchar) '\341',(uchar) '\342',(uchar) '\343',(uchar) '\344',(uchar) '\345',(uchar) '\346',(uchar) '\347',
378
  (uchar) '\350',(uchar) '\351',(uchar) '\352',(uchar) '\353',(uchar) '\354',(uchar) '\355',(uchar) '\356',(uchar) '\357',
379
  (uchar) '\360',(uchar) '\361',(uchar) '\362',(uchar) '\363',(uchar) '\364',(uchar) '\365',(uchar) '\366',(uchar) '\367',
380
  (uchar) '\370',(uchar) '\371',(uchar) '\372',(uchar) '\373',(uchar) '\374',(uchar) '\375',(uchar) '\376',(uchar) '\377',
381
};
382
383
static uchar to_upper_tis620[]=
384
{
385
  '\000','\001','\002','\003','\004','\005','\006','\007',
386
  '\010','\011','\012','\013','\014','\015','\016','\017',
387
  '\020','\021','\022','\023','\024','\025','\026','\027',
388
  '\030','\031','\032','\033','\034','\035','\036','\037',
389
  ' ',	 '!',	'"',   '#',   '$',   '%',   '&',   '\'',
390
  '(',	 ')',	'*',   '+',   ',',   '-',   '.',   '/',
391
  '0',	 '1',	'2',   '3',   '4',   '5',   '6',   '7',
392
  '8',	 '9',	':',   ';',   '<',   '=',   '>',   '?',
393
  '@',	 'A',	'B',   'C',   'D',   'E',   'F',   'G',
394
  'H',	 'I',	'J',   'K',   'L',   'M',   'N',   'O',
395
  'P',	 'Q',	'R',   'S',   'T',   'U',   'V',   'W',
396
  'X',	 'Y',	'Z',   '[',   '\\',  ']',   '^',   '_',
397
  '`',	 'A',	'B',   'C',   'D',   'E',   'F',   'G',
398
  'H',	 'I',	'J',   'K',   'L',   'M',   'N',   'O',
399
  'P',	 'Q',	'R',   'S',   'T',   'U',   'V',   'W',
400
  'X',	 'Y',	'Z',   '{',   '|',   '}',   '~',   '\177',
401
  (uchar) '\200',(uchar) '\201',(uchar) '\202',(uchar) '\203',(uchar) '\204',(uchar) '\205',(uchar) '\206',(uchar) '\207',
402
  (uchar) '\210',(uchar) '\211',(uchar) '\212',(uchar) '\213',(uchar) '\214',(uchar) '\215',(uchar) '\216',(uchar) '\217',
403
  (uchar) '\220',(uchar) '\221',(uchar) '\222',(uchar) '\223',(uchar) '\224',(uchar) '\225',(uchar) '\226',(uchar) '\227',
404
  (uchar) '\230',(uchar) '\231',(uchar) '\232',(uchar) '\233',(uchar) '\234',(uchar) '\235',(uchar) '\236',(uchar) '\237',
405
  (uchar) '\240',(uchar) '\241',(uchar) '\242',(uchar) '\243',(uchar) '\244',(uchar) '\245',(uchar) '\246',(uchar) '\247',
406
  (uchar) '\250',(uchar) '\251',(uchar) '\252',(uchar) '\253',(uchar) '\254',(uchar) '\255',(uchar) '\256',(uchar) '\257',
407
  (uchar) '\260',(uchar) '\261',(uchar) '\262',(uchar) '\263',(uchar) '\264',(uchar) '\265',(uchar) '\266',(uchar) '\267',
408
  (uchar) '\270',(uchar) '\271',(uchar) '\272',(uchar) '\273',(uchar) '\274',(uchar) '\275',(uchar) '\276',(uchar) '\277',
409
  (uchar) '\300',(uchar) '\301',(uchar) '\302',(uchar) '\303',(uchar) '\304',(uchar) '\305',(uchar) '\306',(uchar) '\307',
410
  (uchar) '\310',(uchar) '\311',(uchar) '\312',(uchar) '\313',(uchar) '\314',(uchar) '\315',(uchar) '\316',(uchar) '\317',
411
  (uchar) '\320',(uchar) '\321',(uchar) '\322',(uchar) '\323',(uchar) '\324',(uchar) '\325',(uchar) '\326',(uchar) '\327',
412
  (uchar) '\330',(uchar) '\331',(uchar) '\332',(uchar) '\333',(uchar) '\334',(uchar) '\335',(uchar) '\336',(uchar) '\337',
413
  (uchar) '\340',(uchar) '\341',(uchar) '\342',(uchar) '\343',(uchar) '\344',(uchar) '\345',(uchar) '\346',(uchar) '\347',
414
  (uchar) '\350',(uchar) '\351',(uchar) '\352',(uchar) '\353',(uchar) '\354',(uchar) '\355',(uchar) '\356',(uchar) '\357',
415
  (uchar) '\360',(uchar) '\361',(uchar) '\362',(uchar) '\363',(uchar) '\364',(uchar) '\365',(uchar) '\366',(uchar) '\367',
416
  (uchar) '\370',(uchar) '\371',(uchar) '\372',(uchar) '\373',(uchar) '\374',(uchar) '\375',(uchar) '\376',(uchar) '\377',
417
};
418
419
static uchar sort_order_tis620[]=
420
{
421
  '\000','\001','\002','\003','\004','\005','\006','\007',
422
  '\010','\011','\012','\013','\014','\015','\016','\017',
423
  '\020','\021','\022','\023','\024','\025','\026','\027',
424
  '\030','\031','\032','\033','\034','\035','\036','\037',
425
  ' ',	 '!',	'"',   '#',   '$',   '%',   '&',   '\'',
426
  '(',	 ')',	'*',   '+',   ',',   '-',   '.',   '/',
427
  '0',	 '1',	'2',   '3',   '4',   '5',   '6',   '7',
428
  '8',	 '9',	':',   ';',   '<',   '=',   '>',   '?',
429
  '@',	 'A',	'B',   'C',   'D',   'E',   'F',   'G',
430
  'H',	 'I',	'J',   'K',   'L',   'M',   'N',   'O',
431
  'P',	 'Q',	'R',   'S',   'T',   'U',   'V',   'W',
432
  'X',	 'Y',	'Z',   '\\',  ']',   '[',   '^',   '_',
433
  'E',	 'A',	'B',   'C',   'D',   'E',   'F',   'G',
434
  'H',	 'I',	'J',   'K',   'L',   'M',   'N',   'O',
435
  'P',	 'Q',	'R',   'S',   'T',   'U',   'V',   'W',
436
  'X',	 'Y',	'Z',   '{',   '|',   '}',   'Y',   '\177',
437
  (uchar) '\200',(uchar) '\201',(uchar) '\202',(uchar) '\203',(uchar) '\204',(uchar) '\205',(uchar) '\206',(uchar) '\207',
438
  (uchar) '\210',(uchar) '\211',(uchar) '\212',(uchar) '\213',(uchar) '\214',(uchar) '\215',(uchar) '\216',(uchar) '\217',
439
  (uchar) '\220',(uchar) '\221',(uchar) '\222',(uchar) '\223',(uchar) '\224',(uchar) '\225',(uchar) '\226',(uchar) '\227',
440
  (uchar) '\230',(uchar) '\231',(uchar) '\232',(uchar) '\233',(uchar) '\234',(uchar) '\235',(uchar) '\236',(uchar) '\237',
441
  (uchar) '\240',(uchar) '\241',(uchar) '\242',(uchar) '\243',(uchar) '\244',(uchar) '\245',(uchar) '\246',(uchar) '\247',
442
  (uchar) '\250',(uchar) '\251',(uchar) '\252',(uchar) '\253',(uchar) '\254',(uchar) '\255',(uchar) '\256',(uchar) '\257',
443
  (uchar) '\260',(uchar) '\261',(uchar) '\262',(uchar) '\263',(uchar) '\264',(uchar) '\265',(uchar) '\266',(uchar) '\267',
444
  (uchar) '\270',(uchar) '\271',(uchar) '\272',(uchar) '\273',(uchar) '\274',(uchar) '\275',(uchar) '\276',(uchar) '\277',
445
  (uchar) '\300',(uchar) '\301',(uchar) '\302',(uchar) '\303',(uchar) '\304',(uchar) '\305',(uchar) '\306',(uchar) '\307',
446
  (uchar) '\310',(uchar) '\311',(uchar) '\312',(uchar) '\313',(uchar) '\314',(uchar) '\315',(uchar) '\316',(uchar) '\317',
447
  (uchar) '\320',(uchar) '\321',(uchar) '\322',(uchar) '\323',(uchar) '\324',(uchar) '\325',(uchar) '\326',(uchar) '\327',
448
  (uchar) '\330',(uchar) '\331',(uchar) '\332',(uchar) '\333',(uchar) '\334',(uchar) '\335',(uchar) '\336',(uchar) '\337',
449
  (uchar) '\340',(uchar) '\341',(uchar) '\342',(uchar) '\343',(uchar) '\344',(uchar) '\345',(uchar) '\346',(uchar) '\347',
450
  (uchar) '\350',(uchar) '\351',(uchar) '\352',(uchar) '\353',(uchar) '\354',(uchar) '\355',(uchar) '\356',(uchar) '\357',
451
  (uchar) '\360',(uchar) '\361',(uchar) '\362',(uchar) '\363',(uchar) '\364',(uchar) '\365',(uchar) '\366',(uchar) '\367',
452
  (uchar) '\370',(uchar) '\371',(uchar) '\372',(uchar) '\373',(uchar) '\374',(uchar) '\375',(uchar) '\376',(uchar) '\377',
453
};
454
455
456
/*
457
  Convert thai string to "Standard C String Function" sortable string
458
459
  SYNOPSIS
460
    thai2sortable()
461
    tstr		String to convert. Does not have to end with \0
462
    len			Length of tstr
463
*/
464
465
static size_t thai2sortable(uchar *tstr, size_t len)
466
{
467
  uchar	*p;
468
  int	tlen;
469
  uchar	l2bias;
470
471
  tlen= len;
472
  l2bias= 	256 - 8;
473
  for (p= tstr; tlen > 0; p++, tlen--)
474
  {
475
    uchar c= *p;
476
477
    if (isthai(c))
478
    {
479
      int *t_ctype0= t_ctype[c];
480
		    
481
      if (isconsnt(c))
482
	l2bias	-= 8;
483
      if (isldvowel(c) && tlen != 1 && isconsnt(p[1]))
484
      {
485
	/* simply swap between leading-vowel and consonant */
486
	*p= p[1];
487
	p[1]= c;
488
	tlen--;
489
	p++; 
490
	continue;
491
      }
492
493
      /* if found level 2 char (L2_GARAN,L2_TONE*,L2_TYKHU) move to last */
494
      if (t_ctype0[1] >= L2_GARAN)
495
      {
496
	/*
497
	  l2bias use to control position weight of l2char
498
	  example (*=l2char) XX*X must come before X*XX
499
	*/
500
	memmove((char*) p, (char*) (p+1), tlen-1);
501
	tstr[len-1]= l2bias + t_ctype0[1]- L2_GARAN +1;
502
	p--;
503
	continue;
504
      }
505
    }
506
    else
507
    {
508
      l2bias-= 8;
509
      *p= to_lower_tis620[c]; 
510
    }
511
  }
512
  return len;
513
}
514
515
516
/*
517
  strncoll() replacement, compare 2 string, both are converted to sortable
518
  string
519
520
  NOTE:
521
    We can't cut strings at end \0 as this would break comparision with
522
    LIKE characters, where the min range is stored as end \0
523
524
  Arg: 2 Strings and it compare length
525
  Ret: strcmp result
526
*/
527
528
static
529
int my_strnncoll_tis620(CHARSET_INFO *cs __attribute__((unused)),
530
                        const uchar *s1, size_t len1, 
531
                        const uchar *s2, size_t len2,
532
                        my_bool s2_is_prefix)
533
{
534
  uchar	buf[80] ;
535
  uchar *tc1, *tc2;
536
  int i;
537
538
  if (s2_is_prefix && len1 > len2)
539
    len1= len2;
540
541
  tc1= buf;
542
  if ((len1 + len2 +2) > (int) sizeof(buf))
543
    tc1= (uchar*) my_str_malloc(len1+len2+2);
544
  tc2= tc1 + len1+1;
545
  memcpy((char*) tc1, (char*) s1, len1);
546
  tc1[len1]= 0;		/* if length(s1)> len1, need to put 'end of string' */
547
  memcpy((char *)tc2, (char *)s2, len2);
548
  tc2[len2]= 0;		/* put end of string */
549
  thai2sortable(tc1, len1);
550
  thai2sortable(tc2, len2);
551
  i= strcmp((char*)tc1, (char*)tc2);
552
  if (tc1 != buf)
553
    my_str_free(tc1);
554
  return i;
555
}
556
557
558
static
559
int my_strnncollsp_tis620(CHARSET_INFO * cs __attribute__((unused)),
560
			  const uchar *a0, size_t a_length, 
561
			  const uchar *b0, size_t b_length,
562
                          my_bool diff_if_only_endspace_difference)
563
{
564
  uchar	buf[80], *end, *a, *b, *alloced= NULL;
565
  size_t length;
566
  int res= 0;
567
568
#ifndef VARCHAR_WITH_DIFF_ENDSPACE_ARE_DIFFERENT_FOR_UNIQUE
569
  diff_if_only_endspace_difference= 0;
570
#endif
571
  
572
  a= buf;
573
  if ((a_length + b_length +2) > (int) sizeof(buf))
574
    alloced= a= (uchar*) my_str_malloc(a_length+b_length+2);
575
  
576
  b= a + a_length+1;
577
  memcpy((char*) a, (char*) a0, a_length);
578
  a[a_length]= 0;	/* if length(a0)> len1, need to put 'end of string' */
579
  memcpy((char *)b, (char *)b0, b_length);
580
  b[b_length]= 0;	/* put end of string */
581
  a_length= thai2sortable(a, a_length);
582
  b_length= thai2sortable(b, b_length);
583
  
584
  end= a + (length= min(a_length, b_length));
585
  while (a < end)
586
  {
587
    if (*a++ != *b++)
588
    {
589
      res= ((int) a[-1] - (int) b[-1]);
590
      goto ret;
591
    }
592
  }
593
  if (a_length != b_length)
594
  {
595
    int swap= 1;
596
    if (diff_if_only_endspace_difference)
597
      res= 1;                                   /* Assume 'a' is bigger */
598
    /*
599
      Check the next not space character of the longer key. If it's < ' ',
600
      then it's smaller than the other key.
601
    */
602
    if (a_length < b_length)
603
    {
604
      /* put shorter key in s */
605
      a_length= b_length;
606
      a= b;
607
      swap= -1;					/* swap sign of result */
608
      res= -res;
609
    }
610
    for (end= a + a_length-length; a < end ; a++)
611
    {
612
      if (*a != ' ')
613
      {
614
	res= (*a < ' ') ? -swap : swap;
615
	goto ret;
616
      }
617
    }
618
  }
619
  
620
ret:
621
  
622
  if (alloced)
623
    my_str_free(alloced);
624
  return res;
625
}
626
627
628
/*
629
  strnxfrm replacment, convert Thai string to sortable string
630
631
  Arg: Destination buffer, source string, dest length and source length
632
  Ret: Conveted string size
633
*/
634
635
static
636
size_t my_strnxfrm_tis620(CHARSET_INFO *cs,
637
                       uchar *dst, size_t dstlen, uint nweights,
638
                       const uchar *src, size_t srclen, uint flags)
639
{
640
  size_t len;
641
  len= (uint) (strmake((char*) dst, (char*) src, min(dstlen, srclen)) -
642
	               (char*) dst);
643
  len= thai2sortable(dst, len);
644
  set_if_smaller(dstlen, nweights);
645
  set_if_smaller(len, dstlen); 
646
  return my_strxfrm_pad_desc_and_reverse(cs, dst, dst + len, dst + dstlen,
647
                                         dstlen - len, flags, 0);
648
}
649
650
651
static unsigned short cs_to_uni[256]={
652
0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
653
0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
654
0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
655
0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
656
0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
657
0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
658
0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
659
0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
660
0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
661
0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
662
0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
663
0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
664
0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
665
0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
666
0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
667
0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
668
0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,
669
0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
670
0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,
671
0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
672
0xFFFD,0x0E01,0x0E02,0x0E03,0x0E04,0x0E05,0x0E06,0x0E07,
673
0x0E08,0x0E09,0x0E0A,0x0E0B,0x0E0C,0x0E0D,0x0E0E,0x0E0F,
674
0x0E10,0x0E11,0x0E12,0x0E13,0x0E14,0x0E15,0x0E16,0x0E17,
675
0x0E18,0x0E19,0x0E1A,0x0E1B,0x0E1C,0x0E1D,0x0E1E,0x0E1F,
676
0x0E20,0x0E21,0x0E22,0x0E23,0x0E24,0x0E25,0x0E26,0x0E27,
677
0x0E28,0x0E29,0x0E2A,0x0E2B,0x0E2C,0x0E2D,0x0E2E,0x0E2F,
678
0x0E30,0x0E31,0x0E32,0x0E33,0x0E34,0x0E35,0x0E36,0x0E37,
679
0x0E38,0x0E39,0x0E3A,0xFFFD,0xFFFD,0xFFFD,0xFFFD,0x0E3F,
680
0x0E40,0x0E41,0x0E42,0x0E43,0x0E44,0x0E45,0x0E46,0x0E47,
681
0x0E48,0x0E49,0x0E4A,0x0E4B,0x0E4C,0x0E4D,0x0E4E,0x0E4F,
682
0x0E50,0x0E51,0x0E52,0x0E53,0x0E54,0x0E55,0x0E56,0x0E57,
683
0x0E58,0x0E59,0x0E5A,0x0E5B,0xFFFD,0xFFFD,0xFFFD,0xFFFD
684
};
685
static uchar pl00[256]={
686
0x0000,0x0001,0x0002,0x0003,0x0004,0x0005,0x0006,0x0007,
687
0x0008,0x0009,0x000A,0x000B,0x000C,0x000D,0x000E,0x000F,
688
0x0010,0x0011,0x0012,0x0013,0x0014,0x0015,0x0016,0x0017,
689
0x0018,0x0019,0x001A,0x001B,0x001C,0x001D,0x001E,0x001F,
690
0x0020,0x0021,0x0022,0x0023,0x0024,0x0025,0x0026,0x0027,
691
0x0028,0x0029,0x002A,0x002B,0x002C,0x002D,0x002E,0x002F,
692
0x0030,0x0031,0x0032,0x0033,0x0034,0x0035,0x0036,0x0037,
693
0x0038,0x0039,0x003A,0x003B,0x003C,0x003D,0x003E,0x003F,
694
0x0040,0x0041,0x0042,0x0043,0x0044,0x0045,0x0046,0x0047,
695
0x0048,0x0049,0x004A,0x004B,0x004C,0x004D,0x004E,0x004F,
696
0x0050,0x0051,0x0052,0x0053,0x0054,0x0055,0x0056,0x0057,
697
0x0058,0x0059,0x005A,0x005B,0x005C,0x005D,0x005E,0x005F,
698
0x0060,0x0061,0x0062,0x0063,0x0064,0x0065,0x0066,0x0067,
699
0x0068,0x0069,0x006A,0x006B,0x006C,0x006D,0x006E,0x006F,
700
0x0070,0x0071,0x0072,0x0073,0x0074,0x0075,0x0076,0x0077,
701
0x0078,0x0079,0x007A,0x007B,0x007C,0x007D,0x007E,0x007F,
702
0x0080,0x0081,0x0082,0x0083,0x0084,0x0085,0x0086,0x0087,
703
0x0088,0x0089,0x008A,0x008B,0x008C,0x008D,0x008E,0x008F,
704
0x0090,0x0091,0x0092,0x0093,0x0094,0x0095,0x0096,0x0097,
705
0x0098,0x0099,0x009A,0x009B,0x009C,0x009D,0x009E,0x009F,
706
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
707
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
708
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
709
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
710
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
711
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
712
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
713
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
714
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
715
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
716
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
717
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
718
};
719
static uchar pl0E[256]={
720
0x0000,0x00A1,0x00A2,0x00A3,0x00A4,0x00A5,0x00A6,0x00A7,
721
0x00A8,0x00A9,0x00AA,0x00AB,0x00AC,0x00AD,0x00AE,0x00AF,
722
0x00B0,0x00B1,0x00B2,0x00B3,0x00B4,0x00B5,0x00B6,0x00B7,
723
0x00B8,0x00B9,0x00BA,0x00BB,0x00BC,0x00BD,0x00BE,0x00BF,
724
0x00C0,0x00C1,0x00C2,0x00C3,0x00C4,0x00C5,0x00C6,0x00C7,
725
0x00C8,0x00C9,0x00CA,0x00CB,0x00CC,0x00CD,0x00CE,0x00CF,
726
0x00D0,0x00D1,0x00D2,0x00D3,0x00D4,0x00D5,0x00D6,0x00D7,
727
0x00D8,0x00D9,0x00DA,0x0000,0x0000,0x0000,0x0000,0x00DF,
728
0x00E0,0x00E1,0x00E2,0x00E3,0x00E4,0x00E5,0x00E6,0x00E7,
729
0x00E8,0x00E9,0x00EA,0x00EB,0x00EC,0x00ED,0x00EE,0x00EF,
730
0x00F0,0x00F1,0x00F2,0x00F3,0x00F4,0x00F5,0x00F6,0x00F7,
731
0x00F8,0x00F9,0x00FA,0x00FB,0x0000,0x0000,0x0000,0x0000,
732
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
733
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
734
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
735
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
736
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
737
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
738
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
739
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
740
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
741
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
742
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
743
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
744
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
745
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
746
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
747
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
748
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
749
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
750
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
751
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000
752
};
753
static uchar plFF[256]={
754
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
755
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
756
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
757
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
758
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
759
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
760
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
761
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
762
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
763
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
764
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
765
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
766
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
767
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
768
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
769
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
770
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
771
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
772
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
773
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
774
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
775
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
776
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
777
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
778
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
779
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
780
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
781
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
782
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
783
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
784
0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,
785
0x0000,0x0000,0x0000,0x0000,0x0000,0x00FF,0x0000,0x0000
786
};
787
static uchar *uni_to_cs[256]={
788
pl00,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
789
NULL,NULL,NULL,NULL,NULL,NULL,pl0E,NULL,
790
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
791
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
792
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
793
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
794
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
795
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
796
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
797
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
798
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
799
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
800
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
801
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
802
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
803
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
804
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
805
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
806
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
807
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
808
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
809
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
810
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
811
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
812
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
813
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
814
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
815
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
816
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
817
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
818
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
819
NULL,NULL,NULL,NULL,NULL,NULL,NULL,plFF
820
};
821
822
823
static
824
int my_mb_wc_tis620(CHARSET_INFO *cs  __attribute__((unused)),
825
		  my_wc_t *wc,
826
		  const uchar *str,
827
		  const uchar *end __attribute__((unused)))
828
{
829
  if (str >= end)
830
    return MY_CS_TOOSMALL;
831
  
832
  *wc=cs_to_uni[*str];
833
  return (!wc[0] && str[0]) ? -1 : 1;
834
}
835
836
static
837
int my_wc_mb_tis620(CHARSET_INFO *cs  __attribute__((unused)),
838
		  my_wc_t wc,
839
		  uchar *str,
840
		  uchar *end __attribute__((unused)))
841
{
842
  uchar *pl;
843
  
844
  if (str >= end)
845
    return MY_CS_TOOSMALL;
846
  
847
  pl= uni_to_cs[(wc>>8) & 0xFF];
848
  str[0]= pl ? pl[wc & 0xFF] : '\0';
849
  return (!str[0] && wc) ? MY_CS_ILUNI : 1;
850
}
851
852
853
static MY_COLLATION_HANDLER my_collation_ci_handler =
854
{
855
    NULL,		/* init */
856
    my_strnncoll_tis620,
857
    my_strnncollsp_tis620,
858
    my_strnxfrm_tis620,
859
    my_strnxfrmlen_simple,
860
    my_like_range_simple,
861
    my_wildcmp_8bit,	/* wildcmp   */
862
    my_strcasecmp_8bit,
863
    my_instr_simple,				/* QQ: To be fixed */
864
    my_hash_sort_simple,
865
    my_propagate_simple
866
};
867
868
static MY_CHARSET_HANDLER my_charset_handler=
869
{
870
    NULL,		/* init */
871
    NULL,		/* ismbchar  */
872
    my_mbcharlen_8bit,	/* mbcharlen */
873
    my_numchars_8bit,
874
    my_charpos_8bit,
875
    my_well_formed_len_8bit,
876
    my_lengthsp_8bit,
877
    my_numcells_8bit,
878
    my_mb_wc_tis620,	/* mb_wc     */
879
    my_wc_mb_tis620,	/* wc_mb     */
880
    my_mb_ctype_8bit,
881
    my_caseup_str_8bit,
882
    my_casedn_str_8bit,
883
    my_caseup_8bit,
884
    my_casedn_8bit,
885
    my_snprintf_8bit,
886
    my_long10_to_str_8bit,
887
    my_longlong10_to_str_8bit,
888
    my_fill_8bit,
889
    my_strntol_8bit,
890
    my_strntoul_8bit,
891
    my_strntoll_8bit,
892
    my_strntoull_8bit,
893
    my_strntod_8bit,
894
    my_strtoll10_8bit,
895
    my_strntoull10rnd_8bit,
896
    my_scan_8bit
897
};
898
899
900
901
CHARSET_INFO my_charset_tis620_thai_ci=
902
{
903
    18,0,0,		/* number    */
904
    MY_CS_COMPILED|MY_CS_PRIMARY|MY_CS_STRNXFRM,	/* state     */
905
    "tis620",		/* cs name    */
906
    "tis620_thai_ci",	/* name      */
907
    "",			/* comment   */
908
    NULL,		/* tailoring */
909
    ctype_tis620,
910
    to_lower_tis620,
911
    to_upper_tis620,
912
    sort_order_tis620,
913
    NULL,		/* contractions */
914
    NULL,		/* sort_order_big*/
915
    NULL,		/* tab_to_uni   */
916
    NULL,		/* tab_from_uni */
917
    my_unicase_default, /* caseinfo     */
918
    NULL,		/* state_map    */
919
    NULL,		/* ident_map    */
920
    4,			/* strxfrm_multiply */
921
    1,                  /* caseup_multiply  */
922
    1,                  /* casedn_multiply  */
923
    1,			/* mbminlen   */
924
    1,			/* mbmaxlen  */
925
    0,			/* min_sort_char */
926
    255,		/* max_sort_char */
927
    ' ',                /* pad char      */
928
    0,                  /* escape_with_backslash_is_dangerous */
929
    1,                  /* levels_for_compare */
930
    1,                  /* levels_for_order   */
931
    &my_charset_handler,
932
    &my_collation_ci_handler
933
};
934
935
CHARSET_INFO my_charset_tis620_bin=
936
{
937
    89,0,0,		/* number    */
938
    MY_CS_COMPILED|MY_CS_BINSORT,	/* state     */
939
    "tis620",		/* cs name    */
940
    "tis620_bin",	/* name      */
941
    "",			/* comment   */
942
    NULL,		/* tailoring */
943
    ctype_tis620,
944
    to_lower_tis620,
945
    to_upper_tis620,
946
    NULL,		/* sort_order   */
947
    NULL,		/* contractions */
948
    NULL,		/* sort_order_big*/
949
    NULL,		/* tab_to_uni   */
950
    NULL,		/* tab_from_uni */
951
    my_unicase_default, /* caseinfo     */
952
    NULL,		/* state_map    */
953
    NULL,		/* ident_map    */
954
    1,			/* strxfrm_multiply */
955
    1,                  /* caseup_multiply  */
956
    1,                  /* casedn_multiply  */
957
    1,			/* mbminlen   */
958
    1,			/* mbmaxlen  */
959
    0,			/* min_sort_char */
960
    255,		/* max_sort_char */
961
    ' ',                /* pad char      */
962
    0,                  /* escape_with_backslash_is_dangerous */
963
    1,                  /* levels_for_compare */
964
    1,                  /* levels_for_order   */
965
    &my_charset_handler,
966
    &my_collation_8bit_bin_handler
967
};
968
969
970
#endif