ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/trunk/src/match.c
Revision: 2916
Committed: Sat Jan 25 21:09:18 2014 UTC (12 years, 8 months ago) by michael
Content type: text/x-csrc
File size: 21233 byte(s)
Log Message:
- Clean up all files in include/ (fixed indentation, removed whitespaces/tabs)
- Fixed copyright years

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

Properties

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