ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid-8/src/match.c
Revision: 1123
Committed: Sun Feb 6 21:57:50 2011 UTC (13 years, 2 months ago) by michael
Content type: text/x-csrc
Original Path: ircd-hybrid-7.3/src/match.c
File size: 22046 byte(s)
Log Message:
- Got rid of irc_addrinfo.c and irc_getnameinfo.c
- Fixed broken ipv6 detection due to incorrect use of AC_CHECK_TYPES

File Contents

# User Rev Content
1 adx 30 /************************************************************************
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 knight 31 * $Id$
20 adx 30 *
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 michael 484 if (*mask == '#')
192     {
193     if (*name != '#')
194     return 0;
195     ++name, ++mask;
196     }
197    
198     return match_esc(mask, name);
199 adx 30 }
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     str1++;
277     str2++;
278     }
279    
280     return 1;
281     }
282    
283     int
284     ircncmp(const char* s1, const char *s2, size_t n)
285     {
286     const unsigned char *str1 = (const unsigned char *) s1;
287     const unsigned char *str2 = (const unsigned char *) s2;
288     int res;
289    
290     assert(s1 != NULL);
291     assert(s2 != NULL);
292    
293     while ((res = ToUpper(*str1) - ToUpper(*str2)) == 0)
294     {
295     str1++, str2++, n--;
296     if (n == 0 || (*str1 == '\0' && *str2 == '\0'))
297     return 0;
298     }
299     return res;
300     }
301    
302     const unsigned char ToLowerTab[] = {
303     0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa,
304     0xb, 0xc, 0xd, 0xe, 0xf, 0x10, 0x11, 0x12, 0x13, 0x14,
305     0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d,
306     0x1e, 0x1f,
307     ' ', '!', '"', '#', '$', '%', '&', 0x27, '(', ')',
308     '*', '+', ',', '-', '.', '/',
309     '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
310     ':', ';', '<', '=', '>', '?',
311     '@', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
312     'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
313     't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~',
314     '_',
315     '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
316     'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's',
317     't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~',
318     0x7f,
319     0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
320     0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
321     0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
322     0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
323     0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9,
324     0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
325     0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9,
326     0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
327     0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9,
328     0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
329     0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9,
330     0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
331     0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,
332     0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
333     0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9,
334     0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
335     };
336    
337     const unsigned char ToUpperTab[] = {
338     0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9, 0xa,
339     0xb, 0xc, 0xd, 0xe, 0xf, 0x10, 0x11, 0x12, 0x13, 0x14,
340     0x15, 0x16, 0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d,
341     0x1e, 0x1f,
342     ' ', '!', '"', '#', '$', '%', '&', 0x27, '(', ')',
343     '*', '+', ',', '-', '.', '/',
344     '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
345     ':', ';', '<', '=', '>', '?',
346     '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
347     'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
348     'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^',
349     0x5f,
350     '`', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
351     'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
352     'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[', '\\', ']', '^',
353     0x7f,
354     0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
355     0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
356     0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99,
357     0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
358     0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, 0xa8, 0xa9,
359     0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
360     0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, 0xb8, 0xb9,
361     0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
362     0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 0xc8, 0xc9,
363     0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
364     0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7, 0xd8, 0xd9,
365     0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
366     0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7, 0xe8, 0xe9,
367     0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
368     0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9,
369     0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
370     };
371    
372     /*
373     * CharAttrs table
374     *
375     * NOTE: RFC 1459 sez: anything but a ^G, comma, or space is allowed
376     * for channel names
377     */
378     const unsigned int CharAttrs[] = {
379     /* 0 */ CNTRL_C,
380 db 633 /* 1 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
381 db 635 /* 2 */ CNTRL_C|CHAN_C|NONEOS_C,
382     /* 3 */ CNTRL_C|CHAN_C|NONEOS_C,
383 db 633 /* 4 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
384     /* 5 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
385     /* 6 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
386 adx 30 /* 7 BEL */ CNTRL_C|NONEOS_C,
387 db 633 /* 8 \b */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
388     /* 9 \t */ CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C,
389     /* 10 \n */ CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C|EOL_C,
390     /* 11 \v */ CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C,
391     /* 12 \f */ CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C,
392     /* 13 \r */ CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C|EOL_C,
393     /* 14 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
394 adx 637 /* 15 */ CNTRL_C|CHAN_C|NONEOS_C,
395 db 633 /* 16 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
396     /* 17 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
397     /* 18 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
398     /* 19 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
399     /* 20 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
400     /* 21 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
401 db 635 /* 22 */ CNTRL_C|CHAN_C|NONEOS_C,
402 db 633 /* 23 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
403     /* 24 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
404     /* 25 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
405     /* 26 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
406     /* 27 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
407     /* 28 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
408     /* 29 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
409     /* 30 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
410 db 635 /* 31 */ CNTRL_C|CHAN_C|NONEOS_C,
411 adx 30 /* SP */ PRINT_C|SPACE_C,
412 db 633 /* ! */ PRINT_C|KWILD_C|CHAN_C|VCHAN_C|NONEOS_C,
413     /* " */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
414     /* # */ PRINT_C|KWILD_C|MWILD_C|CHANPFX_C|CHAN_C|VCHAN_C|NONEOS_C,
415     /* $ */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
416     /* % */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
417     /* & */ PRINT_C|CHANPFX_C|CHAN_C|VCHAN_C|NONEOS_C,
418     /* ' */ PRINT_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|KWILD_C|MWILD_C|CHAN_C|VCHAN_C|NONEOS_C|SERV_C,
422     /* + */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
423 adx 30 /* , */ PRINT_C|NONEOS_C,
424 db 633 /* - */ PRINT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
425     /* . */ PRINT_C|KWILD_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C|SERV_C,
426     /* / */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
427     /* 0 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
428     /* 1 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
429     /* 2 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
430     /* 3 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
431     /* 4 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
432     /* 5 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
433     /* 6 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
434     /* 7 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
435     /* 8 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
436     /* 9 */ PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
437     /* : */ PRINT_C|KWILD_C|CHAN_C|VCHAN_C|NONEOS_C|HOST_C,
438     /* ; */ PRINT_C|CHAN_C|VCHAN_C|NONEOS_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|KWILD_C|MWILD_C|CHAN_C|VCHAN_C|NONEOS_C,
443     /* @ */ PRINT_C|KWILD_C|CHAN_C|VCHAN_C|NONEOS_C,
444     /* A */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
445     /* B */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
446     /* C */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
447     /* D */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
448     /* E */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
449     /* F */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
450     /* G */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
451     /* H */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
452     /* I */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
453     /* J */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
454     /* K */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
455     /* L */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
456     /* M */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
457     /* N */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
458     /* O */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
459     /* P */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
460     /* Q */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
461     /* R */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
462     /* S */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
463     /* T */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
464     /* U */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
465     /* V */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
466     /* W */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
467     /* X */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
468     /* Y */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
469     /* Z */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
470     /* [ */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_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|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
475     /* ` */ PRINT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
476     /* a */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
477     /* b */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
478     /* c */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
479     /* d */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
480     /* e */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
481     /* f */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
482     /* g */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
483     /* h */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
484     /* i */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
485     /* j */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
486     /* k */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
487     /* l */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
488     /* m */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
489     /* n */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
490     /* o */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
491     /* p */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
492     /* q */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
493     /* r */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
494     /* s */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
495     /* t */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
496     /* u */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
497     /* v */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
498     /* w */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
499     /* x */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
500     /* y */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
501     /* z */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
502     /* { */ PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_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|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
506     /* del */ CHAN_C|VCHAN_C|NONEOS_C,
507     /* 0x80 */ CHAN_C|VCHAN_C|NONEOS_C,
508     /* 0x81 */ CHAN_C|VCHAN_C|NONEOS_C,
509     /* 0x82 */ CHAN_C|VCHAN_C|NONEOS_C,
510     /* 0x83 */ CHAN_C|VCHAN_C|NONEOS_C,
511     /* 0x84 */ CHAN_C|VCHAN_C|NONEOS_C,
512     /* 0x85 */ CHAN_C|VCHAN_C|NONEOS_C,
513     /* 0x86 */ CHAN_C|VCHAN_C|NONEOS_C,
514     /* 0x87 */ CHAN_C|VCHAN_C|NONEOS_C,
515     /* 0x88 */ CHAN_C|VCHAN_C|NONEOS_C,
516     /* 0x89 */ CHAN_C|VCHAN_C|NONEOS_C,
517     /* 0x8A */ CHAN_C|VCHAN_C|NONEOS_C,
518     /* 0x8B */ CHAN_C|VCHAN_C|NONEOS_C,
519     /* 0x8C */ CHAN_C|VCHAN_C|NONEOS_C,
520     /* 0x8D */ CHAN_C|VCHAN_C|NONEOS_C,
521     /* 0x8E */ CHAN_C|VCHAN_C|NONEOS_C,
522     /* 0x8F */ CHAN_C|VCHAN_C|NONEOS_C,
523     /* 0x90 */ CHAN_C|VCHAN_C|NONEOS_C,
524     /* 0x91 */ CHAN_C|VCHAN_C|NONEOS_C,
525     /* 0x92 */ CHAN_C|VCHAN_C|NONEOS_C,
526     /* 0x93 */ CHAN_C|VCHAN_C|NONEOS_C,
527     /* 0x94 */ CHAN_C|VCHAN_C|NONEOS_C,
528     /* 0x95 */ CHAN_C|VCHAN_C|NONEOS_C,
529     /* 0x96 */ CHAN_C|VCHAN_C|NONEOS_C,
530     /* 0x97 */ CHAN_C|VCHAN_C|NONEOS_C,
531     /* 0x98 */ CHAN_C|VCHAN_C|NONEOS_C,
532     /* 0x99 */ CHAN_C|VCHAN_C|NONEOS_C,
533     /* 0x9A */ CHAN_C|VCHAN_C|NONEOS_C,
534     /* 0x9B */ CHAN_C|VCHAN_C|NONEOS_C,
535     /* 0x9C */ CHAN_C|VCHAN_C|NONEOS_C,
536     /* 0x9D */ CHAN_C|VCHAN_C|NONEOS_C,
537     /* 0x9E */ CHAN_C|VCHAN_C|NONEOS_C,
538     /* 0x9F */ CHAN_C|VCHAN_C|NONEOS_C,
539 db 635 /* 0xA0 */ CHAN_C|NONEOS_C,
540 db 633 /* 0xA1 */ CHAN_C|VCHAN_C|NONEOS_C,
541     /* 0xA2 */ CHAN_C|VCHAN_C|NONEOS_C,
542     /* 0xA3 */ CHAN_C|VCHAN_C|NONEOS_C,
543     /* 0xA4 */ CHAN_C|VCHAN_C|NONEOS_C,
544     /* 0xA5 */ CHAN_C|VCHAN_C|NONEOS_C,
545     /* 0xA6 */ CHAN_C|VCHAN_C|NONEOS_C,
546     /* 0xA7 */ CHAN_C|VCHAN_C|NONEOS_C,
547     /* 0xA8 */ CHAN_C|VCHAN_C|NONEOS_C,
548     /* 0xA9 */ CHAN_C|VCHAN_C|NONEOS_C,
549     /* 0xAA */ CHAN_C|VCHAN_C|NONEOS_C,
550     /* 0xAB */ CHAN_C|VCHAN_C|NONEOS_C,
551     /* 0xAC */ CHAN_C|VCHAN_C|NONEOS_C,
552     /* 0xAD */ CHAN_C|VCHAN_C|NONEOS_C,
553     /* 0xAE */ CHAN_C|VCHAN_C|NONEOS_C,
554     /* 0xAF */ CHAN_C|VCHAN_C|NONEOS_C,
555     /* 0xB0 */ CHAN_C|VCHAN_C|NONEOS_C,
556     /* 0xB1 */ CHAN_C|VCHAN_C|NONEOS_C,
557     /* 0xB2 */ CHAN_C|VCHAN_C|NONEOS_C,
558     /* 0xB3 */ CHAN_C|VCHAN_C|NONEOS_C,
559     /* 0xB4 */ CHAN_C|VCHAN_C|NONEOS_C,
560     /* 0xB5 */ CHAN_C|VCHAN_C|NONEOS_C,
561     /* 0xB6 */ CHAN_C|VCHAN_C|NONEOS_C,
562     /* 0xB7 */ CHAN_C|VCHAN_C|NONEOS_C,
563     /* 0xB8 */ CHAN_C|VCHAN_C|NONEOS_C,
564     /* 0xB9 */ CHAN_C|VCHAN_C|NONEOS_C,
565     /* 0xBA */ CHAN_C|VCHAN_C|NONEOS_C,
566     /* 0xBB */ CHAN_C|VCHAN_C|NONEOS_C,
567     /* 0xBC */ CHAN_C|VCHAN_C|NONEOS_C,
568     /* 0xBD */ CHAN_C|VCHAN_C|NONEOS_C,
569     /* 0xBE */ CHAN_C|VCHAN_C|NONEOS_C,
570     /* 0xBF */ CHAN_C|VCHAN_C|NONEOS_C,
571     /* 0xC0 */ CHAN_C|VCHAN_C|NONEOS_C,
572     /* 0xC1 */ CHAN_C|VCHAN_C|NONEOS_C,
573     /* 0xC2 */ CHAN_C|VCHAN_C|NONEOS_C,
574     /* 0xC3 */ CHAN_C|VCHAN_C|NONEOS_C,
575     /* 0xC4 */ CHAN_C|VCHAN_C|NONEOS_C,
576     /* 0xC5 */ CHAN_C|VCHAN_C|NONEOS_C,
577     /* 0xC6 */ CHAN_C|VCHAN_C|NONEOS_C,
578     /* 0xC7 */ CHAN_C|VCHAN_C|NONEOS_C,
579     /* 0xC8 */ CHAN_C|VCHAN_C|NONEOS_C,
580     /* 0xC9 */ CHAN_C|VCHAN_C|NONEOS_C,
581     /* 0xCA */ CHAN_C|VCHAN_C|NONEOS_C,
582     /* 0xCB */ CHAN_C|VCHAN_C|NONEOS_C,
583     /* 0xCC */ CHAN_C|VCHAN_C|NONEOS_C,
584     /* 0xCD */ CHAN_C|VCHAN_C|NONEOS_C,
585     /* 0xCE */ CHAN_C|VCHAN_C|NONEOS_C,
586     /* 0xCF */ CHAN_C|VCHAN_C|NONEOS_C,
587     /* 0xD0 */ CHAN_C|VCHAN_C|NONEOS_C,
588     /* 0xD1 */ CHAN_C|VCHAN_C|NONEOS_C,
589     /* 0xD2 */ CHAN_C|VCHAN_C|NONEOS_C,
590     /* 0xD3 */ CHAN_C|VCHAN_C|NONEOS_C,
591     /* 0xD4 */ CHAN_C|VCHAN_C|NONEOS_C,
592     /* 0xD5 */ CHAN_C|VCHAN_C|NONEOS_C,
593     /* 0xD6 */ CHAN_C|VCHAN_C|NONEOS_C,
594     /* 0xD7 */ CHAN_C|VCHAN_C|NONEOS_C,
595     /* 0xD8 */ CHAN_C|VCHAN_C|NONEOS_C,
596     /* 0xD9 */ CHAN_C|VCHAN_C|NONEOS_C,
597     /* 0xDA */ CHAN_C|VCHAN_C|NONEOS_C,
598     /* 0xDB */ CHAN_C|VCHAN_C|NONEOS_C,
599     /* 0xDC */ CHAN_C|VCHAN_C|NONEOS_C,
600     /* 0xDD */ CHAN_C|VCHAN_C|NONEOS_C,
601     /* 0xDE */ CHAN_C|VCHAN_C|NONEOS_C,
602     /* 0xDF */ CHAN_C|VCHAN_C|NONEOS_C,
603     /* 0xE0 */ CHAN_C|VCHAN_C|NONEOS_C,
604     /* 0xE1 */ CHAN_C|VCHAN_C|NONEOS_C,
605     /* 0xE2 */ CHAN_C|VCHAN_C|NONEOS_C,
606     /* 0xE3 */ CHAN_C|VCHAN_C|NONEOS_C,
607     /* 0xE4 */ CHAN_C|VCHAN_C|NONEOS_C,
608     /* 0xE5 */ CHAN_C|VCHAN_C|NONEOS_C,
609     /* 0xE6 */ CHAN_C|VCHAN_C|NONEOS_C,
610     /* 0xE7 */ CHAN_C|VCHAN_C|NONEOS_C,
611     /* 0xE8 */ CHAN_C|VCHAN_C|NONEOS_C,
612     /* 0xE9 */ CHAN_C|VCHAN_C|NONEOS_C,
613     /* 0xEA */ CHAN_C|VCHAN_C|NONEOS_C,
614     /* 0xEB */ CHAN_C|VCHAN_C|NONEOS_C,
615     /* 0xEC */ CHAN_C|VCHAN_C|NONEOS_C,
616     /* 0xED */ CHAN_C|VCHAN_C|NONEOS_C,
617     /* 0xEE */ CHAN_C|VCHAN_C|NONEOS_C,
618     /* 0xEF */ CHAN_C|VCHAN_C|NONEOS_C,
619     /* 0xF0 */ CHAN_C|VCHAN_C|NONEOS_C,
620     /* 0xF1 */ CHAN_C|VCHAN_C|NONEOS_C,
621     /* 0xF2 */ CHAN_C|VCHAN_C|NONEOS_C,
622     /* 0xF3 */ CHAN_C|VCHAN_C|NONEOS_C,
623     /* 0xF4 */ CHAN_C|VCHAN_C|NONEOS_C,
624     /* 0xF5 */ CHAN_C|VCHAN_C|NONEOS_C,
625     /* 0xF6 */ CHAN_C|VCHAN_C|NONEOS_C,
626     /* 0xF7 */ CHAN_C|VCHAN_C|NONEOS_C,
627     /* 0xF8 */ CHAN_C|VCHAN_C|NONEOS_C,
628     /* 0xF9 */ CHAN_C|VCHAN_C|NONEOS_C,
629     /* 0xFA */ CHAN_C|VCHAN_C|NONEOS_C,
630     /* 0xFB */ CHAN_C|VCHAN_C|NONEOS_C,
631     /* 0xFC */ CHAN_C|VCHAN_C|NONEOS_C,
632     /* 0xFD */ CHAN_C|VCHAN_C|NONEOS_C,
633     /* 0xFE */ CHAN_C|VCHAN_C|NONEOS_C,
634     /* 0xFF */ CHAN_C|VCHAN_C|NONEOS_C
635 adx 30 };

Properties

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