ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/trunk/src/match.c
Revision: 9911
Committed: Tue Jan 26 16:22:40 2021 UTC (3 years, 2 months ago) by michael
Content type: text/x-csrc
File size: 21772 byte(s)
Log Message:
- match.c: use bool in some places

File Contents

# Content
1 /*
2 * ircd-hybrid: an advanced, lightweight Internet Relay Chat Daemon (ircd)
3 *
4 * Copyright (c) 1997-2021 ircd-hybrid development team
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
19 * USA
20 */
21
22 /*! \file match.c
23 * \brief Functions to match/compare strings.
24 * \version $Id$
25 */
26
27 #include "stdinc.h"
28 #include "irc_string.h"
29
30
31 /*! \brief Check a string against a mask.
32 * This test checks using traditional IRC wildcards only: '*' means
33 * match zero or more characters of any type; '?' means match exactly
34 * one character of any type. A backslash escapes the next character
35 * so that a wildcard may be matched exactly.
36 * param mask Wildcard-containing mask.
37 * param name String to check against \a mask.
38 * return Zero if \a mask matches \a name, non-zero if no match.
39 */
40 int
41 match(const char *mask, const char *name)
42 {
43 const char *m = mask, *n = name;
44 const char *m_tmp = mask, *n_tmp = name;
45 bool star = false;
46
47 while (true)
48 {
49 switch (*m)
50 {
51 case '\0':
52 if (*n == '\0')
53 return 0;
54 backtrack:
55 if (m_tmp == mask)
56 return 1;
57
58 m = m_tmp;
59 n = ++n_tmp;
60
61 if (*n == '\0')
62 return 1;
63 break;
64 case '\\':
65 ++m;
66
67 /* allow escaping to force capitalization */
68 if (*m++ != *n++)
69 goto backtrack;
70 break;
71 case '*':
72 case '?':
73 for (star = false; ; ++m)
74 {
75 if (*m == '*')
76 star = true;
77 else if (*m == '?')
78 {
79 if (*n++ == '\0')
80 goto backtrack;
81 }
82 else
83 break;
84 }
85
86 if (star)
87 {
88 if (*m == '\0')
89 return 0;
90 else if (*m == '\\')
91 {
92 m_tmp = ++m;
93
94 if (*m == '\0')
95 return 1;
96 for (n_tmp = n; *n && *n != *m; ++n)
97 ;
98 }
99 else
100 {
101 m_tmp = m;
102 for (n_tmp = n; *n && (ToLower(*n) != ToLower(*m)); ++n)
103 ;
104 }
105 }
106 /* and fall through */
107 default:
108 if (*n == '\0')
109 return *m != '\0';
110 if (ToLower(*m) != ToLower(*n))
111 goto backtrack;
112 ++m;
113 ++n;
114 break;
115 }
116 }
117
118 return 1;
119 }
120
121 /*
122 * collapse()
123 * Collapse a pattern string into minimal components.
124 * This particular version is "in place", so that it changes the pattern
125 * which is to be reduced to a "minimal" size.
126 *
127 * (C) Carlo Wood - 6 Oct 1998
128 * Speedup rewrite by Andrea Cocito, December 1998.
129 * Note that this new optimized algorithm can *only* work in place.
130 */
131
132 /*! \brief Collapse a mask string to remove redundancies.
133 * Specifically, it replaces a sequence of '*' followed by additional
134 * '*' or '?' with the same number of '?'s as the input, followed by
135 * one '*'. This minimizes useless backtracking when matching later.
136 * \param mask Mask string to collapse.
137 * \return Pointer to the start of the string.
138 */
139 char *
140 collapse(char *mask)
141 {
142 char *m = mask;
143 char *b = NULL;
144 bool star = false;
145
146 if (m)
147 {
148 do
149 {
150 if ((*m == '*') && (*(m + 1) == '*' || *(m + 1) == '?'))
151 {
152 b = m;
153
154 do
155 {
156 if (*m == '*')
157 star = true;
158 else
159 {
160 if (star && (*m != '?'))
161 {
162 *b++ = '*';
163 star = false;
164 }
165
166 *b++ = *m;
167
168 if ((*m == '\\') && (*(m + 1) == '*' || *(m + 1) == '?'))
169 *b++ = *++m;
170 }
171 } while (*m++);
172
173 break;
174 }
175 else
176 {
177 if ((*m == '\\') && (*(m + 1) == '*' || *(m + 1) == '?'))
178 ++m;
179 }
180 } while (*m++);
181 }
182
183 return mask;
184 }
185
186 /*
187 * irccmp - case insensitive comparison of two 0 terminated strings.
188 *
189 * returns 0, if s1 equal to s2
190 * 1, if not
191 */
192 int
193 irccmp(const char *s1, const char *s2)
194 {
195 const unsigned char *str1 = (const unsigned char *)s1;
196 const unsigned char *str2 = (const unsigned char *)s2;
197
198 assert(s1);
199 assert(s2);
200
201 for (; ToUpper(*str1) == ToUpper(*str2); ++str1, ++str2)
202 if (*str1 == '\0')
203 return 0;
204
205 return 1;
206 }
207
208 int
209 ircncmp(const char *s1, const char *s2, size_t n)
210 {
211 const unsigned char *str1 = (const unsigned char *)s1;
212 const unsigned char *str2 = (const unsigned char *)s2;
213
214 assert(s1);
215 assert(s2);
216 assert(n > 0);
217
218 if (n == 0)
219 return 0;
220
221 for (; ToUpper(*str1) == ToUpper(*str2); ++str1, ++str2)
222 if (--n == 0 || *str1 == '\0')
223 return 0;
224
225 return 1;
226 }
227
228 const unsigned char ToLowerTab[] =
229 {
230 0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa,
231 0xb, 0xc, 0xd, 0xe, 0xf, 0x10, 0x11, 0x12, 0x13, 0x14,
232 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d,
233 0x1e, 0x1f,
234 ' ', '!', '"', '#', '$', '%', '&', 0x27, '(', ')',
235 '*', '+', ',', '-', '.', '/',
236 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
237 ':', ';', '<', '=', '>', '?',
238 '@', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
239 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
240 't', 'u', 'v', 'w', 'x', 'y', 'z', '[', '\\', ']', '^',
241 '_',
242 '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
243 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
244 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~',
245 0x7f,
246 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
247 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
248 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
249 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
250 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9,
251 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
252 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9,
253 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
254 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9,
255 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
256 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9,
257 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
258 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,
259 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
260 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9,
261 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
262 };
263
264 const unsigned char ToUpperTab[] =
265 {
266 0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa,
267 0xb, 0xc, 0xd, 0xe, 0xf, 0x10, 0x11, 0x12, 0x13, 0x14,
268 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d,
269 0x1e, 0x1f,
270 ' ', '!', '"', '#', '$', '%', '&', 0x27, '(', ')',
271 '*', '+', ',', '-', '.', '/',
272 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
273 ':', ';', '<', '=', '>', '?',
274 '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
275 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
276 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^',
277 0x5f,
278 '`', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
279 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
280 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '{', '|', '}', '~',
281 0x7f,
282 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
283 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
284 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
285 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
286 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9,
287 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
288 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9,
289 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
290 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9,
291 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
292 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9,
293 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
294 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,
295 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
296 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9,
297 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
298 };
299
300 /*
301 * CharAttrs table
302 *
303 * NOTE: RFC 1459 says: anything but a ^G, comma, or space is allowed
304 * for channel names
305 */
306 const unsigned int CharAttrs[] =
307 {
308 /* 0 */ CNTRL_C,
309 /* 1 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
310 /* 2 */ CNTRL_C|CHAN_C|NONEOS_C,
311 /* 3 */ CNTRL_C|CHAN_C|NONEOS_C,
312 /* 4 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
313 /* 5 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
314 /* 6 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
315 /* 7 BEL */ CNTRL_C|NONEOS_C,
316 /* 8 \b */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
317 /* 9 \t */ CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C,
318 /* 10 \n */ CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C|EOL_C,
319 /* 11 \v */ CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C,
320 /* 12 \f */ CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C,
321 /* 13 \r */ CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C|EOL_C,
322 /* 14 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
323 /* 15 */ CNTRL_C|CHAN_C|NONEOS_C,
324 /* 16 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
325 /* 17 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
326 /* 18 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
327 /* 19 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
328 /* 20 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
329 /* 21 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
330 /* 22 */ CNTRL_C|CHAN_C|NONEOS_C,
331 /* 23 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
332 /* 24 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
333 /* 25 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
334 /* 26 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
335 /* 27 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
336 /* 28 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
337 /* 29 */ CNTRL_C|CHAN_C|NONEOS_C,
338 /* 30 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
339 /* 31 */ CNTRL_C|CHAN_C|NONEOS_C,
340 /* SP */ PRINT_C|SPACE_C,
341 /* ! */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
342 /* " */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
343 /* # */ PRINT_C|CHANPFX_C|CHAN_C|VCHAN_C|NONEOS_C,
344 /* $ */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
345 /* % */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
346 /* & */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
347 /* ' */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
348 /* ( */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
349 /* ) */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
350 /* * */ PRINT_C|KWILD_C|MWILD_C|CHAN_C|VCHAN_C|NONEOS_C|SERV_C,
351 /* + */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
352 /* , */ PRINT_C|NONEOS_C,
353 /* - */ PRINT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
354 /* . */ PRINT_C|KWILD_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C|SERV_C,
355 /* / */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
356 /* 0 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
357 /* 1 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
358 /* 2 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
359 /* 3 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
360 /* 4 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
361 /* 5 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
362 /* 6 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
363 /* 7 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
364 /* 8 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
365 /* 9 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
366 /* : */ PRINT_C|KWILD_C|CHAN_C|VCHAN_C|NONEOS_C|HOST_C,
367 /* ; */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
368 /* < */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
369 /* = */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
370 /* > */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
371 /* ? */ PRINT_C|KWILD_C|MWILD_C|CHAN_C|VCHAN_C|NONEOS_C,
372 /* @ */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
373 /* A */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
374 /* B */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
375 /* C */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
376 /* D */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
377 /* E */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
378 /* F */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
379 /* G */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
380 /* H */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
381 /* I */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
382 /* J */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
383 /* K */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
384 /* L */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
385 /* M */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
386 /* N */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
387 /* O */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
388 /* P */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
389 /* Q */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
390 /* R */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
391 /* S */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
392 /* T */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
393 /* U */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
394 /* V */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
395 /* W */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
396 /* X */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
397 /* Y */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
398 /* Z */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
399 /* [ */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
400 /* \ */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
401 /* ] */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
402 /* ^ */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
403 /* _ */ PRINT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C,
404 /* ` */ PRINT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
405 /* a */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
406 /* b */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
407 /* c */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
408 /* d */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
409 /* e */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
410 /* f */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
411 /* g */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
412 /* h */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
413 /* i */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
414 /* j */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
415 /* k */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
416 /* l */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
417 /* m */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
418 /* n */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
419 /* o */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
420 /* p */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
421 /* q */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
422 /* r */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
423 /* s */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
424 /* t */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
425 /* u */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
426 /* v */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
427 /* w */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
428 /* x */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
429 /* y */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
430 /* z */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|USER2_C|HOST_C,
431 /* { */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
432 /* | */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
433 /* } */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
434 /* ~ */ PRINT_C|ALPHA_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
435 /* del */ CHAN_C|VCHAN_C|NONEOS_C,
436 /* 0x80 */ CHAN_C|VCHAN_C|NONEOS_C,
437 /* 0x81 */ CHAN_C|VCHAN_C|NONEOS_C,
438 /* 0x82 */ CHAN_C|VCHAN_C|NONEOS_C,
439 /* 0x83 */ CHAN_C|VCHAN_C|NONEOS_C,
440 /* 0x84 */ CHAN_C|VCHAN_C|NONEOS_C,
441 /* 0x85 */ CHAN_C|VCHAN_C|NONEOS_C,
442 /* 0x86 */ CHAN_C|VCHAN_C|NONEOS_C,
443 /* 0x87 */ CHAN_C|VCHAN_C|NONEOS_C,
444 /* 0x88 */ CHAN_C|VCHAN_C|NONEOS_C,
445 /* 0x89 */ CHAN_C|VCHAN_C|NONEOS_C,
446 /* 0x8A */ CHAN_C|VCHAN_C|NONEOS_C,
447 /* 0x8B */ CHAN_C|VCHAN_C|NONEOS_C,
448 /* 0x8C */ CHAN_C|VCHAN_C|NONEOS_C,
449 /* 0x8D */ CHAN_C|VCHAN_C|NONEOS_C,
450 /* 0x8E */ CHAN_C|VCHAN_C|NONEOS_C,
451 /* 0x8F */ CHAN_C|VCHAN_C|NONEOS_C,
452 /* 0x90 */ CHAN_C|VCHAN_C|NONEOS_C,
453 /* 0x91 */ CHAN_C|VCHAN_C|NONEOS_C,
454 /* 0x92 */ CHAN_C|VCHAN_C|NONEOS_C,
455 /* 0x93 */ CHAN_C|VCHAN_C|NONEOS_C,
456 /* 0x94 */ CHAN_C|VCHAN_C|NONEOS_C,
457 /* 0x95 */ CHAN_C|VCHAN_C|NONEOS_C,
458 /* 0x96 */ CHAN_C|VCHAN_C|NONEOS_C,
459 /* 0x97 */ CHAN_C|VCHAN_C|NONEOS_C,
460 /* 0x98 */ CHAN_C|VCHAN_C|NONEOS_C,
461 /* 0x99 */ CHAN_C|VCHAN_C|NONEOS_C,
462 /* 0x9A */ CHAN_C|VCHAN_C|NONEOS_C,
463 /* 0x9B */ CHAN_C|VCHAN_C|NONEOS_C,
464 /* 0x9C */ CHAN_C|VCHAN_C|NONEOS_C,
465 /* 0x9D */ CHAN_C|VCHAN_C|NONEOS_C,
466 /* 0x9E */ CHAN_C|VCHAN_C|NONEOS_C,
467 /* 0x9F */ CHAN_C|VCHAN_C|NONEOS_C,
468 /* 0xA0 */ CHAN_C|NONEOS_C,
469 /* 0xA1 */ CHAN_C|VCHAN_C|NONEOS_C,
470 /* 0xA2 */ CHAN_C|VCHAN_C|NONEOS_C,
471 /* 0xA3 */ CHAN_C|VCHAN_C|NONEOS_C,
472 /* 0xA4 */ CHAN_C|VCHAN_C|NONEOS_C,
473 /* 0xA5 */ CHAN_C|VCHAN_C|NONEOS_C,
474 /* 0xA6 */ CHAN_C|VCHAN_C|NONEOS_C,
475 /* 0xA7 */ CHAN_C|VCHAN_C|NONEOS_C,
476 /* 0xA8 */ CHAN_C|VCHAN_C|NONEOS_C,
477 /* 0xA9 */ CHAN_C|VCHAN_C|NONEOS_C,
478 /* 0xAA */ CHAN_C|VCHAN_C|NONEOS_C,
479 /* 0xAB */ CHAN_C|VCHAN_C|NONEOS_C,
480 /* 0xAC */ CHAN_C|VCHAN_C|NONEOS_C,
481 /* 0xAD */ CHAN_C|VCHAN_C|NONEOS_C,
482 /* 0xAE */ CHAN_C|VCHAN_C|NONEOS_C,
483 /* 0xAF */ CHAN_C|VCHAN_C|NONEOS_C,
484 /* 0xB0 */ CHAN_C|VCHAN_C|NONEOS_C,
485 /* 0xB1 */ CHAN_C|VCHAN_C|NONEOS_C,
486 /* 0xB2 */ CHAN_C|VCHAN_C|NONEOS_C,
487 /* 0xB3 */ CHAN_C|VCHAN_C|NONEOS_C,
488 /* 0xB4 */ CHAN_C|VCHAN_C|NONEOS_C,
489 /* 0xB5 */ CHAN_C|VCHAN_C|NONEOS_C,
490 /* 0xB6 */ CHAN_C|VCHAN_C|NONEOS_C,
491 /* 0xB7 */ CHAN_C|VCHAN_C|NONEOS_C,
492 /* 0xB8 */ CHAN_C|VCHAN_C|NONEOS_C,
493 /* 0xB9 */ CHAN_C|VCHAN_C|NONEOS_C,
494 /* 0xBA */ CHAN_C|VCHAN_C|NONEOS_C,
495 /* 0xBB */ CHAN_C|VCHAN_C|NONEOS_C,
496 /* 0xBC */ CHAN_C|VCHAN_C|NONEOS_C,
497 /* 0xBD */ CHAN_C|VCHAN_C|NONEOS_C,
498 /* 0xBE */ CHAN_C|VCHAN_C|NONEOS_C,
499 /* 0xBF */ CHAN_C|VCHAN_C|NONEOS_C,
500 /* 0xC0 */ CHAN_C|VCHAN_C|NONEOS_C,
501 /* 0xC1 */ CHAN_C|VCHAN_C|NONEOS_C,
502 /* 0xC2 */ CHAN_C|VCHAN_C|NONEOS_C,
503 /* 0xC3 */ CHAN_C|VCHAN_C|NONEOS_C,
504 /* 0xC4 */ CHAN_C|VCHAN_C|NONEOS_C,
505 /* 0xC5 */ CHAN_C|VCHAN_C|NONEOS_C,
506 /* 0xC6 */ CHAN_C|VCHAN_C|NONEOS_C,
507 /* 0xC7 */ CHAN_C|VCHAN_C|NONEOS_C,
508 /* 0xC8 */ CHAN_C|VCHAN_C|NONEOS_C,
509 /* 0xC9 */ CHAN_C|VCHAN_C|NONEOS_C,
510 /* 0xCA */ CHAN_C|VCHAN_C|NONEOS_C,
511 /* 0xCB */ CHAN_C|VCHAN_C|NONEOS_C,
512 /* 0xCC */ CHAN_C|VCHAN_C|NONEOS_C,
513 /* 0xCD */ CHAN_C|VCHAN_C|NONEOS_C,
514 /* 0xCE */ CHAN_C|VCHAN_C|NONEOS_C,
515 /* 0xCF */ CHAN_C|VCHAN_C|NONEOS_C,
516 /* 0xD0 */ CHAN_C|VCHAN_C|NONEOS_C,
517 /* 0xD1 */ CHAN_C|VCHAN_C|NONEOS_C,
518 /* 0xD2 */ CHAN_C|VCHAN_C|NONEOS_C,
519 /* 0xD3 */ CHAN_C|VCHAN_C|NONEOS_C,
520 /* 0xD4 */ CHAN_C|VCHAN_C|NONEOS_C,
521 /* 0xD5 */ CHAN_C|VCHAN_C|NONEOS_C,
522 /* 0xD6 */ CHAN_C|VCHAN_C|NONEOS_C,
523 /* 0xD7 */ CHAN_C|VCHAN_C|NONEOS_C,
524 /* 0xD8 */ CHAN_C|VCHAN_C|NONEOS_C,
525 /* 0xD9 */ CHAN_C|VCHAN_C|NONEOS_C,
526 /* 0xDA */ CHAN_C|VCHAN_C|NONEOS_C,
527 /* 0xDB */ CHAN_C|VCHAN_C|NONEOS_C,
528 /* 0xDC */ CHAN_C|VCHAN_C|NONEOS_C,
529 /* 0xDD */ CHAN_C|VCHAN_C|NONEOS_C,
530 /* 0xDE */ CHAN_C|VCHAN_C|NONEOS_C,
531 /* 0xDF */ CHAN_C|VCHAN_C|NONEOS_C,
532 /* 0xE0 */ CHAN_C|VCHAN_C|NONEOS_C,
533 /* 0xE1 */ CHAN_C|VCHAN_C|NONEOS_C,
534 /* 0xE2 */ CHAN_C|VCHAN_C|NONEOS_C,
535 /* 0xE3 */ CHAN_C|VCHAN_C|NONEOS_C,
536 /* 0xE4 */ CHAN_C|VCHAN_C|NONEOS_C,
537 /* 0xE5 */ CHAN_C|VCHAN_C|NONEOS_C,
538 /* 0xE6 */ CHAN_C|VCHAN_C|NONEOS_C,
539 /* 0xE7 */ CHAN_C|VCHAN_C|NONEOS_C,
540 /* 0xE8 */ CHAN_C|VCHAN_C|NONEOS_C,
541 /* 0xE9 */ CHAN_C|VCHAN_C|NONEOS_C,
542 /* 0xEA */ CHAN_C|VCHAN_C|NONEOS_C,
543 /* 0xEB */ CHAN_C|VCHAN_C|NONEOS_C,
544 /* 0xEC */ CHAN_C|VCHAN_C|NONEOS_C,
545 /* 0xED */ CHAN_C|VCHAN_C|NONEOS_C,
546 /* 0xEE */ CHAN_C|VCHAN_C|NONEOS_C,
547 /* 0xEF */ CHAN_C|VCHAN_C|NONEOS_C,
548 /* 0xF0 */ CHAN_C|VCHAN_C|NONEOS_C,
549 /* 0xF1 */ CHAN_C|VCHAN_C|NONEOS_C,
550 /* 0xF2 */ CHAN_C|VCHAN_C|NONEOS_C,
551 /* 0xF3 */ CHAN_C|VCHAN_C|NONEOS_C,
552 /* 0xF4 */ CHAN_C|VCHAN_C|NONEOS_C,
553 /* 0xF5 */ CHAN_C|VCHAN_C|NONEOS_C,
554 /* 0xF6 */ CHAN_C|VCHAN_C|NONEOS_C,
555 /* 0xF7 */ CHAN_C|VCHAN_C|NONEOS_C,
556 /* 0xF8 */ CHAN_C|VCHAN_C|NONEOS_C,
557 /* 0xF9 */ CHAN_C|VCHAN_C|NONEOS_C,
558 /* 0xFA */ CHAN_C|VCHAN_C|NONEOS_C,
559 /* 0xFB */ CHAN_C|VCHAN_C|NONEOS_C,
560 /* 0xFC */ CHAN_C|VCHAN_C|NONEOS_C,
561 /* 0xFD */ CHAN_C|VCHAN_C|NONEOS_C,
562 /* 0xFE */ CHAN_C|VCHAN_C|NONEOS_C,
563 /* 0xFF */ CHAN_C|VCHAN_C|NONEOS_C
564 };

Properties

Name Value
svn:eol-style native
svn:keywords Id