ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/branches/8.1.x/src/match.c
Revision: 1884
Committed: Sat Apr 27 11:08:02 2013 UTC (10 years, 11 months ago) by michael
Content type: text/x-csrc
File size: 21163 byte(s)
Log Message:
- Backported -r1874 [WHOIS may no longer accept wildcards]

File Contents

# Content
1 /************************************************************************
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 * $Id$
20 *
21 */
22
23 #include "stdinc.h"
24 #include "irc_string.h"
25 #include "ircd.h"
26
27
28 /*! \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 */
37 int
38 match(const char *mask, const char *name)
39 {
40 const char *m = mask, *n = name;
41 const char *m_tmp = mask, *n_tmp = name;
42 int star = 0;
43
44 while (1)
45 {
46 switch (*m)
47 {
48 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 m++;
61 /* 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
80 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 m++;
106 n++;
107 break;
108 }
109 }
110
111 return 1;
112 }
113
114 /*
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 *
120 * (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 */
124
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 char *
133 collapse(char *mask)
134 {
135 int star = 0;
136 char *m = mask;
137 char *b = NULL;
138
139 if (m)
140 {
141 do
142 {
143 if ((*m == '*') && ((m[1] == '*') || (m[1] == '?')))
144 {
145 b = m;
146
147 do
148 {
149 if (*m == '*')
150 star = 1;
151 else
152 {
153 if (star && (*m != '?'))
154 {
155 *b++ = '*';
156 star = 0;
157 }
158
159 *b++ = *m;
160
161 if ((*m == '\\') && ((m[1] == '*') || (m[1] == '?')))
162 *b++ = *++m;
163 }
164 } while (*m++);
165
166 break;
167 }
168 else
169 {
170 if ((*m == '\\') && ((m[1] == '*') || (m[1] == '?')))
171 m++;
172 }
173 } while (*m++);
174 }
175
176 return mask;
177 }
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 const unsigned char *str1 = (const unsigned char *)s1;
189 const unsigned char *str2 = (const unsigned char *)s2;
190
191 assert(s1 != NULL);
192 assert(s2 != NULL);
193
194 for (; ToUpper(*str1) == ToUpper(*str2); ++str1, ++str2)
195 if (*str1 == '\0')
196 return 0;
197
198 return 1;
199 }
200
201 int
202 ircncmp(const char *s1, const char *s2, size_t n)
203 {
204 const unsigned char *str1 = (const unsigned char *)s1;
205 const unsigned char *str2 = (const unsigned char *)s2;
206
207 assert(s1 != NULL);
208 assert(s2 != NULL);
209 assert(n > 0);
210
211 if (n == 0)
212 return 0;
213
214 for (; ToUpper(*str1) == ToUpper(*str2); ++str1, ++str2)
215 if (--n == 0 || *str1 == '\0')
216 return 0;
217
218 return 1;
219 }
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 /* 1 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
300 /* 2 */ CNTRL_C|CHAN_C|NONEOS_C,
301 /* 3 */ CNTRL_C|CHAN_C|NONEOS_C,
302 /* 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 /* 7 BEL */ CNTRL_C|NONEOS_C,
306 /* 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 /* 15 */ CNTRL_C|CHAN_C|NONEOS_C,
314 /* 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 /* 22 */ CNTRL_C|CHAN_C|NONEOS_C,
321 /* 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 /* 29 */ CNTRL_C|CHAN_C|NONEOS_C,
328 /* 30 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
329 /* 31 */ CNTRL_C|CHAN_C|NONEOS_C,
330 /* SP */ PRINT_C|SPACE_C,
331 /* ! */ PRINT_C|KWILD_C|CHAN_C|VCHAN_C|NONEOS_C,
332 /* " */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
333 /* # */ PRINT_C|CHANPFX_C|CHAN_C|VCHAN_C|NONEOS_C,
334 /* $ */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
335 /* % */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
336 /* & */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
337 /* ' */ 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 /* , */ PRINT_C|NONEOS_C,
343 /* - */ 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 /* 0xA0 */ CHAN_C|NONEOS_C,
459 /* 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 };

Properties

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