ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid-8/src/match.c
Revision: 1399
Committed: Mon May 7 19:32:01 2012 UTC (11 years, 11 months ago) by michael
Content type: text/x-csrc
File size: 21485 byte(s)
Log Message:
- match(), match_esc(): remove XXX-comment. Bad idea to have
  match() rely on collapse()

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 while (ToUpper(*str1) == ToUpper(*str2))
257 {
258 if (*str1 == '\0')
259 return 0;
260
261 ++str1;
262 ++str2;
263 }
264
265 return 1;
266 }
267
268 int
269 ircncmp(const char *s1, const char *s2, size_t n)
270 {
271 const unsigned char *str1 = (const unsigned char *)s1;
272 const unsigned char *str2 = (const unsigned char *)s2;
273
274 assert(s1 != NULL);
275 assert(s2 != NULL);
276
277 if (n == 0)
278 return 0;
279
280 while (ToUpper(*str1) == ToUpper(*str2))
281 {
282 if (*str1 == '\0')
283 return 0;
284
285 ++str1;
286 ++str2;
287 }
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|VCHAN_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|CHANPFX_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