ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid-7.2/src/match.c
Revision: 637
Committed: Thu Jun 1 14:00:50 2006 UTC (19 years, 2 months ago) by adx
Content type: text/x-csrc
File size: 22075 byte(s)
Log Message:
+ added invisible character ^O (cancel all formatting)

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 "irc_getaddrinfo.h"
26     #include "client.h"
27     #include "ircd.h"
28    
29     /* Fix "statement not reached" warnings on Sun WorkShop C */
30     #ifdef __SUNPRO_C
31     # pragma error_messages(off, E_STATEMENT_NOT_REACHED)
32     #endif
33    
34     /* match()
35     *
36     * Compare if a given string (name) matches the given
37     * mask (which can contain wild cards: '*' - match any
38     * number of chars, '?' - match any single character.
39     *
40     * return 1, if match
41     * 0, if no match
42     *
43     * Originally by Douglas A Lewis (dalewis@acsu.buffalo.edu)
44     */
45     int
46     match(const char *mask, const char *name)
47     {
48     const unsigned char* m = (const unsigned char *) mask;
49     const unsigned char* n = (const unsigned char *) name;
50     const unsigned char* ma = NULL;
51     const unsigned char* na = (const unsigned char *) name;
52    
53     assert(mask != NULL);
54     assert(name != NULL);
55    
56     while (1)
57     {
58     if (*m == '*')
59     {
60     /*
61     * XXX - shouldn't need to spin here, the mask should have been
62     * collapsed before match is called
63     */
64     while (*m == '*')
65     m++;
66     ma = m;
67     na = n;
68     }
69    
70     if (!*m)
71     {
72     if (!*n)
73     return 1;
74     if (!ma)
75     return 0;
76     for (m--; (m > (const unsigned char*) mask) && (*m == '?'); m--)
77     ;
78     if (*m == '*')
79     return 1;
80     m = ma;
81     n = ++na;
82     }
83     else if (!*n)
84     {
85     /*
86     * XXX - shouldn't need to spin here, the mask should have been
87     * collapsed before match is called
88     */
89     while (*m == '*')
90     m++;
91     return (*m == 0);
92     }
93    
94     if (ToLower(*m) != ToLower(*n) && *m != '?' && (*m != '#' || !IsDigit(*n)))
95     {
96     if (!ma)
97     return 0;
98     m = ma;
99     n = ++na;
100     }
101     else
102     m++, n++;
103     }
104    
105     return 0;
106     }
107    
108     /* match_esc()
109     *
110     * The match() function with support for escaping characters such
111     * as '*' and '?'
112     */
113     int
114     match_esc(const char *mask, const char *name)
115     {
116     const unsigned char *m = (const unsigned char *) mask;
117     const unsigned char *n = (const unsigned char *) name;
118     const unsigned char *ma = NULL;
119     const unsigned char *na = (const unsigned char *) name;
120    
121     assert(mask != NULL);
122     assert(name != NULL);
123    
124     while (1)
125     {
126     if (*m == '*')
127     {
128     /*
129     * XXX - shouldn't need to spin here, the mask should have been
130     * collapsed before match is called
131     */
132     while (*m == '*')
133     m++;
134     ma = m;
135     na = n;
136     }
137    
138     if (!*m)
139     {
140     if (!*n)
141     return 1;
142     if (!ma)
143     return 0;
144     for (m--; (m > (const unsigned char*) mask) && (*m == '?'); m--)
145     ;
146     if (*m == '*')
147     return 1;
148     m = ma;
149     n = ++na;
150     }
151     else if (!*n)
152     {
153     /*
154     * XXX - shouldn't need to spin here, the mask should have been
155     * collapsed before match is called
156     */
157     while (*m == '*')
158     m++;
159     return (*m == 0);
160     }
161    
162     if (*m != '?' && (*m != '#' || IsDigit(*n)))
163     {
164     if (*m == '\\')
165     if (!*++m)
166     return 0;
167     if (ToLower(*m) != ToLower(*n))
168     {
169     if (!ma)
170     return 0;
171     m = ma;
172     n = ++na;
173     }
174     else
175     m++, n++;
176     }
177     else
178     m++, n++;
179     }
180    
181     return 0;
182     }
183    
184     /* match_chan()
185     *
186     * The match_esc() function doing channel prefix auto-escape,
187     * ie. mask: #blah*blah is seen like \#blah*blah
188     */
189     int
190     match_chan(const char *mask, const char *name)
191     {
192 michael 484 if (*mask == '#')
193     {
194     if (*name != '#')
195     return 0;
196     ++name, ++mask;
197     }
198    
199     return match_esc(mask, name);
200 adx 30 }
201    
202     /* collapse()
203     *
204     * collapses a string containing multiple *'s.
205     */
206     char *
207     collapse(char *pattern)
208     {
209     char *p = pattern, *po = pattern;
210     char c;
211    
212     if (p == NULL)
213     return NULL;
214    
215     while ((c = *p++))
216     {
217     if (c != '*')
218     *po++ = c;
219     else if (*p != '*')
220     *po++ = '*';
221     }
222    
223     *po = 0;
224    
225     return pattern;
226     }
227    
228     /* collapse_esc()
229     *
230     * The collapse() function with support for escaping characters
231     */
232     char *
233     collapse_esc(char *pattern)
234     {
235     char *p = pattern, *po = pattern;
236     char c;
237    
238     if (p == NULL)
239     return NULL;
240    
241     while ((c = *p++))
242     {
243     if (c != '*')
244     {
245     *po++ = c;
246     if (c == '\\' && *p)
247     *po++ = *p++;
248     }
249     else if (*p != '*')
250     *po++ = '*';
251     }
252    
253     *po = 0;
254    
255     return pattern;
256     }
257    
258     /*
259     * irccmp - case insensitive comparison of two 0 terminated strings.
260     *
261     * returns 0, if s1 equal to s2
262     * 1, if not
263     */
264     int
265     irccmp(const char *s1, const char *s2)
266     {
267     const unsigned char *str1 = (const unsigned char *) s1;
268     const unsigned char *str2 = (const unsigned char *) s2;
269    
270     assert(s1 != NULL);
271     assert(s2 != NULL);
272    
273     while (ToUpper(*str1) == ToUpper(*str2))
274     {
275     if (*str1 == '\0')
276     return 0;
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 db 633 /* 1 */ CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
382 db 635 /* 2 */ CNTRL_C|CHAN_C|NONEOS_C,
383     /* 3 */ CNTRL_C|CHAN_C|NONEOS_C,
384 db 633 /* 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 adx 30 /* 7 BEL */ CNTRL_C|NONEOS_C,
388 db 633 /* 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 adx 637 /* 15 */ CNTRL_C|CHAN_C|NONEOS_C,
396 db 633 /* 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 db 635 /* 22 */ CNTRL_C|CHAN_C|NONEOS_C,
403 db 633 /* 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 db 635 /* 31 */ CNTRL_C|CHAN_C|NONEOS_C,
412 adx 30 /* SP */ PRINT_C|SPACE_C,
413 db 633 /* ! */ 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 adx 30 /* , */ PRINT_C|NONEOS_C,
425 db 633 /* - */ 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 db 635 /* 0xA0 */ CHAN_C|NONEOS_C,
541 db 633 /* 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 adx 30 };

Properties

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