ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/releases/8.2.0beta4/src/match.c
Revision: 4183
Committed: Sun Jul 6 14:05:25 2014 UTC (12 years ago) by michael
Content type: text/x-csrc
File size: 21215 byte(s)
Log Message:
RELEASE TAG 8.2.0beta4

File Contents

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

Properties

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