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

Properties

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