ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/trunk/src/match.c
Revision: 1653
Committed: Wed Nov 14 11:50:55 2012 UTC (13 years, 8 months ago) by michael
Content type: text/x-csrc
File size: 21191 byte(s)
Log Message:
- added improved match() stolen from ircu
- fixed compile warning in m_module.c

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

Properties

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