ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/trunk/src/match.c
Revision: 1592
Committed: Sat Oct 27 21:02:32 2012 UTC (13 years, 8 months ago) by michael
Content type: text/x-csrc
File size: 21462 byte(s)
Log Message:
- Second time's the charm? Moving svnroot/ircd-hybrid-8 to
  svnroot/ircd-hybrid/trunk

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

Properties

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