ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/trunk/src/match.c
Revision: 1399
Committed: Mon May 7 19:32:01 2012 UTC (13 years, 3 months ago) by michael
Content type: text/x-csrc
Original Path: ircd-hybrid-8/src/match.c
File size: 21485 byte(s)
Log Message:
- match(), match_esc(): remove XXX-comment. Bad idea to have
  match() rely on collapse()

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

Properties

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