/[svn]/ircd-hybrid-8/src/match.c
ViewVC logotype

Contents of /ircd-hybrid-8/src/match.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1298 - (show annotations)
Tue Feb 28 18:51:13 2012 UTC (11 years, 3 months ago) by michael
File MIME type: text/x-chdr
File size: 22035 byte(s)
- fixed style in some places

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 /* Fix "statement not reached" warnings on Sun WorkShop C */
29 #ifdef __SUNPRO_C
30 # pragma error_messages(off, E_STATEMENT_NOT_REACHED)
31 #endif
32
33 /* match()
34 *
35 * Compare if a given string (name) matches the given
36 * mask (which can contain wild cards: '*' - match any
37 * number of chars, '?' - match any single character.
38 *
39 * return 1, if match
40 * 0, if no match
41 *
42 * Originally by Douglas A Lewis (dalewis@acsu.buffalo.edu)
43 */
44 int
45 match(const char *mask, const char *name)
46 {
47 const unsigned char *m = (const unsigned char *)mask;
48 const unsigned char *n = (const unsigned char *)name;
49 const unsigned char *ma = NULL;
50 const unsigned char *na = (const unsigned char *)name;
51
52 assert(mask != NULL);
53 assert(name != NULL);
54
55 while (1)
56 {
57 if (*m == '*')
58 {
59 /*
60 * XXX - shouldn't need to spin here, the mask should have been
61 * collapsed before match is called
62 */
63 while (*m == '*')
64 m++;
65 ma = m;
66 na = n;
67 }
68
69 if (!*m)
70 {
71 if (!*n)
72 return 1;
73 if (!ma)
74 return 0;
75 for (m--; (m > (const unsigned char *)mask) && (*m == '?'); m--)
76 ;
77 if (*m == '*')
78 return 1;
79 m = ma;
80 n = ++na;
81 }
82 else if (!*n)
83 {
84 /*
85 * XXX - shouldn't need to spin here, the mask should have been
86 * collapsed before match is called
87 */
88 while (*m == '*')
89 m++;
90 return *m == 0;
91 }
92
93 if (ToLower(*m) != ToLower(*n) && *m != '?' && (*m != '#' || !IsDigit(*n)))
94 {
95 if (!ma)
96 return 0;
97 m = ma;
98 n = ++na;
99 }
100 else
101 m++, n++;
102 }
103
104 return 0;
105 }
106
107 /* match_esc()
108 *
109 * The match() function with support for escaping characters such
110 * as '*' and '?'
111 */
112 int
113 match_esc(const char *mask, const char *name)
114 {
115 const unsigned char *m = (const unsigned char *)mask;
116 const unsigned char *n = (const unsigned char *)name;
117 const unsigned char *ma = NULL;
118 const unsigned char *na = (const unsigned char *)name;
119
120 assert(mask != NULL);
121 assert(name != NULL);
122
123 while (1)
124 {
125 if (*m == '*')
126 {
127 /*
128 * XXX - shouldn't need to spin here, the mask should have been
129 * collapsed before match is called
130 */
131 while (*m == '*')
132 m++;
133 ma = m;
134 na = n;
135 }
136
137 if (!*m)
138 {
139 if (!*n)
140 return 1;
141 if (!ma)
142 return 0;
143 for (m--; (m > (const unsigned char *)mask) && (*m == '?'); m--)
144 ;
145 if (*m == '*')
146 return 1;
147 m = ma;
148 n = ++na;
149 }
150 else if (!*n)
151 {
152 /*
153 * XXX - shouldn't need to spin here, the mask should have been
154 * collapsed before match is called
155 */
156 while (*m == '*')
157 m++;
158 return *m == 0;
159 }
160
161 if (*m != '?' && (*m != '#' || IsDigit(*n)))
162 {
163 if (*m == '\\')
164 if (!*++m)
165 return 0;
166 if (ToLower(*m) != ToLower(*n))
167 {
168 if (!ma)
169 return 0;
170 m = ma;
171 n = ++na;
172 }
173 else
174 m++, n++;
175 }
176 else
177 m++, n++;
178 }
179
180 return 0;
181 }
182
183 /* match_chan()
184 *
185 * The match_esc() function doing channel prefix auto-escape,
186 * ie. mask: #blah*blah is seen like \#blah*blah
187 */
188 int
189 match_chan(const char *mask, const char *name)
190 {
191 if (*mask == '#')
192 {
193 if (*name != '#')
194 return 0;
195 ++name, ++mask;
196 }
197
198 return match_esc(mask, name);
199 }
200
201 /* collapse()
202 *
203 * collapses a string containing multiple *'s.
204 */
205 char *
206 collapse(char *pattern)
207 {
208 char *p = pattern, *po = pattern;
209 char c;
210
211 if (p == NULL)
212 return NULL;
213
214 while ((c = *p++))
215 {
216 if (c != '*')
217 *po++ = c;
218 else if (*p != '*')
219 *po++ = '*';
220 }
221
222 *po = 0;
223
224 return pattern;
225 }
226
227 /* collapse_esc()
228 *
229 * The collapse() function with support for escaping characters
230 */
231 char *
232 collapse_esc(char *pattern)
233 {
234 char *p = pattern, *po = pattern;
235 char c;
236
237 if (p == NULL)
238 return NULL;
239
240 while ((c = *p++))
241 {
242 if (c != '*')
243 {
244 *po++ = c;
245 if (c == '\\' && *p)
246 *po++ = *p++;
247 }
248 else if (*p != '*')
249 *po++ = '*';
250 }
251
252 *po = 0;
253
254 return pattern;
255 }
256
257 /*
258 * irccmp - case insensitive comparison of two 0 terminated strings.
259 *
260 * returns 0, if s1 equal to s2
261 * 1, if not
262 */
263 int
264 irccmp(const char *s1, const char *s2)
265 {
266 const unsigned char *str1 = (const unsigned char *)s1;
267 const unsigned char *str2 = (const unsigned char *)s2;
268
269 assert(s1 != NULL);
270 assert(s2 != NULL);
271
272 while (ToUpper(*str1) == ToUpper(*str2))
273 {
274 if (*str1 == '\0')
275 return 0;
276
277 ++str1;
278 ++str2;
279 }
280
281 return 1;
282 }
283
284 int
285 ircncmp(const char* s1, const char *s2, size_t n)
286 {
287 const unsigned char *str1 = (const unsigned char *) s1;
288 const unsigned char *str2 = (const unsigned char *) s2;
289 int res;
290
291 assert(s1 != NULL);
292 assert(s2 != NULL);
293
294 while ((res = ToUpper(*str1) - ToUpper(*str2)) == 0)
295 {
296 str1++, str2++, n--;
297 if (n == 0 || (*str1 == '\0' && *str2 == '\0'))
298 return 0;
299 }
300 return res;
301 }
302
303 const unsigned char ToLowerTab[] = {
304 0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa,
305 0xb, 0xc, 0xd, 0xe, 0xf, 0x10, 0x11, 0x12, 0x13, 0x14,
306 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d,
307 0x1e, 0x1f,
308 ' ', '!', '"', '#', '$', '%', '&', 0x27, '(', ')',
309 '*', '+', ',', '-', '.', '/',
310 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
311 ':', ';', '<', '=', '>', '?',
312 '@', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
313 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
314 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~',
315 '_',
316 '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
317 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
318 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~',
319 0x7f,
320 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
321 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
322 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
323 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
324 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9,
325 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
326 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9,
327 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
328 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9,
329 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
330 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9,
331 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
332 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,
333 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
334 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9,
335 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
336 };
337
338 const unsigned char ToUpperTab[] = {
339 0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa,
340 0xb, 0xc, 0xd, 0xe, 0xf, 0x10, 0x11, 0x12, 0x13, 0x14,
341 0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d,
342 0x1e, 0x1f,
343 ' ', '!', '"', '#', '$', '%', '&', 0x27, '(', ')',
344 '*', '+', ',', '-', '.', '/',
345 '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
346 ':', ';', '<', '=', '>', '?',
347 '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
348 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
349 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^',
350 0x5f,
351 '`', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
352 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
353 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^',
354 0x7f,
355 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
356 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
357 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
358 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
359 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9,
360 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
361 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9,
362 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
363 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9,
364 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
365 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9,
366 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
367 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,
368 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
369 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9,
370 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
371 };
372
373 /*
374 * CharAttrs table
375 *
376 * NOTE: RFC 1459 sez: anything but a ^G, comma, or space is allowed
377 * for channel names
378 */
379 const unsigned int CharAttrs[] = {
380 /* 0 */ CNTRL_C,
381 /* 1 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
382 /* 2 */ CNTRL_C|CHAN_C|NONEOS_C,
383 /* 3 */ CNTRL_C|CHAN_C|NONEOS_C,
384 /* 4 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
385 /* 5 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
386 /* 6 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
387 /* 7 BEL */ CNTRL_C|NONEOS_C,
388 /* 8 \b */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
389 /* 9 \t */ CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C,
390 /* 10 \n */ CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C|EOL_C,
391 /* 11 \v */ CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C,
392 /* 12 \f */ CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C,
393 /* 13 \r */ CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C|EOL_C,
394 /* 14 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
395 /* 15 */ CNTRL_C|CHAN_C|NONEOS_C,
396 /* 16 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
397 /* 17 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
398 /* 18 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
399 /* 19 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
400 /* 20 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
401 /* 21 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
402 /* 22 */ CNTRL_C|CHAN_C|NONEOS_C,
403 /* 23 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
404 /* 24 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
405 /* 25 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
406 /* 26 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
407 /* 27 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
408 /* 28 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
409 /* 29 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
410 /* 30 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
411 /* 31 */ CNTRL_C|CHAN_C|NONEOS_C,
412 /* SP */ PRINT_C|SPACE_C,
413 /* ! */ PRINT_C|KWILD_C|CHAN_C|VCHAN_C|NONEOS_C,
414 /* " */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
415 /* # */ PRINT_C|KWILD_C|MWILD_C|CHANPFX_C|CHAN_C|VCHAN_C|NONEOS_C,
416 /* $ */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
417 /* % */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
418 /* & */ PRINT_C|CHANPFX_C|CHAN_C|VCHAN_C|NONEOS_C,
419 /* ' */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
420 /* ( */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
421 /* ) */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
422 /* * */ PRINT_C|KWILD_C|MWILD_C|CHAN_C|VCHAN_C|NONEOS_C|SERV_C,
423 /* + */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
424 /* , */ PRINT_C|NONEOS_C,
425 /* - */ PRINT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
426 /* . */ PRINT_C|KWILD_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C|SERV_C,
427 /* / */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
428 /* 0 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
429 /* 1 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
430 /* 2 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
431 /* 3 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
432 /* 4 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
433 /* 5 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
434 /* 6 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
435 /* 7 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
436 /* 8 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
437 /* 9 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
438 /* : */ PRINT_C|KWILD_C|CHAN_C|VCHAN_C|NONEOS_C|HOST_C,
439 /* ; */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
440 /* < */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
441 /* = */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
442 /* > */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
443 /* ? */ PRINT_C|KWILD_C|MWILD_C|CHAN_C|VCHAN_C|NONEOS_C,
444 /* @ */ PRINT_C|KWILD_C|CHAN_C|VCHAN_C|NONEOS_C,
445 /* A */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
446 /* B */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
447 /* C */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
448 /* D */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
449 /* E */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
450 /* F */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
451 /* G */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
452 /* H */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
453 /* I */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
454 /* J */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
455 /* K */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
456 /* L */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
457 /* M */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
458 /* N */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
459 /* O */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
460 /* P */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
461 /* Q */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
462 /* R */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
463 /* S */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
464 /* T */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
465 /* U */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
466 /* V */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
467 /* W */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
468 /* X */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
469 /* Y */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
470 /* Z */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
471 /* [ */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
472 /* \ */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
473 /* ] */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
474 /* ^ */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
475 /* _ */ PRINT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
476 /* ` */ PRINT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
477 /* a */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
478 /* b */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
479 /* c */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
480 /* d */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
481 /* e */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
482 /* f */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
483 /* g */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
484 /* h */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
485 /* i */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
486 /* j */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
487 /* k */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
488 /* l */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
489 /* m */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
490 /* n */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
491 /* o */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
492 /* p */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
493 /* q */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
494 /* r */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
495 /* s */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
496 /* t */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
497 /* u */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
498 /* v */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
499 /* w */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
500 /* x */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
501 /* y */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
502 /* z */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
503 /* { */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
504 /* | */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
505 /* } */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
506 /* ~ */ PRINT_C|ALPHA_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
507 /* del */ CHAN_C|VCHAN_C|NONEOS_C,
508 /* 0x80 */ CHAN_C|VCHAN_C|NONEOS_C,
509 /* 0x81 */ CHAN_C|VCHAN_C|NONEOS_C,
510 /* 0x82 */ CHAN_C|VCHAN_C|NONEOS_C,
511 /* 0x83 */ CHAN_C|VCHAN_C|NONEOS_C,
512 /* 0x84 */ CHAN_C|VCHAN_C|NONEOS_C,
513 /* 0x85 */ CHAN_C|VCHAN_C|NONEOS_C,
514 /* 0x86 */ CHAN_C|VCHAN_C|NONEOS_C,
515 /* 0x87 */ CHAN_C|VCHAN_C|NONEOS_C,
516 /* 0x88 */ CHAN_C|VCHAN_C|NONEOS_C,
517 /* 0x89 */ CHAN_C|VCHAN_C|NONEOS_C,
518 /* 0x8A */ CHAN_C|VCHAN_C|NONEOS_C,
519 /* 0x8B */ CHAN_C|VCHAN_C|NONEOS_C,
520 /* 0x8C */ CHAN_C|VCHAN_C|NONEOS_C,
521 /* 0x8D */ CHAN_C|VCHAN_C|NONEOS_C,
522 /* 0x8E */ CHAN_C|VCHAN_C|NONEOS_C,
523 /* 0x8F */ CHAN_C|VCHAN_C|NONEOS_C,
524 /* 0x90 */ CHAN_C|VCHAN_C|NONEOS_C,
525 /* 0x91 */ CHAN_C|VCHAN_C|NONEOS_C,
526 /* 0x92 */ CHAN_C|VCHAN_C|NONEOS_C,
527 /* 0x93 */ CHAN_C|VCHAN_C|NONEOS_C,
528 /* 0x94 */ CHAN_C|VCHAN_C|NONEOS_C,
529 /* 0x95 */ CHAN_C|VCHAN_C|NONEOS_C,
530 /* 0x96 */ CHAN_C|VCHAN_C|NONEOS_C,
531 /* 0x97 */ CHAN_C|VCHAN_C|NONEOS_C,
532 /* 0x98 */ CHAN_C|VCHAN_C|NONEOS_C,
533 /* 0x99 */ CHAN_C|VCHAN_C|NONEOS_C,
534 /* 0x9A */ CHAN_C|VCHAN_C|NONEOS_C,
535 /* 0x9B */ CHAN_C|VCHAN_C|NONEOS_C,
536 /* 0x9C */ CHAN_C|VCHAN_C|NONEOS_C,
537 /* 0x9D */ CHAN_C|VCHAN_C|NONEOS_C,
538 /* 0x9E */ CHAN_C|VCHAN_C|NONEOS_C,
539 /* 0x9F */ CHAN_C|VCHAN_C|NONEOS_C,
540 /* 0xA0 */ CHAN_C|NONEOS_C,
541 /* 0xA1 */ CHAN_C|VCHAN_C|NONEOS_C,
542 /* 0xA2 */ CHAN_C|VCHAN_C|NONEOS_C,
543 /* 0xA3 */ CHAN_C|VCHAN_C|NONEOS_C,
544 /* 0xA4 */ CHAN_C|VCHAN_C|NONEOS_C,
545 /* 0xA5 */ CHAN_C|VCHAN_C|NONEOS_C,
546 /* 0xA6 */ CHAN_C|VCHAN_C|NONEOS_C,
547 /* 0xA7 */ CHAN_C|VCHAN_C|NONEOS_C,
548 /* 0xA8 */ CHAN_C|VCHAN_C|NONEOS_C,
549 /* 0xA9 */ CHAN_C|VCHAN_C|NONEOS_C,
550 /* 0xAA */ CHAN_C|VCHAN_C|NONEOS_C,
551 /* 0xAB */ CHAN_C|VCHAN_C|NONEOS_C,
552 /* 0xAC */ CHAN_C|VCHAN_C|NONEOS_C,
553 /* 0xAD */ CHAN_C|VCHAN_C|NONEOS_C,
554 /* 0xAE */ CHAN_C|VCHAN_C|NONEOS_C,
555 /* 0xAF */ CHAN_C|VCHAN_C|NONEOS_C,
556 /* 0xB0 */ CHAN_C|VCHAN_C|NONEOS_C,
557 /* 0xB1 */ CHAN_C|VCHAN_C|NONEOS_C,
558 /* 0xB2 */ CHAN_C|VCHAN_C|NONEOS_C,
559 /* 0xB3 */ CHAN_C|VCHAN_C|NONEOS_C,
560 /* 0xB4 */ CHAN_C|VCHAN_C|NONEOS_C,
561 /* 0xB5 */ CHAN_C|VCHAN_C|NONEOS_C,
562 /* 0xB6 */ CHAN_C|VCHAN_C|NONEOS_C,
563 /* 0xB7 */ CHAN_C|VCHAN_C|NONEOS_C,
564 /* 0xB8 */ CHAN_C|VCHAN_C|NONEOS_C,
565 /* 0xB9 */ CHAN_C|VCHAN_C|NONEOS_C,
566 /* 0xBA */ CHAN_C|VCHAN_C|NONEOS_C,
567 /* 0xBB */ CHAN_C|VCHAN_C|NONEOS_C,
568 /* 0xBC */ CHAN_C|VCHAN_C|NONEOS_C,
569 /* 0xBD */ CHAN_C|VCHAN_C|NONEOS_C,
570 /* 0xBE */ CHAN_C|VCHAN_C|NONEOS_C,
571 /* 0xBF */ CHAN_C|VCHAN_C|NONEOS_C,
572 /* 0xC0 */ CHAN_C|VCHAN_C|NONEOS_C,
573 /* 0xC1 */ CHAN_C|VCHAN_C|NONEOS_C,
574 /* 0xC2 */ CHAN_C|VCHAN_C|NONEOS_C,
575 /* 0xC3 */ CHAN_C|VCHAN_C|NONEOS_C,
576 /* 0xC4 */ CHAN_C|VCHAN_C|NONEOS_C,
577 /* 0xC5 */ CHAN_C|VCHAN_C|NONEOS_C,
578 /* 0xC6 */ CHAN_C|VCHAN_C|NONEOS_C,
579 /* 0xC7 */ CHAN_C|VCHAN_C|NONEOS_C,
580 /* 0xC8 */ CHAN_C|VCHAN_C|NONEOS_C,
581 /* 0xC9 */ CHAN_C|VCHAN_C|NONEOS_C,
582 /* 0xCA */ CHAN_C|VCHAN_C|NONEOS_C,
583 /* 0xCB */ CHAN_C|VCHAN_C|NONEOS_C,
584 /* 0xCC */ CHAN_C|VCHAN_C|NONEOS_C,
585 /* 0xCD */ CHAN_C|VCHAN_C|NONEOS_C,
586 /* 0xCE */ CHAN_C|VCHAN_C|NONEOS_C,
587 /* 0xCF */ CHAN_C|VCHAN_C|NONEOS_C,
588 /* 0xD0 */ CHAN_C|VCHAN_C|NONEOS_C,
589 /* 0xD1 */ CHAN_C|VCHAN_C|NONEOS_C,
590 /* 0xD2 */ CHAN_C|VCHAN_C|NONEOS_C,
591 /* 0xD3 */ CHAN_C|VCHAN_C|NONEOS_C,
592 /* 0xD4 */ CHAN_C|VCHAN_C|NONEOS_C,
593 /* 0xD5 */ CHAN_C|VCHAN_C|NONEOS_C,
594 /* 0xD6 */ CHAN_C|VCHAN_C|NONEOS_C,
595 /* 0xD7 */ CHAN_C|VCHAN_C|NONEOS_C,
596 /* 0xD8 */ CHAN_C|VCHAN_C|NONEOS_C,
597 /* 0xD9 */ CHAN_C|VCHAN_C|NONEOS_C,
598 /* 0xDA */ CHAN_C|VCHAN_C|NONEOS_C,
599 /* 0xDB */ CHAN_C|VCHAN_C|NONEOS_C,
600 /* 0xDC */ CHAN_C|VCHAN_C|NONEOS_C,
601 /* 0xDD */ CHAN_C|VCHAN_C|NONEOS_C,
602 /* 0xDE */ CHAN_C|VCHAN_C|NONEOS_C,
603 /* 0xDF */ CHAN_C|VCHAN_C|NONEOS_C,
604 /* 0xE0 */ CHAN_C|VCHAN_C|NONEOS_C,
605 /* 0xE1 */ CHAN_C|VCHAN_C|NONEOS_C,
606 /* 0xE2 */ CHAN_C|VCHAN_C|NONEOS_C,
607 /* 0xE3 */ CHAN_C|VCHAN_C|NONEOS_C,
608 /* 0xE4 */ CHAN_C|VCHAN_C|NONEOS_C,
609 /* 0xE5 */ CHAN_C|VCHAN_C|NONEOS_C,
610 /* 0xE6 */ CHAN_C|VCHAN_C|NONEOS_C,
611 /* 0xE7 */ CHAN_C|VCHAN_C|NONEOS_C,
612 /* 0xE8 */ CHAN_C|VCHAN_C|NONEOS_C,
613 /* 0xE9 */ CHAN_C|VCHAN_C|NONEOS_C,
614 /* 0xEA */ CHAN_C|VCHAN_C|NONEOS_C,
615 /* 0xEB */ CHAN_C|VCHAN_C|NONEOS_C,
616 /* 0xEC */ CHAN_C|VCHAN_C|NONEOS_C,
617 /* 0xED */ CHAN_C|VCHAN_C|NONEOS_C,
618 /* 0xEE */ CHAN_C|VCHAN_C|NONEOS_C,
619 /* 0xEF */ CHAN_C|VCHAN_C|NONEOS_C,
620 /* 0xF0 */ CHAN_C|VCHAN_C|NONEOS_C,
621 /* 0xF1 */ CHAN_C|VCHAN_C|NONEOS_C,
622 /* 0xF2 */ CHAN_C|VCHAN_C|NONEOS_C,
623 /* 0xF3 */ CHAN_C|VCHAN_C|NONEOS_C,
624 /* 0xF4 */ CHAN_C|VCHAN_C|NONEOS_C,
625 /* 0xF5 */ CHAN_C|VCHAN_C|NONEOS_C,
626 /* 0xF6 */ CHAN_C|VCHAN_C|NONEOS_C,
627 /* 0xF7 */ CHAN_C|VCHAN_C|NONEOS_C,
628 /* 0xF8 */ CHAN_C|VCHAN_C|NONEOS_C,
629 /* 0xF9 */ CHAN_C|VCHAN_C|NONEOS_C,
630 /* 0xFA */ CHAN_C|VCHAN_C|NONEOS_C,
631 /* 0xFB */ CHAN_C|VCHAN_C|NONEOS_C,
632 /* 0xFC */ CHAN_C|VCHAN_C|NONEOS_C,
633 /* 0xFD */ CHAN_C|VCHAN_C|NONEOS_C,
634 /* 0xFE */ CHAN_C|VCHAN_C|NONEOS_C,
635 /* 0xFF */ CHAN_C|VCHAN_C|NONEOS_C
636 };

Properties

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

svnadmin@ircd-hybrid.org
ViewVC Help
Powered by ViewVC 1.1.30