ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/trunk/src/match.c
Revision: 1652
Committed: Tue Nov 13 20:28:53 2012 UTC (12 years, 9 months ago) by michael
Content type: text/x-csrc
File size: 22173 byte(s)
Log Message:
- changed match() polarity. match() now returns 0 on match and 1 on non-match
  This cleans up several places where function pointers of different matching
  functions like irccmp/strcmp/match are passed to other functions.
- added improved collapse() to match.c

File Contents

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

Properties

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