ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/branches/8.0.x/src/match.c
Revision: 1593
Committed: Sat Oct 27 21:09:19 2012 UTC (13 years, 11 months ago) by michael
Content type: text/x-csrc
File size: 21462 byte(s)
Log Message:
- Create 8.0.x branch

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 1;
69 if (!ma)
70 return 0;
71 for (m--; (m > (const unsigned char *)mask) && (*m == '?'); m--)
72 ;
73 if (*m == '*')
74 return 1;
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 0;
89 m = ma;
90 n = ++na;
91 }
92 else
93 m++, n++;
94 }
95
96 return 0;
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 1;
129 if (!ma)
130 return 0;
131 for (m--; (m > (const unsigned char *)mask) && (*m == '?'); m--)
132 ;
133 if (*m == '*')
134 return 1;
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 0;
150 if (ToLower(*m) != ToLower(*n))
151 {
152 if (!ma)
153 return 0;
154 m = ma;
155 n = ++na;
156 }
157 else
158 m++, n++;
159 }
160 else
161 m++, n++;
162 }
163
164 return 0;
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);
183 }
184
185 /* collapse()
186 *
187 * collapses a string containing multiple *'s.
188 */
189 char *
190 collapse(char *pattern)
191 {
192 char *p = pattern, *po = pattern;
193 char c;
194
195 if (p == NULL)
196 return NULL;
197
198 while ((c = *p++))
199 {
200 if (c != '*')
201 *po++ = c;
202 else if (*p != '*')
203 *po++ = '*';
204 }
205
206 *po = 0;
207
208 return pattern;
209 }
210
211 /* collapse_esc()
212 *
213 * The collapse() function with support for escaping characters
214 */
215 char *
216 collapse_esc(char *pattern)
217 {
218 char *p = pattern, *po = pattern;
219 char c;
220
221 if (p == NULL)
222 return NULL;
223
224 while ((c = *p++))
225 {
226 if (c != '*')
227 {
228 *po++ = c;
229 if (c == '\\' && *p)
230 *po++ = *p++;
231 }
232 else if (*p != '*')
233 *po++ = '*';
234 }
235
236 *po = 0;
237
238 return pattern;
239 }
240
241 /*
242 * irccmp - case insensitive comparison of two 0 terminated strings.
243 *
244 * returns 0, if s1 equal to s2
245 * 1, if not
246 */
247 int
248 irccmp(const char *s1, const char *s2)
249 {
250 const unsigned char *str1 = (const unsigned char *)s1;
251 const unsigned char *str2 = (const unsigned char *)s2;
252
253 assert(s1 != NULL);
254 assert(s2 != NULL);
255
256 for (; ToUpper(*str1) == ToUpper(*str2); ++str1, ++str2)
257 if (*str1 == '\0')
258 return 0;
259
260 return 1;
261 }
262
263 int
264 ircncmp(const char *s1, const char *s2, size_t n)
265 {
266 const unsigned char *str1 = (const unsigned char *)s1;
267 const unsigned char *str2 = (const unsigned char *)s2;
268
269 assert(s1 != NULL);
270 assert(s2 != NULL);
271 assert(n > 0);
272
273 if (n == 0)
274 return 0;
275
276 for (; ToUpper(*str1) == ToUpper(*str2); ++str1, ++str2)
277 if (--n == 0 || *str1 == '\0')
278 return 0;
279
280 return 1;
281 }
282
283 const unsigned char ToLowerTab[] = {
284 0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa,
285 0xb, 0xc, 0xd, 0xe, 0xf, 0x10, 0x11, 0x12, 0x13, 0x14,
286 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d,
287 0x1e, 0x1f,
288 ' ', '!', '"', '#', '$', '%', '&', 0x27, '(', ')',
289 '*', '+', ',', '-', '.', '/',
290 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
291 ':', ';', '<', '=', '>', '?',
292 '@', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
293 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
294 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~',
295 '_',
296 '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
297 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
298 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~',
299 0x7f,
300 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
301 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
302 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
303 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
304 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9,
305 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
306 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9,
307 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
308 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9,
309 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
310 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9,
311 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
312 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,
313 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
314 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9,
315 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
316 };
317
318 const unsigned char ToUpperTab[] = {
319 0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa,
320 0xb, 0xc, 0xd, 0xe, 0xf, 0x10, 0x11, 0x12, 0x13, 0x14,
321 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d,
322 0x1e, 0x1f,
323 ' ', '!', '"', '#', '$', '%', '&', 0x27, '(', ')',
324 '*', '+', ',', '-', '.', '/',
325 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
326 ':', ';', '<', '=', '>', '?',
327 '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
328 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
329 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^',
330 0x5f,
331 '`', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
332 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
333 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^',
334 0x7f,
335 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
336 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
337 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
338 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
339 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9,
340 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
341 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9,
342 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
343 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9,
344 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
345 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9,
346 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
347 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,
348 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
349 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9,
350 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
351 };
352
353 /*
354 * CharAttrs table
355 *
356 * NOTE: RFC 1459 sez: anything but a ^G, comma, or space is allowed
357 * for channel names
358 */
359 const unsigned int CharAttrs[] = {
360 /* 0 */ CNTRL_C,
361 /* 1 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
362 /* 2 */ CNTRL_C|CHAN_C|NONEOS_C,
363 /* 3 */ CNTRL_C|CHAN_C|NONEOS_C,
364 /* 4 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
365 /* 5 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
366 /* 6 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
367 /* 7 BEL */ CNTRL_C|NONEOS_C,
368 /* 8 \b */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
369 /* 9 \t */ CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C,
370 /* 10 \n */ CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C|EOL_C,
371 /* 11 \v */ CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C,
372 /* 12 \f */ CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C,
373 /* 13 \r */ CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C|EOL_C,
374 /* 14 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
375 /* 15 */ CNTRL_C|CHAN_C|NONEOS_C,
376 /* 16 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
377 /* 17 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
378 /* 18 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
379 /* 19 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
380 /* 20 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
381 /* 21 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
382 /* 22 */ CNTRL_C|CHAN_C|NONEOS_C,
383 /* 23 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
384 /* 24 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
385 /* 25 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
386 /* 26 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
387 /* 27 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
388 /* 28 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
389 /* 29 */ CNTRL_C|CHAN_C|NONEOS_C,
390 /* 30 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
391 /* 31 */ CNTRL_C|CHAN_C|NONEOS_C,
392 /* SP */ PRINT_C|SPACE_C,
393 /* ! */ PRINT_C|KWILD_C|CHAN_C|VCHAN_C|NONEOS_C,
394 /* " */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
395 /* # */ PRINT_C|KWILD_C|MWILD_C|CHANPFX_C|CHAN_C|VCHAN_C|NONEOS_C,
396 /* $ */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
397 /* % */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
398 /* & */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
399 /* ' */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
400 /* ( */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
401 /* ) */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
402 /* * */ PRINT_C|KWILD_C|MWILD_C|CHAN_C|VCHAN_C|NONEOS_C|SERV_C,
403 /* + */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
404 /* , */ PRINT_C|NONEOS_C,
405 /* - */ PRINT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
406 /* . */ PRINT_C|KWILD_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C|SERV_C,
407 /* / */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
408 /* 0 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
409 /* 1 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
410 /* 2 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
411 /* 3 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
412 /* 4 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
413 /* 5 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
414 /* 6 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
415 /* 7 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
416 /* 8 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
417 /* 9 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
418 /* : */ PRINT_C|KWILD_C|CHAN_C|VCHAN_C|NONEOS_C|HOST_C,
419 /* ; */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
420 /* < */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
421 /* = */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
422 /* > */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
423 /* ? */ PRINT_C|KWILD_C|MWILD_C|CHAN_C|VCHAN_C|NONEOS_C,
424 /* @ */ PRINT_C|KWILD_C|CHAN_C|VCHAN_C|NONEOS_C,
425 /* A */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
426 /* B */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
427 /* C */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
428 /* D */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
429 /* E */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
430 /* F */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
431 /* G */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
432 /* H */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
433 /* I */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
434 /* J */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
435 /* K */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
436 /* L */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
437 /* M */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
438 /* N */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
439 /* O */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
440 /* P */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
441 /* Q */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
442 /* R */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
443 /* S */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
444 /* T */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
445 /* U */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
446 /* V */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
447 /* W */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
448 /* X */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
449 /* Y */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
450 /* Z */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
451 /* [ */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
452 /* \ */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
453 /* ] */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
454 /* ^ */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
455 /* _ */ PRINT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
456 /* ` */ PRINT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
457 /* a */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
458 /* b */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
459 /* c */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
460 /* d */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
461 /* e */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
462 /* f */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
463 /* g */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
464 /* h */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
465 /* i */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
466 /* j */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
467 /* k */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
468 /* l */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
469 /* m */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
470 /* n */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
471 /* o */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
472 /* p */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
473 /* q */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
474 /* r */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
475 /* s */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
476 /* t */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
477 /* u */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
478 /* v */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
479 /* w */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
480 /* x */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
481 /* y */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
482 /* z */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
483 /* { */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
484 /* | */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
485 /* } */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
486 /* ~ */ PRINT_C|ALPHA_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
487 /* del */ CHAN_C|VCHAN_C|NONEOS_C,
488 /* 0x80 */ CHAN_C|VCHAN_C|NONEOS_C,
489 /* 0x81 */ CHAN_C|VCHAN_C|NONEOS_C,
490 /* 0x82 */ CHAN_C|VCHAN_C|NONEOS_C,
491 /* 0x83 */ CHAN_C|VCHAN_C|NONEOS_C,
492 /* 0x84 */ CHAN_C|VCHAN_C|NONEOS_C,
493 /* 0x85 */ CHAN_C|VCHAN_C|NONEOS_C,
494 /* 0x86 */ CHAN_C|VCHAN_C|NONEOS_C,
495 /* 0x87 */ CHAN_C|VCHAN_C|NONEOS_C,
496 /* 0x88 */ CHAN_C|VCHAN_C|NONEOS_C,
497 /* 0x89 */ CHAN_C|VCHAN_C|NONEOS_C,
498 /* 0x8A */ CHAN_C|VCHAN_C|NONEOS_C,
499 /* 0x8B */ CHAN_C|VCHAN_C|NONEOS_C,
500 /* 0x8C */ CHAN_C|VCHAN_C|NONEOS_C,
501 /* 0x8D */ CHAN_C|VCHAN_C|NONEOS_C,
502 /* 0x8E */ CHAN_C|VCHAN_C|NONEOS_C,
503 /* 0x8F */ CHAN_C|VCHAN_C|NONEOS_C,
504 /* 0x90 */ CHAN_C|VCHAN_C|NONEOS_C,
505 /* 0x91 */ CHAN_C|VCHAN_C|NONEOS_C,
506 /* 0x92 */ CHAN_C|VCHAN_C|NONEOS_C,
507 /* 0x93 */ CHAN_C|VCHAN_C|NONEOS_C,
508 /* 0x94 */ CHAN_C|VCHAN_C|NONEOS_C,
509 /* 0x95 */ CHAN_C|VCHAN_C|NONEOS_C,
510 /* 0x96 */ CHAN_C|VCHAN_C|NONEOS_C,
511 /* 0x97 */ CHAN_C|VCHAN_C|NONEOS_C,
512 /* 0x98 */ CHAN_C|VCHAN_C|NONEOS_C,
513 /* 0x99 */ CHAN_C|VCHAN_C|NONEOS_C,
514 /* 0x9A */ CHAN_C|VCHAN_C|NONEOS_C,
515 /* 0x9B */ CHAN_C|VCHAN_C|NONEOS_C,
516 /* 0x9C */ CHAN_C|VCHAN_C|NONEOS_C,
517 /* 0x9D */ CHAN_C|VCHAN_C|NONEOS_C,
518 /* 0x9E */ CHAN_C|VCHAN_C|NONEOS_C,
519 /* 0x9F */ CHAN_C|VCHAN_C|NONEOS_C,
520 /* 0xA0 */ CHAN_C|NONEOS_C,
521 /* 0xA1 */ CHAN_C|VCHAN_C|NONEOS_C,
522 /* 0xA2 */ CHAN_C|VCHAN_C|NONEOS_C,
523 /* 0xA3 */ CHAN_C|VCHAN_C|NONEOS_C,
524 /* 0xA4 */ CHAN_C|VCHAN_C|NONEOS_C,
525 /* 0xA5 */ CHAN_C|VCHAN_C|NONEOS_C,
526 /* 0xA6 */ CHAN_C|VCHAN_C|NONEOS_C,
527 /* 0xA7 */ CHAN_C|VCHAN_C|NONEOS_C,
528 /* 0xA8 */ CHAN_C|VCHAN_C|NONEOS_C,
529 /* 0xA9 */ CHAN_C|VCHAN_C|NONEOS_C,
530 /* 0xAA */ CHAN_C|VCHAN_C|NONEOS_C,
531 /* 0xAB */ CHAN_C|VCHAN_C|NONEOS_C,
532 /* 0xAC */ CHAN_C|VCHAN_C|NONEOS_C,
533 /* 0xAD */ CHAN_C|VCHAN_C|NONEOS_C,
534 /* 0xAE */ CHAN_C|VCHAN_C|NONEOS_C,
535 /* 0xAF */ CHAN_C|VCHAN_C|NONEOS_C,
536 /* 0xB0 */ CHAN_C|VCHAN_C|NONEOS_C,
537 /* 0xB1 */ CHAN_C|VCHAN_C|NONEOS_C,
538 /* 0xB2 */ CHAN_C|VCHAN_C|NONEOS_C,
539 /* 0xB3 */ CHAN_C|VCHAN_C|NONEOS_C,
540 /* 0xB4 */ CHAN_C|VCHAN_C|NONEOS_C,
541 /* 0xB5 */ CHAN_C|VCHAN_C|NONEOS_C,
542 /* 0xB6 */ CHAN_C|VCHAN_C|NONEOS_C,
543 /* 0xB7 */ CHAN_C|VCHAN_C|NONEOS_C,
544 /* 0xB8 */ CHAN_C|VCHAN_C|NONEOS_C,
545 /* 0xB9 */ CHAN_C|VCHAN_C|NONEOS_C,
546 /* 0xBA */ CHAN_C|VCHAN_C|NONEOS_C,
547 /* 0xBB */ CHAN_C|VCHAN_C|NONEOS_C,
548 /* 0xBC */ CHAN_C|VCHAN_C|NONEOS_C,
549 /* 0xBD */ CHAN_C|VCHAN_C|NONEOS_C,
550 /* 0xBE */ CHAN_C|VCHAN_C|NONEOS_C,
551 /* 0xBF */ CHAN_C|VCHAN_C|NONEOS_C,
552 /* 0xC0 */ CHAN_C|VCHAN_C|NONEOS_C,
553 /* 0xC1 */ CHAN_C|VCHAN_C|NONEOS_C,
554 /* 0xC2 */ CHAN_C|VCHAN_C|NONEOS_C,
555 /* 0xC3 */ CHAN_C|VCHAN_C|NONEOS_C,
556 /* 0xC4 */ CHAN_C|VCHAN_C|NONEOS_C,
557 /* 0xC5 */ CHAN_C|VCHAN_C|NONEOS_C,
558 /* 0xC6 */ CHAN_C|VCHAN_C|NONEOS_C,
559 /* 0xC7 */ CHAN_C|VCHAN_C|NONEOS_C,
560 /* 0xC8 */ CHAN_C|VCHAN_C|NONEOS_C,
561 /* 0xC9 */ CHAN_C|VCHAN_C|NONEOS_C,
562 /* 0xCA */ CHAN_C|VCHAN_C|NONEOS_C,
563 /* 0xCB */ CHAN_C|VCHAN_C|NONEOS_C,
564 /* 0xCC */ CHAN_C|VCHAN_C|NONEOS_C,
565 /* 0xCD */ CHAN_C|VCHAN_C|NONEOS_C,
566 /* 0xCE */ CHAN_C|VCHAN_C|NONEOS_C,
567 /* 0xCF */ CHAN_C|VCHAN_C|NONEOS_C,
568 /* 0xD0 */ CHAN_C|VCHAN_C|NONEOS_C,
569 /* 0xD1 */ CHAN_C|VCHAN_C|NONEOS_C,
570 /* 0xD2 */ CHAN_C|VCHAN_C|NONEOS_C,
571 /* 0xD3 */ CHAN_C|VCHAN_C|NONEOS_C,
572 /* 0xD4 */ CHAN_C|VCHAN_C|NONEOS_C,
573 /* 0xD5 */ CHAN_C|VCHAN_C|NONEOS_C,
574 /* 0xD6 */ CHAN_C|VCHAN_C|NONEOS_C,
575 /* 0xD7 */ CHAN_C|VCHAN_C|NONEOS_C,
576 /* 0xD8 */ CHAN_C|VCHAN_C|NONEOS_C,
577 /* 0xD9 */ CHAN_C|VCHAN_C|NONEOS_C,
578 /* 0xDA */ CHAN_C|VCHAN_C|NONEOS_C,
579 /* 0xDB */ CHAN_C|VCHAN_C|NONEOS_C,
580 /* 0xDC */ CHAN_C|VCHAN_C|NONEOS_C,
581 /* 0xDD */ CHAN_C|VCHAN_C|NONEOS_C,
582 /* 0xDE */ CHAN_C|VCHAN_C|NONEOS_C,
583 /* 0xDF */ CHAN_C|VCHAN_C|NONEOS_C,
584 /* 0xE0 */ CHAN_C|VCHAN_C|NONEOS_C,
585 /* 0xE1 */ CHAN_C|VCHAN_C|NONEOS_C,
586 /* 0xE2 */ CHAN_C|VCHAN_C|NONEOS_C,
587 /* 0xE3 */ CHAN_C|VCHAN_C|NONEOS_C,
588 /* 0xE4 */ CHAN_C|VCHAN_C|NONEOS_C,
589 /* 0xE5 */ CHAN_C|VCHAN_C|NONEOS_C,
590 /* 0xE6 */ CHAN_C|VCHAN_C|NONEOS_C,
591 /* 0xE7 */ CHAN_C|VCHAN_C|NONEOS_C,
592 /* 0xE8 */ CHAN_C|VCHAN_C|NONEOS_C,
593 /* 0xE9 */ CHAN_C|VCHAN_C|NONEOS_C,
594 /* 0xEA */ CHAN_C|VCHAN_C|NONEOS_C,
595 /* 0xEB */ CHAN_C|VCHAN_C|NONEOS_C,
596 /* 0xEC */ CHAN_C|VCHAN_C|NONEOS_C,
597 /* 0xED */ CHAN_C|VCHAN_C|NONEOS_C,
598 /* 0xEE */ CHAN_C|VCHAN_C|NONEOS_C,
599 /* 0xEF */ CHAN_C|VCHAN_C|NONEOS_C,
600 /* 0xF0 */ CHAN_C|VCHAN_C|NONEOS_C,
601 /* 0xF1 */ CHAN_C|VCHAN_C|NONEOS_C,
602 /* 0xF2 */ CHAN_C|VCHAN_C|NONEOS_C,
603 /* 0xF3 */ CHAN_C|VCHAN_C|NONEOS_C,
604 /* 0xF4 */ CHAN_C|VCHAN_C|NONEOS_C,
605 /* 0xF5 */ CHAN_C|VCHAN_C|NONEOS_C,
606 /* 0xF6 */ CHAN_C|VCHAN_C|NONEOS_C,
607 /* 0xF7 */ CHAN_C|VCHAN_C|NONEOS_C,
608 /* 0xF8 */ CHAN_C|VCHAN_C|NONEOS_C,
609 /* 0xF9 */ CHAN_C|VCHAN_C|NONEOS_C,
610 /* 0xFA */ CHAN_C|VCHAN_C|NONEOS_C,
611 /* 0xFB */ CHAN_C|VCHAN_C|NONEOS_C,
612 /* 0xFC */ CHAN_C|VCHAN_C|NONEOS_C,
613 /* 0xFD */ CHAN_C|VCHAN_C|NONEOS_C,
614 /* 0xFE */ CHAN_C|VCHAN_C|NONEOS_C,
615 /* 0xFF */ CHAN_C|VCHAN_C|NONEOS_C
616 };

Properties

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