ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid-8/src/match.c
Revision: 371
Committed: Tue Jan 10 10:45:48 2006 UTC (18 years, 3 months ago) by michael
Content type: text/x-csrc
Original Path: ircd-hybrid-7.2/src/match.c
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

# User Rev Content
1 adx 30 /************************************************************************
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 knight 31 * $Id$
20 adx 30 *
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