ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/branches/8.2.x/src/match.c
Revision: 1298
Committed: Tue Feb 28 18:51:13 2012 UTC (14 years, 4 months ago) by michael
Content type: text/x-csrc
Original Path: ircd-hybrid-8/src/match.c
File size: 22035 byte(s)
Log Message:
- fixed style in some places

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 "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 michael 1298 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 adx 30
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 michael 1298 for (m--; (m > (const unsigned char *)mask) && (*m == '?'); m--)
76 adx 30 ;
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 michael 1298 return *m == 0;
91 adx 30 }
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 michael 1298 const unsigned char *m = (const unsigned char *)mask;
116     const unsigned char *n = (const unsigned char *)name;
117 adx 30 const unsigned char *ma = NULL;
118 michael 1298 const unsigned char *na = (const unsigned char *)name;
119 adx 30
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 michael 1298 for (m--; (m > (const unsigned char *)mask) && (*m == '?'); m--)
144 adx 30 ;
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 michael 1298 return *m == 0;
159 adx 30 }
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 michael 484 if (*mask == '#')
192     {
193     if (*name != '#')
194     return 0;
195     ++name, ++mask;
196     }
197    
198     return match_esc(mask, name);
199 adx 30 }
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 michael 1298 const unsigned char *str1 = (const unsigned char *)s1;
267     const unsigned char *str2 = (const unsigned char *)s2;
268 adx 30
269     assert(s1 != NULL);
270     assert(s2 != NULL);
271    
272     while (ToUpper(*str1) == ToUpper(*str2))
273     {
274     if (*str1 == '\0')
275     return 0;
276 michael 1298
277     ++str1;
278     ++str2;
279 adx 30 }
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 db 633 /* 1 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
382 db 635 /* 2 */ CNTRL_C|CHAN_C|NONEOS_C,
383     /* 3 */ CNTRL_C|CHAN_C|NONEOS_C,
384 db 633 /* 4 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
385     /* 5 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
386     /* 6 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
387 adx 30 /* 7 BEL */ CNTRL_C|NONEOS_C,
388 db 633 /* 8 \b */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
389     /* 9 \t */ CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C,
390     /* 10 \n */ CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C|EOL_C,
391     /* 11 \v */ CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C,
392     /* 12 \f */ CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C,
393     /* 13 \r */ CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C|EOL_C,
394     /* 14 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
395 adx 637 /* 15 */ CNTRL_C|CHAN_C|NONEOS_C,
396 db 633 /* 16 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
397     /* 17 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
398     /* 18 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
399     /* 19 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
400     /* 20 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
401     /* 21 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
402 db 635 /* 22 */ CNTRL_C|CHAN_C|NONEOS_C,
403 db 633 /* 23 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
404     /* 24 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
405     /* 25 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
406     /* 26 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
407     /* 27 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
408     /* 28 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
409     /* 29 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
410     /* 30 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
411 db 635 /* 31 */ CNTRL_C|CHAN_C|NONEOS_C,
412 adx 30 /* SP */ PRINT_C|SPACE_C,
413 db 633 /* ! */ PRINT_C|KWILD_C|CHAN_C|VCHAN_C|NONEOS_C,
414     /* " */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
415     /* # */ PRINT_C|KWILD_C|MWILD_C|CHANPFX_C|CHAN_C|VCHAN_C|NONEOS_C,
416     /* $ */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
417     /* % */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
418     /* & */ PRINT_C|CHANPFX_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|CHAN_C|VCHAN_C|NONEOS_C,
422     /* * */ PRINT_C|KWILD_C|MWILD_C|CHAN_C|VCHAN_C|NONEOS_C|SERV_C,
423     /* + */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
424 adx 30 /* , */ PRINT_C|NONEOS_C,
425 db 633 /* - */ PRINT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
426     /* . */ PRINT_C|KWILD_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C|SERV_C,
427     /* / */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
428     /* 0 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
429     /* 1 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
430     /* 2 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
431     /* 3 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
432     /* 4 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
433     /* 5 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
434     /* 6 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
435     /* 7 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
436     /* 8 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
437     /* 9 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
438     /* : */ PRINT_C|KWILD_C|CHAN_C|VCHAN_C|NONEOS_C|HOST_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|CHAN_C|VCHAN_C|NONEOS_C,
443     /* ? */ PRINT_C|KWILD_C|MWILD_C|CHAN_C|VCHAN_C|NONEOS_C,
444     /* @ */ PRINT_C|KWILD_C|CHAN_C|VCHAN_C|NONEOS_C,
445     /* A */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
446     /* B */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
447     /* C */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
448     /* D */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
449     /* E */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
450     /* F */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
451     /* G */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
452     /* H */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
453     /* I */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
454     /* J */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
455     /* K */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
456     /* L */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
457     /* M */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
458     /* N */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
459     /* O */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
460     /* P */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
461     /* Q */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
462     /* R */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
463     /* S */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
464     /* T */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
465     /* U */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
466     /* V */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
467     /* W */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
468     /* X */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
469     /* Y */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
470     /* Z */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_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|ALPHA_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     /* ` */ PRINT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
477     /* a */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
478     /* b */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
479     /* c */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
480     /* d */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
481     /* e */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
482     /* f */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
483     /* g */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
484     /* h */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
485     /* i */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
486     /* j */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
487     /* k */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
488     /* l */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
489     /* m */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
490     /* n */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
491     /* o */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
492     /* p */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
493     /* q */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
494     /* r */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
495     /* s */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
496     /* t */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
497     /* u */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
498     /* v */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
499     /* w */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
500     /* x */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
501     /* y */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
502     /* z */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_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|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
506     /* ~ */ PRINT_C|ALPHA_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
507     /* del */ CHAN_C|VCHAN_C|NONEOS_C,
508     /* 0x80 */ CHAN_C|VCHAN_C|NONEOS_C,
509     /* 0x81 */ CHAN_C|VCHAN_C|NONEOS_C,
510     /* 0x82 */ CHAN_C|VCHAN_C|NONEOS_C,
511     /* 0x83 */ CHAN_C|VCHAN_C|NONEOS_C,
512     /* 0x84 */ CHAN_C|VCHAN_C|NONEOS_C,
513     /* 0x85 */ CHAN_C|VCHAN_C|NONEOS_C,
514     /* 0x86 */ CHAN_C|VCHAN_C|NONEOS_C,
515     /* 0x87 */ CHAN_C|VCHAN_C|NONEOS_C,
516     /* 0x88 */ CHAN_C|VCHAN_C|NONEOS_C,
517     /* 0x89 */ CHAN_C|VCHAN_C|NONEOS_C,
518     /* 0x8A */ CHAN_C|VCHAN_C|NONEOS_C,
519     /* 0x8B */ CHAN_C|VCHAN_C|NONEOS_C,
520     /* 0x8C */ CHAN_C|VCHAN_C|NONEOS_C,
521     /* 0x8D */ CHAN_C|VCHAN_C|NONEOS_C,
522     /* 0x8E */ CHAN_C|VCHAN_C|NONEOS_C,
523     /* 0x8F */ CHAN_C|VCHAN_C|NONEOS_C,
524     /* 0x90 */ CHAN_C|VCHAN_C|NONEOS_C,
525     /* 0x91 */ CHAN_C|VCHAN_C|NONEOS_C,
526     /* 0x92 */ CHAN_C|VCHAN_C|NONEOS_C,
527     /* 0x93 */ CHAN_C|VCHAN_C|NONEOS_C,
528     /* 0x94 */ CHAN_C|VCHAN_C|NONEOS_C,
529     /* 0x95 */ CHAN_C|VCHAN_C|NONEOS_C,
530     /* 0x96 */ CHAN_C|VCHAN_C|NONEOS_C,
531     /* 0x97 */ CHAN_C|VCHAN_C|NONEOS_C,
532     /* 0x98 */ CHAN_C|VCHAN_C|NONEOS_C,
533     /* 0x99 */ CHAN_C|VCHAN_C|NONEOS_C,
534     /* 0x9A */ CHAN_C|VCHAN_C|NONEOS_C,
535     /* 0x9B */ CHAN_C|VCHAN_C|NONEOS_C,
536     /* 0x9C */ CHAN_C|VCHAN_C|NONEOS_C,
537     /* 0x9D */ CHAN_C|VCHAN_C|NONEOS_C,
538     /* 0x9E */ CHAN_C|VCHAN_C|NONEOS_C,
539     /* 0x9F */ CHAN_C|VCHAN_C|NONEOS_C,
540 db 635 /* 0xA0 */ CHAN_C|NONEOS_C,
541 db 633 /* 0xA1 */ CHAN_C|VCHAN_C|NONEOS_C,
542     /* 0xA2 */ CHAN_C|VCHAN_C|NONEOS_C,
543     /* 0xA3 */ CHAN_C|VCHAN_C|NONEOS_C,
544     /* 0xA4 */ CHAN_C|VCHAN_C|NONEOS_C,
545     /* 0xA5 */ CHAN_C|VCHAN_C|NONEOS_C,
546     /* 0xA6 */ CHAN_C|VCHAN_C|NONEOS_C,
547     /* 0xA7 */ CHAN_C|VCHAN_C|NONEOS_C,
548     /* 0xA8 */ CHAN_C|VCHAN_C|NONEOS_C,
549     /* 0xA9 */ CHAN_C|VCHAN_C|NONEOS_C,
550     /* 0xAA */ CHAN_C|VCHAN_C|NONEOS_C,
551     /* 0xAB */ CHAN_C|VCHAN_C|NONEOS_C,
552     /* 0xAC */ CHAN_C|VCHAN_C|NONEOS_C,
553     /* 0xAD */ CHAN_C|VCHAN_C|NONEOS_C,
554     /* 0xAE */ CHAN_C|VCHAN_C|NONEOS_C,
555     /* 0xAF */ CHAN_C|VCHAN_C|NONEOS_C,
556     /* 0xB0 */ CHAN_C|VCHAN_C|NONEOS_C,
557     /* 0xB1 */ CHAN_C|VCHAN_C|NONEOS_C,
558     /* 0xB2 */ CHAN_C|VCHAN_C|NONEOS_C,
559     /* 0xB3 */ CHAN_C|VCHAN_C|NONEOS_C,
560     /* 0xB4 */ CHAN_C|VCHAN_C|NONEOS_C,
561     /* 0xB5 */ CHAN_C|VCHAN_C|NONEOS_C,
562     /* 0xB6 */ CHAN_C|VCHAN_C|NONEOS_C,
563     /* 0xB7 */ CHAN_C|VCHAN_C|NONEOS_C,
564     /* 0xB8 */ CHAN_C|VCHAN_C|NONEOS_C,
565     /* 0xB9 */ CHAN_C|VCHAN_C|NONEOS_C,
566     /* 0xBA */ CHAN_C|VCHAN_C|NONEOS_C,
567     /* 0xBB */ CHAN_C|VCHAN_C|NONEOS_C,
568     /* 0xBC */ CHAN_C|VCHAN_C|NONEOS_C,
569     /* 0xBD */ CHAN_C|VCHAN_C|NONEOS_C,
570     /* 0xBE */ CHAN_C|VCHAN_C|NONEOS_C,
571     /* 0xBF */ CHAN_C|VCHAN_C|NONEOS_C,
572     /* 0xC0 */ CHAN_C|VCHAN_C|NONEOS_C,
573     /* 0xC1 */ CHAN_C|VCHAN_C|NONEOS_C,
574     /* 0xC2 */ CHAN_C|VCHAN_C|NONEOS_C,
575     /* 0xC3 */ CHAN_C|VCHAN_C|NONEOS_C,
576     /* 0xC4 */ CHAN_C|VCHAN_C|NONEOS_C,
577     /* 0xC5 */ CHAN_C|VCHAN_C|NONEOS_C,
578     /* 0xC6 */ CHAN_C|VCHAN_C|NONEOS_C,
579     /* 0xC7 */ CHAN_C|VCHAN_C|NONEOS_C,
580     /* 0xC8 */ CHAN_C|VCHAN_C|NONEOS_C,
581     /* 0xC9 */ CHAN_C|VCHAN_C|NONEOS_C,
582     /* 0xCA */ CHAN_C|VCHAN_C|NONEOS_C,
583     /* 0xCB */ CHAN_C|VCHAN_C|NONEOS_C,
584     /* 0xCC */ CHAN_C|VCHAN_C|NONEOS_C,
585     /* 0xCD */ CHAN_C|VCHAN_C|NONEOS_C,
586     /* 0xCE */ CHAN_C|VCHAN_C|NONEOS_C,
587     /* 0xCF */ CHAN_C|VCHAN_C|NONEOS_C,
588     /* 0xD0 */ CHAN_C|VCHAN_C|NONEOS_C,
589     /* 0xD1 */ CHAN_C|VCHAN_C|NONEOS_C,
590     /* 0xD2 */ CHAN_C|VCHAN_C|NONEOS_C,
591     /* 0xD3 */ CHAN_C|VCHAN_C|NONEOS_C,
592     /* 0xD4 */ CHAN_C|VCHAN_C|NONEOS_C,
593     /* 0xD5 */ CHAN_C|VCHAN_C|NONEOS_C,
594     /* 0xD6 */ CHAN_C|VCHAN_C|NONEOS_C,
595     /* 0xD7 */ CHAN_C|VCHAN_C|NONEOS_C,
596     /* 0xD8 */ CHAN_C|VCHAN_C|NONEOS_C,
597     /* 0xD9 */ CHAN_C|VCHAN_C|NONEOS_C,
598     /* 0xDA */ CHAN_C|VCHAN_C|NONEOS_C,
599     /* 0xDB */ CHAN_C|VCHAN_C|NONEOS_C,
600     /* 0xDC */ CHAN_C|VCHAN_C|NONEOS_C,
601     /* 0xDD */ CHAN_C|VCHAN_C|NONEOS_C,
602     /* 0xDE */ CHAN_C|VCHAN_C|NONEOS_C,
603     /* 0xDF */ CHAN_C|VCHAN_C|NONEOS_C,
604     /* 0xE0 */ CHAN_C|VCHAN_C|NONEOS_C,
605     /* 0xE1 */ CHAN_C|VCHAN_C|NONEOS_C,
606     /* 0xE2 */ CHAN_C|VCHAN_C|NONEOS_C,
607     /* 0xE3 */ CHAN_C|VCHAN_C|NONEOS_C,
608     /* 0xE4 */ CHAN_C|VCHAN_C|NONEOS_C,
609     /* 0xE5 */ CHAN_C|VCHAN_C|NONEOS_C,
610     /* 0xE6 */ CHAN_C|VCHAN_C|NONEOS_C,
611     /* 0xE7 */ CHAN_C|VCHAN_C|NONEOS_C,
612     /* 0xE8 */ CHAN_C|VCHAN_C|NONEOS_C,
613     /* 0xE9 */ CHAN_C|VCHAN_C|NONEOS_C,
614     /* 0xEA */ CHAN_C|VCHAN_C|NONEOS_C,
615     /* 0xEB */ CHAN_C|VCHAN_C|NONEOS_C,
616     /* 0xEC */ CHAN_C|VCHAN_C|NONEOS_C,
617     /* 0xED */ CHAN_C|VCHAN_C|NONEOS_C,
618     /* 0xEE */ CHAN_C|VCHAN_C|NONEOS_C,
619     /* 0xEF */ CHAN_C|VCHAN_C|NONEOS_C,
620     /* 0xF0 */ CHAN_C|VCHAN_C|NONEOS_C,
621     /* 0xF1 */ CHAN_C|VCHAN_C|NONEOS_C,
622     /* 0xF2 */ CHAN_C|VCHAN_C|NONEOS_C,
623     /* 0xF3 */ CHAN_C|VCHAN_C|NONEOS_C,
624     /* 0xF4 */ CHAN_C|VCHAN_C|NONEOS_C,
625     /* 0xF5 */ CHAN_C|VCHAN_C|NONEOS_C,
626     /* 0xF6 */ CHAN_C|VCHAN_C|NONEOS_C,
627     /* 0xF7 */ CHAN_C|VCHAN_C|NONEOS_C,
628     /* 0xF8 */ CHAN_C|VCHAN_C|NONEOS_C,
629     /* 0xF9 */ CHAN_C|VCHAN_C|NONEOS_C,
630     /* 0xFA */ CHAN_C|VCHAN_C|NONEOS_C,
631     /* 0xFB */ CHAN_C|VCHAN_C|NONEOS_C,
632     /* 0xFC */ CHAN_C|VCHAN_C|NONEOS_C,
633     /* 0xFD */ CHAN_C|VCHAN_C|NONEOS_C,
634     /* 0xFE */ CHAN_C|VCHAN_C|NONEOS_C,
635     /* 0xFF */ CHAN_C|VCHAN_C|NONEOS_C
636 adx 30 };

Properties

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