ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid-7.2/src/match.c
Revision: 632
Committed: Thu Jun 1 10:53:00 2006 UTC (17 years, 10 months ago) by michael
Content type: text/x-csrc
File size: 20147 byte(s)
Log Message:
- Added channel::disable_fake_channels which disallows creation of channels
  that have ascii 2, 3, 31 and 160 in their names.
- Minor improvements and cleanups to channel name validation routines
  backported from 7.3

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

Properties

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