ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/trunk/src/match.c
Revision: 5037
Committed: Sat Dec 13 15:59:13 2014 UTC (11 years, 9 months ago) by michael
Content type: text/x-csrc
File size: 21258 byte(s)
Log Message:
- match.c: style corrections to match()

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

Properties

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