ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid-7.2/src/match.c
Revision: 371
Committed: Tue Jan 10 10:45:48 2006 UTC (18 years, 2 months ago) by michael
Content type: text/x-csrc
File size: 20065 byte(s)
Log Message:
- Imported recent channelban changes from HEAD which have been tested extensively.
  The match_cidr() fix didn't work in the first try, so I'm not going to bother
  with further debugging.
- Removed match_cidr() and comp_with_mask()

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

Properties

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