ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/trunk/src/match.c
Revision: 1874
Committed: Sat Apr 27 09:27:34 2013 UTC (12 years, 4 months ago) by michael
Content type: text/x-csrc
File size: 21163 byte(s)
Log Message:
- WHOIS may no longer accept wildcards

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 "ircd.h"
26    
27    
28 michael 1653 /*! \brief Check a string against a mask.
29     * This test checks using traditional IRC wildcards only: '*' means
30     * match zero or more characters of any type; '?' means match exactly
31     * one character of any type. A backslash escapes the next character
32     * so that a wildcard may be matched exactly.
33     * param mask Wildcard-containing mask.
34     * param name String to check against \a mask.
35     * return Zero if \a mask matches \a name, non-zero if no match.
36 adx 30 */
37     int
38     match(const char *mask, const char *name)
39     {
40 michael 1653 const char *m = mask, *n = name;
41     const char *m_tmp = mask, *n_tmp = name;
42     int star = 0;
43 adx 30
44     while (1)
45     {
46 michael 1653 switch (*m)
47 adx 30 {
48 michael 1653 case '\0':
49     if (!*n)
50     return 0;
51     backtrack:
52     if (m_tmp == mask)
53     return 1;
54     m = m_tmp;
55     n = ++n_tmp;
56     if (*n == '\0')
57     return 1;
58     break;
59     case '\\':
60 adx 30 m++;
61 michael 1653 /* allow escaping to force capitalization */
62     if (*m++ != *n++)
63     goto backtrack;
64     break;
65     case '*':
66     case '?':
67     for (star = 0; ; m++)
68     {
69     if (*m == '*')
70     star = 1;
71     else if (*m == '?')
72     {
73     if (!*n++)
74     goto backtrack;
75     }
76     else
77     break;
78     }
79 adx 30
80 michael 1653 if (star)
81     {
82     if (!*m)
83     return 0;
84     else if (*m == '\\')
85     {
86     m_tmp = ++m;
87     if (!*m)
88     return 1;
89     for (n_tmp = n; *n && *n != *m; n++)
90     ;
91     }
92     else
93     {
94     m_tmp = m;
95     for (n_tmp = n; *n && ToLower(*n) != ToLower(*m); n++)
96     ;
97     }
98     }
99     /* and fall through */
100     default:
101     if (!*n)
102     return *m != '\0';
103     if (ToLower(*m) != ToLower(*n))
104     goto backtrack;
105 adx 30 m++;
106 michael 1653 n++;
107     break;
108 adx 30 }
109     }
110    
111 michael 1652 return 1;
112 adx 30 }
113    
114 michael 1652 /*
115     * collapse()
116     * Collapse a pattern string into minimal components.
117     * This particular version is "in place", so that it changes the pattern
118     * which is to be reduced to a "minimal" size.
119 adx 30 *
120 michael 1652 * (C) Carlo Wood - 6 Oct 1998
121     * Speedup rewrite by Andrea Cocito, December 1998.
122     * Note that this new optimized algorithm can *only* work in place.
123 adx 30 */
124 michael 1652
125     /*! \brief Collapse a mask string to remove redundancies.
126     * Specifically, it replaces a sequence of '*' followed by additional
127     * '*' or '?' with the same number of '?'s as the input, followed by
128     * one '*'. This minimizes useless backtracking when matching later.
129     * \param mask Mask string to collapse.
130     * \return Pointer to the start of the string.
131     */
132 adx 30 char *
133 michael 1652 collapse(char *mask)
134 adx 30 {
135 michael 1652 int star = 0;
136     char *m = mask;
137     char *b = NULL;
138 adx 30
139 michael 1652 if (m)
140 adx 30 {
141 michael 1652 do
142     {
143     if ((*m == '*') && ((m[1] == '*') || (m[1] == '?')))
144     {
145     b = m;
146 adx 30
147 michael 1652 do
148     {
149     if (*m == '*')
150     star = 1;
151     else
152     {
153     if (star && (*m != '?'))
154     {
155     *b++ = '*';
156     star = 0;
157     }
158 adx 30
159 michael 1652 *b++ = *m;
160 adx 30
161 michael 1652 if ((*m == '\\') && ((m[1] == '*') || (m[1] == '?')))
162     *b++ = *++m;
163     }
164     } while (*m++);
165 adx 30
166 michael 1652 break;
167     }
168     else
169     {
170     if ((*m == '\\') && ((m[1] == '*') || (m[1] == '?')))
171     m++;
172     }
173     } while (*m++);
174 adx 30 }
175    
176 michael 1652 return mask;
177 adx 30 }
178    
179     /*
180     * irccmp - case insensitive comparison of two 0 terminated strings.
181     *
182     * returns 0, if s1 equal to s2
183     * 1, if not
184     */
185     int
186     irccmp(const char *s1, const char *s2)
187     {
188 michael 1298 const unsigned char *str1 = (const unsigned char *)s1;
189     const unsigned char *str2 = (const unsigned char *)s2;
190 adx 30
191     assert(s1 != NULL);
192     assert(s2 != NULL);
193    
194 michael 1530 for (; ToUpper(*str1) == ToUpper(*str2); ++str1, ++str2)
195 adx 30 if (*str1 == '\0')
196     return 0;
197 michael 1298
198 adx 30 return 1;
199     }
200    
201     int
202 michael 1350 ircncmp(const char *s1, const char *s2, size_t n)
203 adx 30 {
204 michael 1350 const unsigned char *str1 = (const unsigned char *)s1;
205     const unsigned char *str2 = (const unsigned char *)s2;
206 adx 30
207     assert(s1 != NULL);
208     assert(s2 != NULL);
209 michael 1530 assert(n > 0);
210 adx 30
211 michael 1350 if (n == 0)
212     return 0;
213    
214 michael 1530 for (; ToUpper(*str1) == ToUpper(*str2); ++str1, ++str2)
215     if (--n == 0 || *str1 == '\0')
216 adx 30 return 0;
217 michael 1350
218     return 1;
219 adx 30 }
220    
221     const unsigned char ToLowerTab[] = {
222     0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa,
223     0xb, 0xc, 0xd, 0xe, 0xf, 0x10, 0x11, 0x12, 0x13, 0x14,
224     0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d,
225     0x1e, 0x1f,
226     ' ', '!', '"', '#', '$', '%', '&', 0x27, '(', ')',
227     '*', '+', ',', '-', '.', '/',
228     '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
229     ':', ';', '<', '=', '>', '?',
230     '@', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
231     'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
232     't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~',
233     '_',
234     '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
235     'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
236     't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~',
237     0x7f,
238     0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
239     0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
240     0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
241     0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
242     0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9,
243     0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
244     0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9,
245     0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
246     0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9,
247     0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
248     0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9,
249     0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
250     0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,
251     0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
252     0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9,
253     0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
254     };
255    
256     const unsigned char ToUpperTab[] = {
257     0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa,
258     0xb, 0xc, 0xd, 0xe, 0xf, 0x10, 0x11, 0x12, 0x13, 0x14,
259     0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d,
260     0x1e, 0x1f,
261     ' ', '!', '"', '#', '$', '%', '&', 0x27, '(', ')',
262     '*', '+', ',', '-', '.', '/',
263     '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
264     ':', ';', '<', '=', '>', '?',
265     '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
266     'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
267     'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^',
268     0x5f,
269     '`', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
270     'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
271     'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^',
272     0x7f,
273     0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
274     0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
275     0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
276     0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
277     0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9,
278     0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
279     0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9,
280     0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
281     0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9,
282     0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
283     0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9,
284     0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
285     0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,
286     0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
287     0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9,
288     0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
289     };
290    
291     /*
292     * CharAttrs table
293     *
294     * NOTE: RFC 1459 sez: anything but a ^G, comma, or space is allowed
295     * for channel names
296     */
297     const unsigned int CharAttrs[] = {
298     /* 0 */ CNTRL_C,
299 db 633 /* 1 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
300 db 635 /* 2 */ CNTRL_C|CHAN_C|NONEOS_C,
301     /* 3 */ CNTRL_C|CHAN_C|NONEOS_C,
302 db 633 /* 4 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
303     /* 5 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
304     /* 6 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
305 adx 30 /* 7 BEL */ CNTRL_C|NONEOS_C,
306 db 633 /* 8 \b */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
307     /* 9 \t */ CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C,
308     /* 10 \n */ CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C|EOL_C,
309     /* 11 \v */ CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C,
310     /* 12 \f */ CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C,
311     /* 13 \r */ CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C|EOL_C,
312     /* 14 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
313 adx 637 /* 15 */ CNTRL_C|CHAN_C|NONEOS_C,
314 db 633 /* 16 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
315     /* 17 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
316     /* 18 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
317     /* 19 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
318     /* 20 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
319     /* 21 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
320 db 635 /* 22 */ CNTRL_C|CHAN_C|NONEOS_C,
321 db 633 /* 23 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
322     /* 24 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
323     /* 25 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
324     /* 26 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
325     /* 27 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
326     /* 28 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
327 michael 1424 /* 29 */ CNTRL_C|CHAN_C|NONEOS_C,
328 db 633 /* 30 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
329 db 635 /* 31 */ CNTRL_C|CHAN_C|NONEOS_C,
330 adx 30 /* SP */ PRINT_C|SPACE_C,
331 db 633 /* ! */ PRINT_C|KWILD_C|CHAN_C|VCHAN_C|NONEOS_C,
332     /* " */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
333 michael 1874 /* # */ PRINT_C|CHANPFX_C|CHAN_C|VCHAN_C|NONEOS_C,
334 db 633 /* $ */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
335     /* % */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
336 michael 1474 /* & */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
337 db 633 /* ' */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
338     /* ( */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
339     /* ) */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
340     /* * */ PRINT_C|KWILD_C|MWILD_C|CHAN_C|VCHAN_C|NONEOS_C|SERV_C,
341     /* + */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
342 adx 30 /* , */ PRINT_C|NONEOS_C,
343 db 633 /* - */ PRINT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
344     /* . */ PRINT_C|KWILD_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C|SERV_C,
345     /* / */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
346     /* 0 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
347     /* 1 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
348     /* 2 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
349     /* 3 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
350     /* 4 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
351     /* 5 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
352     /* 6 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
353     /* 7 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
354     /* 8 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
355     /* 9 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
356     /* : */ PRINT_C|KWILD_C|CHAN_C|VCHAN_C|NONEOS_C|HOST_C,
357     /* ; */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
358     /* < */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
359     /* = */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
360     /* > */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
361     /* ? */ PRINT_C|KWILD_C|MWILD_C|CHAN_C|VCHAN_C|NONEOS_C,
362     /* @ */ PRINT_C|KWILD_C|CHAN_C|VCHAN_C|NONEOS_C,
363     /* A */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
364     /* B */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
365     /* C */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
366     /* D */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
367     /* E */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
368     /* F */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
369     /* G */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
370     /* H */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
371     /* I */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
372     /* J */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
373     /* K */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
374     /* L */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
375     /* M */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
376     /* N */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
377     /* O */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
378     /* P */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
379     /* Q */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
380     /* R */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
381     /* S */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
382     /* T */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
383     /* U */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
384     /* V */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
385     /* W */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
386     /* X */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
387     /* Y */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
388     /* Z */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
389     /* [ */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
390     /* \ */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
391     /* ] */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
392     /* ^ */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
393     /* _ */ PRINT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
394     /* ` */ PRINT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
395     /* a */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
396     /* b */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
397     /* c */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
398     /* d */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
399     /* e */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
400     /* f */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
401     /* g */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
402     /* h */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
403     /* i */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
404     /* j */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
405     /* k */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
406     /* l */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
407     /* m */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
408     /* n */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
409     /* o */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
410     /* p */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
411     /* q */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
412     /* r */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
413     /* s */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
414     /* t */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
415     /* u */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
416     /* v */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
417     /* w */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
418     /* x */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
419     /* y */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
420     /* z */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
421     /* { */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
422     /* | */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
423     /* } */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
424     /* ~ */ PRINT_C|ALPHA_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
425     /* del */ CHAN_C|VCHAN_C|NONEOS_C,
426     /* 0x80 */ CHAN_C|VCHAN_C|NONEOS_C,
427     /* 0x81 */ CHAN_C|VCHAN_C|NONEOS_C,
428     /* 0x82 */ CHAN_C|VCHAN_C|NONEOS_C,
429     /* 0x83 */ CHAN_C|VCHAN_C|NONEOS_C,
430     /* 0x84 */ CHAN_C|VCHAN_C|NONEOS_C,
431     /* 0x85 */ CHAN_C|VCHAN_C|NONEOS_C,
432     /* 0x86 */ CHAN_C|VCHAN_C|NONEOS_C,
433     /* 0x87 */ CHAN_C|VCHAN_C|NONEOS_C,
434     /* 0x88 */ CHAN_C|VCHAN_C|NONEOS_C,
435     /* 0x89 */ CHAN_C|VCHAN_C|NONEOS_C,
436     /* 0x8A */ CHAN_C|VCHAN_C|NONEOS_C,
437     /* 0x8B */ CHAN_C|VCHAN_C|NONEOS_C,
438     /* 0x8C */ CHAN_C|VCHAN_C|NONEOS_C,
439     /* 0x8D */ CHAN_C|VCHAN_C|NONEOS_C,
440     /* 0x8E */ CHAN_C|VCHAN_C|NONEOS_C,
441     /* 0x8F */ CHAN_C|VCHAN_C|NONEOS_C,
442     /* 0x90 */ CHAN_C|VCHAN_C|NONEOS_C,
443     /* 0x91 */ CHAN_C|VCHAN_C|NONEOS_C,
444     /* 0x92 */ CHAN_C|VCHAN_C|NONEOS_C,
445     /* 0x93 */ CHAN_C|VCHAN_C|NONEOS_C,
446     /* 0x94 */ CHAN_C|VCHAN_C|NONEOS_C,
447     /* 0x95 */ CHAN_C|VCHAN_C|NONEOS_C,
448     /* 0x96 */ CHAN_C|VCHAN_C|NONEOS_C,
449     /* 0x97 */ CHAN_C|VCHAN_C|NONEOS_C,
450     /* 0x98 */ CHAN_C|VCHAN_C|NONEOS_C,
451     /* 0x99 */ CHAN_C|VCHAN_C|NONEOS_C,
452     /* 0x9A */ CHAN_C|VCHAN_C|NONEOS_C,
453     /* 0x9B */ CHAN_C|VCHAN_C|NONEOS_C,
454     /* 0x9C */ CHAN_C|VCHAN_C|NONEOS_C,
455     /* 0x9D */ CHAN_C|VCHAN_C|NONEOS_C,
456     /* 0x9E */ CHAN_C|VCHAN_C|NONEOS_C,
457     /* 0x9F */ CHAN_C|VCHAN_C|NONEOS_C,
458 db 635 /* 0xA0 */ CHAN_C|NONEOS_C,
459 db 633 /* 0xA1 */ CHAN_C|VCHAN_C|NONEOS_C,
460     /* 0xA2 */ CHAN_C|VCHAN_C|NONEOS_C,
461     /* 0xA3 */ CHAN_C|VCHAN_C|NONEOS_C,
462     /* 0xA4 */ CHAN_C|VCHAN_C|NONEOS_C,
463     /* 0xA5 */ CHAN_C|VCHAN_C|NONEOS_C,
464     /* 0xA6 */ CHAN_C|VCHAN_C|NONEOS_C,
465     /* 0xA7 */ CHAN_C|VCHAN_C|NONEOS_C,
466     /* 0xA8 */ CHAN_C|VCHAN_C|NONEOS_C,
467     /* 0xA9 */ CHAN_C|VCHAN_C|NONEOS_C,
468     /* 0xAA */ CHAN_C|VCHAN_C|NONEOS_C,
469     /* 0xAB */ CHAN_C|VCHAN_C|NONEOS_C,
470     /* 0xAC */ CHAN_C|VCHAN_C|NONEOS_C,
471     /* 0xAD */ CHAN_C|VCHAN_C|NONEOS_C,
472     /* 0xAE */ CHAN_C|VCHAN_C|NONEOS_C,
473     /* 0xAF */ CHAN_C|VCHAN_C|NONEOS_C,
474     /* 0xB0 */ CHAN_C|VCHAN_C|NONEOS_C,
475     /* 0xB1 */ CHAN_C|VCHAN_C|NONEOS_C,
476     /* 0xB2 */ CHAN_C|VCHAN_C|NONEOS_C,
477     /* 0xB3 */ CHAN_C|VCHAN_C|NONEOS_C,
478     /* 0xB4 */ CHAN_C|VCHAN_C|NONEOS_C,
479     /* 0xB5 */ CHAN_C|VCHAN_C|NONEOS_C,
480     /* 0xB6 */ CHAN_C|VCHAN_C|NONEOS_C,
481     /* 0xB7 */ CHAN_C|VCHAN_C|NONEOS_C,
482     /* 0xB8 */ CHAN_C|VCHAN_C|NONEOS_C,
483     /* 0xB9 */ CHAN_C|VCHAN_C|NONEOS_C,
484     /* 0xBA */ CHAN_C|VCHAN_C|NONEOS_C,
485     /* 0xBB */ CHAN_C|VCHAN_C|NONEOS_C,
486     /* 0xBC */ CHAN_C|VCHAN_C|NONEOS_C,
487     /* 0xBD */ CHAN_C|VCHAN_C|NONEOS_C,
488     /* 0xBE */ CHAN_C|VCHAN_C|NONEOS_C,
489     /* 0xBF */ CHAN_C|VCHAN_C|NONEOS_C,
490     /* 0xC0 */ CHAN_C|VCHAN_C|NONEOS_C,
491     /* 0xC1 */ CHAN_C|VCHAN_C|NONEOS_C,
492     /* 0xC2 */ CHAN_C|VCHAN_C|NONEOS_C,
493     /* 0xC3 */ CHAN_C|VCHAN_C|NONEOS_C,
494     /* 0xC4 */ CHAN_C|VCHAN_C|NONEOS_C,
495     /* 0xC5 */ CHAN_C|VCHAN_C|NONEOS_C,
496     /* 0xC6 */ CHAN_C|VCHAN_C|NONEOS_C,
497     /* 0xC7 */ CHAN_C|VCHAN_C|NONEOS_C,
498     /* 0xC8 */ CHAN_C|VCHAN_C|NONEOS_C,
499     /* 0xC9 */ CHAN_C|VCHAN_C|NONEOS_C,
500     /* 0xCA */ CHAN_C|VCHAN_C|NONEOS_C,
501     /* 0xCB */ CHAN_C|VCHAN_C|NONEOS_C,
502     /* 0xCC */ CHAN_C|VCHAN_C|NONEOS_C,
503     /* 0xCD */ CHAN_C|VCHAN_C|NONEOS_C,
504     /* 0xCE */ CHAN_C|VCHAN_C|NONEOS_C,
505     /* 0xCF */ CHAN_C|VCHAN_C|NONEOS_C,
506     /* 0xD0 */ CHAN_C|VCHAN_C|NONEOS_C,
507     /* 0xD1 */ CHAN_C|VCHAN_C|NONEOS_C,
508     /* 0xD2 */ CHAN_C|VCHAN_C|NONEOS_C,
509     /* 0xD3 */ CHAN_C|VCHAN_C|NONEOS_C,
510     /* 0xD4 */ CHAN_C|VCHAN_C|NONEOS_C,
511     /* 0xD5 */ CHAN_C|VCHAN_C|NONEOS_C,
512     /* 0xD6 */ CHAN_C|VCHAN_C|NONEOS_C,
513     /* 0xD7 */ CHAN_C|VCHAN_C|NONEOS_C,
514     /* 0xD8 */ CHAN_C|VCHAN_C|NONEOS_C,
515     /* 0xD9 */ CHAN_C|VCHAN_C|NONEOS_C,
516     /* 0xDA */ CHAN_C|VCHAN_C|NONEOS_C,
517     /* 0xDB */ CHAN_C|VCHAN_C|NONEOS_C,
518     /* 0xDC */ CHAN_C|VCHAN_C|NONEOS_C,
519     /* 0xDD */ CHAN_C|VCHAN_C|NONEOS_C,
520     /* 0xDE */ CHAN_C|VCHAN_C|NONEOS_C,
521     /* 0xDF */ CHAN_C|VCHAN_C|NONEOS_C,
522     /* 0xE0 */ CHAN_C|VCHAN_C|NONEOS_C,
523     /* 0xE1 */ CHAN_C|VCHAN_C|NONEOS_C,
524     /* 0xE2 */ CHAN_C|VCHAN_C|NONEOS_C,
525     /* 0xE3 */ CHAN_C|VCHAN_C|NONEOS_C,
526     /* 0xE4 */ CHAN_C|VCHAN_C|NONEOS_C,
527     /* 0xE5 */ CHAN_C|VCHAN_C|NONEOS_C,
528     /* 0xE6 */ CHAN_C|VCHAN_C|NONEOS_C,
529     /* 0xE7 */ CHAN_C|VCHAN_C|NONEOS_C,
530     /* 0xE8 */ CHAN_C|VCHAN_C|NONEOS_C,
531     /* 0xE9 */ CHAN_C|VCHAN_C|NONEOS_C,
532     /* 0xEA */ CHAN_C|VCHAN_C|NONEOS_C,
533     /* 0xEB */ CHAN_C|VCHAN_C|NONEOS_C,
534     /* 0xEC */ CHAN_C|VCHAN_C|NONEOS_C,
535     /* 0xED */ CHAN_C|VCHAN_C|NONEOS_C,
536     /* 0xEE */ CHAN_C|VCHAN_C|NONEOS_C,
537     /* 0xEF */ CHAN_C|VCHAN_C|NONEOS_C,
538     /* 0xF0 */ CHAN_C|VCHAN_C|NONEOS_C,
539     /* 0xF1 */ CHAN_C|VCHAN_C|NONEOS_C,
540     /* 0xF2 */ CHAN_C|VCHAN_C|NONEOS_C,
541     /* 0xF3 */ CHAN_C|VCHAN_C|NONEOS_C,
542     /* 0xF4 */ CHAN_C|VCHAN_C|NONEOS_C,
543     /* 0xF5 */ CHAN_C|VCHAN_C|NONEOS_C,
544     /* 0xF6 */ CHAN_C|VCHAN_C|NONEOS_C,
545     /* 0xF7 */ CHAN_C|VCHAN_C|NONEOS_C,
546     /* 0xF8 */ CHAN_C|VCHAN_C|NONEOS_C,
547     /* 0xF9 */ CHAN_C|VCHAN_C|NONEOS_C,
548     /* 0xFA */ CHAN_C|VCHAN_C|NONEOS_C,
549     /* 0xFB */ CHAN_C|VCHAN_C|NONEOS_C,
550     /* 0xFC */ CHAN_C|VCHAN_C|NONEOS_C,
551     /* 0xFD */ CHAN_C|VCHAN_C|NONEOS_C,
552     /* 0xFE */ CHAN_C|VCHAN_C|NONEOS_C,
553     /* 0xFF */ CHAN_C|VCHAN_C|NONEOS_C
554 adx 30 };

Properties

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