ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/trunk/src/match.c
(Generate patch)

Comparing:
ircd-hybrid/src/match.c (file contents), Revision 30 by adx, Sun Oct 2 20:03:27 2005 UTC vs.
ircd-hybrid/trunk/src/match.c (file contents), Revision 1666 by michael, Sun Nov 18 17:03:18 2012 UTC

# Line 16 | Line 16
16   *   along with this program; if not, write to the Free Software
17   *   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18   *
19 < * $Id: match.c,v 7.44 2005/08/14 07:26:45 michael Exp $
19 > * $Id$
20   *
21   */
22  
23   #include "stdinc.h"
24   #include "irc_string.h"
25 #include "irc_getaddrinfo.h"
26 #include "client.h"
25   #include "ircd.h"
26  
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 }
27  
28 < /* match_esc()
29 < *
30 < * The match() function with support for escaping characters such
31 < * as '*' and '?'
28 > /*! \brief Check a string against a mask.
29 > * This test checks using traditional IRC wildcards only: '*' means
30 > * match zero or more characters of any type; '?' means match exactly
31 > * one character of any type.  A backslash escapes the next character
32 > * so that a wildcard may be matched exactly.
33 > * param mask Wildcard-containing mask.
34 > * param name String to check against \a mask.
35 > * return Zero if \a mask matches \a name, non-zero if no match.
36   */
37   int
38 < match_esc(const char *mask, const char *name)
38 > match(const char *mask, const char *name)
39   {
40 <  const unsigned char *m = (const unsigned char *) mask;
41 <  const unsigned char *n = (const unsigned char *) name;
42 <  const unsigned char *ma = NULL;
119 <  const unsigned char *na = (const unsigned char *) name;
120 <
121 <  assert(mask != NULL);
122 <  assert(name != NULL);
40 >  const char *m = mask, *n = name;
41 >  const char *m_tmp = mask, *n_tmp = name;
42 >  int star = 0;
43  
44    while (1)
45    {
46 <    if (*m == '*')
46 >    switch (*m)
47      {
48 <      /*
49 <       * XXX - shouldn't need to spin here, the mask should have been
50 <       * collapsed before match is called
51 <       */
52 <      while (*m == '*')
48 >      case '\0':
49 >        if (!*n)
50 >          return 0;
51 >  backtrack:
52 >        if (m_tmp == mask)
53 >          return 1;
54 >        m = m_tmp;
55 >        n = ++n_tmp;
56 >        if (*n == '\0')
57 >          return 1;
58 >        break;
59 >      case '\\':
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 <      for (m--; (m > (const unsigned char*) mask) && (*m == '?'); m--)
72 <        ;
73 <      if (*m == '*')
74 <        return 1;
75 <      m = ma;
76 <      n = ++na;
77 <    }
78 <    else if (!*n)
79 <    {
80 <      /*
81 <       * XXX - shouldn't need to spin here, the mask should have been
82 <       * collapsed before match is called
83 <       */
84 <      while (*m == '*')
61 >        /* allow escaping to force capitalization */
62 >        if (*m++ != *n++)
63 >          goto backtrack;
64 >        break;
65 >      case '*':
66 >      case '?':
67 >        for (star = 0; ; m++)
68 >        {
69 >          if (*m == '*')
70 >            star = 1;
71 >          else if (*m == '?')
72 >          {
73 >            if (!*n++)
74 >              goto backtrack;
75 >          }
76 >          else
77 >            break;
78 >        }
79 >
80 >        if (star)
81 >        {
82 >          if (!*m)
83 >            return 0;
84 >          else if (*m == '\\')
85 >          {
86 >            m_tmp = ++m;
87 >            if (!*m)
88 >              return 1;
89 >            for (n_tmp = n; *n && *n != *m; n++)
90 >              ;
91 >          }
92 >          else
93 >          {
94 >            m_tmp = m;
95 >            for (n_tmp = n; *n && ToLower(*n) != ToLower(*m); n++)
96 >              ;
97 >          }
98 >        }
99 >        /* and fall through */
100 >      default:
101 >        if (!*n)
102 >          return *m != '\0';
103 >        if (ToLower(*m) != ToLower(*n))
104 >          goto backtrack;
105          m++;
106 <      return (*m == 0);
107 <    }
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++;
106 >        n++;
107 >        break;
108      }
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  return *mask ? (*mask == *name && match_esc(mask + 1, name + 1)) : !*name;
193 }
194
195 static inline int
196 comp_with_mask(void *addr, void *dest, unsigned int mask)
197 {
198  if (memcmp(addr, dest, mask / 8) == 0)
199  {
200    int n = mask / 8;
201    int m = ((-1) << (8 - (mask % 8)));
202
203    if (mask % 8 == 0 ||
204       (((unsigned char *) addr)[n] & m) == (((unsigned char *) dest)[n] & m))  
205      return 1;
109    }
110  
111 <  return 0;
111 >  return 1;
112   }
113  
114 < /* match_cidr()
115 < *
116 < * Input - mask, address
117 < * Output - 1 = Matched 0 = Did not match
114 > /*
115 > * collapse()
116 > * Collapse a pattern string into minimal components.
117 > * This particular version is "in place", so that it changes the pattern
118 > * which is to be reduced to a "minimal" size.
119 > *
120 > * (C) Carlo Wood - 6 Oct 1998
121 > * Speedup rewrite by Andrea Cocito, December 1998.
122 > * Note that this new optimized algorithm can *only* work in place.
123   */
216 int
217 match_cidr(const char *s1, const char *s2)
218 {
219  struct irc_ssaddr ipaddr, maskaddr;
220  char address[NICKLEN + USERLEN + HOSTLEN + 6];
221  char mask[NICKLEN + USERLEN + HOSTLEN + 6];
222  char *ipmask, *ip, *len;
223  int cidrlen, offset;
224  struct addrinfo hints, *res;
225  
226  /* Unlikely to ever overflow, but we may as well be consistant - stu */
227  strlcpy(mask, s1, sizeof(mask));
228  strlcpy(address, s2, sizeof(address));
229  
230  ipmask = strrchr(mask, '@');
231  if (ipmask == NULL)
232    return 0;
233  
234  *ipmask++ = '\0';
235  
236  ip = strrchr(address, '@');
237  if (ip == NULL)
238    return 0;
239  *ip++ = '\0';
240  
241  len = strrchr(ipmask, '/');
242  if (len == NULL)
243    return 0;
244  
245  *len++ = '\0';
246  
247  cidrlen = atoi(len);
248  if (cidrlen == 0)
249    return 0;
250
251  memset(&hints, 0, sizeof(hints));
252  hints.ai_family = AF_UNSPEC;
253  hints.ai_flags = AI_NUMERICHOST;
254
255  irc_getaddrinfo(ip, NULL, &hints, &res);
256  if (!res)
257    return 0;
258
259 #ifdef INET6
260  if (res->ai_family == AF_INET)
261    offset = offsetof(struct sockaddr_in, sin_addr);
262  else if (res->ai_family == AF_INET6)
263    offset = offsetof(struct sockaddr_in6, sin6_addr);
264  else
265    return 0;
266 #else
267  offset = offsetof(struct sockaddr_in, sin_addr);
268 #endif
269
270  memcpy(&ipaddr, res->ai_addr, res->ai_addrlen);
271  ipaddr.ss_len = res->ai_addrlen;
272  irc_freeaddrinfo(res);
273
274  if (cidrlen > ipaddr.ss_len * 8)
275    return 0;
276
277  irc_getaddrinfo(ipmask, NULL, &hints, &res);
278  if (!res)
279    return 0;
280
281  memcpy(&maskaddr, res->ai_addr, res->ai_addrlen);
282  maskaddr.ss_len = res->ai_addrlen;
283  irc_freeaddrinfo(res);
284
285  if (maskaddr.ss_len != ipaddr.ss_len)
286    return 0;
287
288  return (comp_with_mask(((char *) &ipaddr) + offset, ((char *) &maskaddr) +
289    offset, cidrlen) && match(mask, address));
290 }
124  
125 < /* collapse()
126 < *
127 < * collapses a string containing multiple *'s.
125 > /*! \brief Collapse a mask string to remove redundancies.
126 > * Specifically, it replaces a sequence of '*' followed by additional
127 > * '*' or '?' with the same number of '?'s as the input, followed by
128 > * one '*'.  This minimizes useless backtracking when matching later.
129 > * \param mask Mask string to collapse.
130 > * \return Pointer to the start of the string.
131   */
132   char *
133 < collapse(char *pattern)
133 > collapse(char *mask)
134   {
135 <  char *p = pattern, *po = pattern;
136 <  char c;
135 >  int star = 0;
136 >  char *m = mask;
137 >  char *b = NULL;
138  
139 <  if (p == NULL)
303 <    return NULL;
304 <
305 <  while ((c = *p++))
139 >  if (m)
140    {
141 <    if (c != '*')
142 <      *po++ = c;
143 <    else if (*p != '*')
144 <      *po++ = '*';
145 <  }
312 <
313 <  *po = 0;
314 <
315 <  return pattern;
316 < }
317 <
318 < /* collapse_esc()
319 < *
320 < * The collapse() function with support for escaping characters
321 < */
322 < char *
323 < collapse_esc(char *pattern)
324 < {
325 <  char *p = pattern, *po = pattern;
326 <  char c;
141 >    do
142 >    {
143 >      if ((*m == '*') && ((m[1] == '*') || (m[1] == '?')))
144 >      {
145 >        b = m;
146  
147 <  if (p == NULL)
148 <    return NULL;
147 >        do
148 >        {
149 >          if (*m == '*')
150 >            star = 1;
151 >          else
152 >          {
153 >            if (star && (*m != '?'))
154 >            {
155 >              *b++ = '*';
156 >              star = 0;
157 >            }
158 >
159 >            *b++ = *m;
160 >
161 >            if ((*m == '\\') && ((m[1] == '*') || (m[1] == '?')))
162 >              *b++ = *++m;
163 >          }
164 >        } while (*m++);
165  
166 <  while ((c = *p++))
167 <  {
168 <    if (c != '*')
169 <    {
170 <      *po++ = c;
171 <      if (c == '\\' && *p)
172 <        *po++ = *p++;
173 <    }
339 <    else if (*p != '*')
340 <      *po++ = '*';
166 >        break;
167 >      }
168 >      else
169 >      {
170 >        if ((*m == '\\') && ((m[1] == '*') || (m[1] == '?')))
171 >          m++;
172 >      }
173 >    } while (*m++);
174    }
175  
176 <  *po = 0;
344 <
345 <  return pattern;
176 >  return mask;
177   }
178  
179   /*
# Line 354 | Line 185 | collapse_esc(char *pattern)
185   int
186   irccmp(const char *s1, const char *s2)
187   {
188 <  const unsigned char *str1 = (const unsigned char *) s1;
189 <  const unsigned char *str2 = (const unsigned char *) s2;
188 >  const unsigned char *str1 = (const unsigned char *)s1;
189 >  const unsigned char *str2 = (const unsigned char *)s2;
190  
191    assert(s1 != NULL);
192    assert(s2 != NULL);
193    
194 <  while (ToUpper(*str1) == ToUpper(*str2))
364 <  {
194 >  for (; ToUpper(*str1) == ToUpper(*str2); ++str1, ++str2)
195      if (*str1 == '\0')
196        return 0;
367    str1++;
368    str2++;
369  }
197  
198    return 1;
199   }
200  
201   int
202 < ircncmp(const char* s1, const char *s2, size_t n)
202 > ircncmp(const char *s1, const char *s2, size_t n)
203   {
204 <  const unsigned char *str1 = (const unsigned char *) s1;
205 <  const unsigned char *str2 = (const unsigned char *) s2;
379 <  int res;
204 >  const unsigned char *str1 = (const unsigned char *)s1;
205 >  const unsigned char *str2 = (const unsigned char *)s2;
206  
207    assert(s1 != NULL);
208    assert(s2 != NULL);
209 +  assert(n > 0);
210  
211 <  while ((res = ToUpper(*str1) - ToUpper(*str2)) == 0)
212 <  {
213 <    str1++, str2++, n--;
214 <    if (n == 0 || (*str1 == '\0' && *str2 == '\0'))
211 >  if (n == 0)
212 >    return 0;
213 >
214 >  for (; ToUpper(*str1) == ToUpper(*str2); ++str1, ++str2)
215 >    if (--n == 0 || *str1 == '\0')
216        return 0;
217 <  }
218 <  return res;
217 >
218 >  return 1;
219   }
220  
221   const unsigned char ToLowerTab[] = {
# Line 468 | Line 296 | const unsigned char ToUpperTab[] = {
296   */
297   const unsigned int CharAttrs[] = {
298   /* 0  */     CNTRL_C,
299 < /* 1  */     CNTRL_C|CHAN_C|NONEOS_C,
299 > /* 1  */     CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
300   /* 2  */     CNTRL_C|CHAN_C|NONEOS_C,
301   /* 3  */     CNTRL_C|CHAN_C|NONEOS_C,
302 < /* 4  */     CNTRL_C|CHAN_C|NONEOS_C,
303 < /* 5  */     CNTRL_C|CHAN_C|NONEOS_C,
304 < /* 6  */     CNTRL_C|CHAN_C|NONEOS_C,
302 > /* 4  */     CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
303 > /* 5  */     CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
304 > /* 6  */     CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
305   /* 7 BEL */  CNTRL_C|NONEOS_C,
306 < /* 8  \b */  CNTRL_C|CHAN_C|NONEOS_C,
307 < /* 9  \t */  CNTRL_C|SPACE_C|CHAN_C|NONEOS_C,
308 < /* 10 \n */  CNTRL_C|SPACE_C|CHAN_C|NONEOS_C|EOL_C,
309 < /* 11 \v */  CNTRL_C|SPACE_C|CHAN_C|NONEOS_C,
310 < /* 12 \f */  CNTRL_C|SPACE_C|CHAN_C|NONEOS_C,
311 < /* 13 \r */  CNTRL_C|SPACE_C|CHAN_C|NONEOS_C|EOL_C,
312 < /* 14 */     CNTRL_C|CHAN_C|NONEOS_C,
306 > /* 8  \b */  CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
307 > /* 9  \t */  CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C,
308 > /* 10 \n */  CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C|EOL_C,
309 > /* 11 \v */  CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C,
310 > /* 12 \f */  CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C,
311 > /* 13 \r */  CNTRL_C|SPACE_C|CHAN_C|VCHAN_C|NONEOS_C|EOL_C,
312 > /* 14 */     CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
313   /* 15 */     CNTRL_C|CHAN_C|NONEOS_C,
314 < /* 16 */     CNTRL_C|CHAN_C|NONEOS_C,
315 < /* 17 */     CNTRL_C|CHAN_C|NONEOS_C,
316 < /* 18 */     CNTRL_C|CHAN_C|NONEOS_C,
317 < /* 19 */     CNTRL_C|CHAN_C|NONEOS_C,
318 < /* 20 */     CNTRL_C|CHAN_C|NONEOS_C,
319 < /* 21 */     CNTRL_C|CHAN_C|NONEOS_C,
314 > /* 16 */     CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
315 > /* 17 */     CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
316 > /* 18 */     CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
317 > /* 19 */     CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
318 > /* 20 */     CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
319 > /* 21 */     CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
320   /* 22 */     CNTRL_C|CHAN_C|NONEOS_C,
321 < /* 23 */     CNTRL_C|CHAN_C|NONEOS_C,
322 < /* 24 */     CNTRL_C|CHAN_C|NONEOS_C,
323 < /* 25 */     CNTRL_C|CHAN_C|NONEOS_C,
324 < /* 26 */     CNTRL_C|CHAN_C|NONEOS_C,
325 < /* 27 */     CNTRL_C|CHAN_C|NONEOS_C,
326 < /* 28 */     CNTRL_C|CHAN_C|NONEOS_C,
321 > /* 23 */     CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
322 > /* 24 */     CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
323 > /* 25 */     CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
324 > /* 26 */     CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
325 > /* 27 */     CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
326 > /* 28 */     CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
327   /* 29 */     CNTRL_C|CHAN_C|NONEOS_C,
328 < /* 30 */     CNTRL_C|CHAN_C|NONEOS_C,
328 > /* 30 */     CNTRL_C|CHAN_C|VCHAN_C|NONEOS_C,
329   /* 31 */     CNTRL_C|CHAN_C|NONEOS_C,
330   /* SP */     PRINT_C|SPACE_C,
331 < /* ! */      PRINT_C|KWILD_C|CHAN_C|NONEOS_C,
332 < /* " */      PRINT_C|CHAN_C|NONEOS_C,
333 < /* # */      PRINT_C|KWILD_C|MWILD_C|CHANPFX_C|CHAN_C|NONEOS_C,
334 < /* $ */      PRINT_C|CHAN_C|NONEOS_C|USER_C,
335 < /* % */      PRINT_C|CHAN_C|NONEOS_C,
336 < /* & */      PRINT_C|CHANPFX_C|CHAN_C|NONEOS_C,
337 < /* ' */      PRINT_C|CHAN_C|NONEOS_C,
338 < /* ( */      PRINT_C|CHAN_C|NONEOS_C,
339 < /* ) */      PRINT_C|CHAN_C|NONEOS_C,
340 < /* * */      PRINT_C|KWILD_C|MWILD_C|CHAN_C|NONEOS_C|SERV_C,
341 < /* + */      PRINT_C|CHAN_C|NONEOS_C,
331 > /* ! */      PRINT_C|KWILD_C|CHAN_C|VCHAN_C|NONEOS_C,
332 > /* " */      PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
333 > /* # */      PRINT_C|KWILD_C|CHANPFX_C|CHAN_C|VCHAN_C|NONEOS_C,
334 > /* $ */      PRINT_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
335 > /* % */      PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
336 > /* & */      PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
337 > /* ' */      PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
338 > /* ( */      PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
339 > /* ) */      PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
340 > /* * */      PRINT_C|KWILD_C|MWILD_C|CHAN_C|VCHAN_C|NONEOS_C|SERV_C,
341 > /* + */      PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
342   /* , */      PRINT_C|NONEOS_C,
343 < /* - */      PRINT_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
344 < /* . */      PRINT_C|KWILD_C|CHAN_C|NONEOS_C|USER_C|HOST_C|SERV_C,
345 < /* / */      PRINT_C|CHAN_C|NONEOS_C,
346 < /* 0 */      PRINT_C|DIGIT_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
347 < /* 1 */      PRINT_C|DIGIT_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
348 < /* 2 */      PRINT_C|DIGIT_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
349 < /* 3 */      PRINT_C|DIGIT_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
350 < /* 4 */      PRINT_C|DIGIT_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
351 < /* 5 */      PRINT_C|DIGIT_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
352 < /* 6 */      PRINT_C|DIGIT_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
353 < /* 7 */      PRINT_C|DIGIT_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
354 < /* 8 */      PRINT_C|DIGIT_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
355 < /* 9 */      PRINT_C|DIGIT_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
356 < /* : */      PRINT_C|KWILD_C|CHAN_C|NONEOS_C|HOST_C,
357 < /* ; */      PRINT_C|CHAN_C|NONEOS_C,
358 < /* < */      PRINT_C|CHAN_C|NONEOS_C,
359 < /* = */      PRINT_C|CHAN_C|NONEOS_C,
360 < /* > */      PRINT_C|CHAN_C|NONEOS_C,
361 < /* ? */      PRINT_C|KWILD_C|MWILD_C|CHAN_C|NONEOS_C,
362 < /* @ */      PRINT_C|KWILD_C|CHAN_C|NONEOS_C,
363 < /* A */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
364 < /* B */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
365 < /* C */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
366 < /* D */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
367 < /* E */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
368 < /* F */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
369 < /* G */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
370 < /* H */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
371 < /* I */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
372 < /* J */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
373 < /* K */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
374 < /* L */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
375 < /* M */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
376 < /* N */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
377 < /* O */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
378 < /* P */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
379 < /* Q */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
380 < /* R */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
381 < /* S */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
382 < /* T */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
383 < /* U */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
384 < /* V */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
385 < /* W */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
386 < /* X */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
387 < /* Y */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
388 < /* Z */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
389 < /* [ */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C,
390 < /* \ */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C,
391 < /* ] */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C,
392 < /* ^ */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C,
393 < /* _ */      PRINT_C|NICK_C|CHAN_C|NONEOS_C|USER_C,
394 < /* ` */      PRINT_C|NICK_C|CHAN_C|NONEOS_C|USER_C,
395 < /* a */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
396 < /* b */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
397 < /* c */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
398 < /* d */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
399 < /* e */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
400 < /* f */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
401 < /* g */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
402 < /* h */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
403 < /* i */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
404 < /* j */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
405 < /* k */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
406 < /* l */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
407 < /* m */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
408 < /* n */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
409 < /* o */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
410 < /* p */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
411 < /* q */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
412 < /* r */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
413 < /* s */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
414 < /* t */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
415 < /* u */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
416 < /* v */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
417 < /* w */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
418 < /* x */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
419 < /* y */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
420 < /* z */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C|HOST_C,
421 < /* { */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C,
422 < /* | */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C,
423 < /* } */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|NONEOS_C|USER_C,
424 < /* ~ */      PRINT_C|ALPHA_C|CHAN_C|NONEOS_C|USER_C,
425 < /* del  */   CHAN_C|NONEOS_C,
426 < /* 0x80 */   CHAN_C|NONEOS_C,
427 < /* 0x81 */   CHAN_C|NONEOS_C,
428 < /* 0x82 */   CHAN_C|NONEOS_C,
429 < /* 0x83 */   CHAN_C|NONEOS_C,
430 < /* 0x84 */   CHAN_C|NONEOS_C,
431 < /* 0x85 */   CHAN_C|NONEOS_C,
432 < /* 0x86 */   CHAN_C|NONEOS_C,
433 < /* 0x87 */   CHAN_C|NONEOS_C,
434 < /* 0x88 */   CHAN_C|NONEOS_C,
435 < /* 0x89 */   CHAN_C|NONEOS_C,
436 < /* 0x8A */   CHAN_C|NONEOS_C,
437 < /* 0x8B */   CHAN_C|NONEOS_C,
438 < /* 0x8C */   CHAN_C|NONEOS_C,
439 < /* 0x8D */   CHAN_C|NONEOS_C,
440 < /* 0x8E */   CHAN_C|NONEOS_C,
441 < /* 0x8F */   CHAN_C|NONEOS_C,
442 < /* 0x90 */   CHAN_C|NONEOS_C,
443 < /* 0x91 */   CHAN_C|NONEOS_C,
444 < /* 0x92 */   CHAN_C|NONEOS_C,
445 < /* 0x93 */   CHAN_C|NONEOS_C,
446 < /* 0x94 */   CHAN_C|NONEOS_C,
447 < /* 0x95 */   CHAN_C|NONEOS_C,
448 < /* 0x96 */   CHAN_C|NONEOS_C,
449 < /* 0x97 */   CHAN_C|NONEOS_C,
450 < /* 0x98 */   CHAN_C|NONEOS_C,
451 < /* 0x99 */   CHAN_C|NONEOS_C,
452 < /* 0x9A */   CHAN_C|NONEOS_C,
453 < /* 0x9B */   CHAN_C|NONEOS_C,
454 < /* 0x9C */   CHAN_C|NONEOS_C,
455 < /* 0x9D */   CHAN_C|NONEOS_C,
456 < /* 0x9E */   CHAN_C|NONEOS_C,
457 < /* 0x9F */   CHAN_C|NONEOS_C,
343 > /* - */      PRINT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
344 > /* . */      PRINT_C|KWILD_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C|SERV_C,
345 > /* / */      PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
346 > /* 0 */      PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
347 > /* 1 */      PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
348 > /* 2 */      PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
349 > /* 3 */      PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
350 > /* 4 */      PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
351 > /* 5 */      PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
352 > /* 6 */      PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
353 > /* 7 */      PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
354 > /* 8 */      PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
355 > /* 9 */      PRINT_C|DIGIT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
356 > /* : */      PRINT_C|KWILD_C|CHAN_C|VCHAN_C|NONEOS_C|HOST_C,
357 > /* ; */      PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
358 > /* < */      PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
359 > /* = */      PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
360 > /* > */      PRINT_C|CHAN_C|VCHAN_C|NONEOS_C,
361 > /* ? */      PRINT_C|KWILD_C|MWILD_C|CHAN_C|VCHAN_C|NONEOS_C,
362 > /* @ */      PRINT_C|KWILD_C|CHAN_C|VCHAN_C|NONEOS_C,
363 > /* A */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
364 > /* B */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
365 > /* C */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
366 > /* D */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
367 > /* E */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
368 > /* F */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
369 > /* G */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
370 > /* H */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
371 > /* I */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
372 > /* J */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
373 > /* K */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
374 > /* L */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
375 > /* M */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
376 > /* N */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
377 > /* O */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
378 > /* P */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
379 > /* Q */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
380 > /* R */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
381 > /* S */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
382 > /* T */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
383 > /* U */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
384 > /* V */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
385 > /* W */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
386 > /* X */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
387 > /* Y */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
388 > /* Z */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
389 > /* [ */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
390 > /* \ */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
391 > /* ] */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
392 > /* ^ */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
393 > /* _ */      PRINT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
394 > /* ` */      PRINT_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
395 > /* a */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
396 > /* b */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
397 > /* c */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
398 > /* d */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
399 > /* e */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
400 > /* f */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
401 > /* g */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
402 > /* h */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
403 > /* i */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
404 > /* j */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
405 > /* k */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
406 > /* l */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
407 > /* m */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
408 > /* n */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
409 > /* o */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
410 > /* p */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
411 > /* q */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
412 > /* r */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
413 > /* s */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
414 > /* t */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
415 > /* u */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
416 > /* v */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
417 > /* w */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
418 > /* x */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
419 > /* y */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
420 > /* z */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C|HOST_C,
421 > /* { */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
422 > /* | */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
423 > /* } */      PRINT_C|ALPHA_C|NICK_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
424 > /* ~ */      PRINT_C|ALPHA_C|CHAN_C|VCHAN_C|NONEOS_C|USER_C,
425 > /* del  */   CHAN_C|VCHAN_C|NONEOS_C,
426 > /* 0x80 */   CHAN_C|VCHAN_C|NONEOS_C,
427 > /* 0x81 */   CHAN_C|VCHAN_C|NONEOS_C,
428 > /* 0x82 */   CHAN_C|VCHAN_C|NONEOS_C,
429 > /* 0x83 */   CHAN_C|VCHAN_C|NONEOS_C,
430 > /* 0x84 */   CHAN_C|VCHAN_C|NONEOS_C,
431 > /* 0x85 */   CHAN_C|VCHAN_C|NONEOS_C,
432 > /* 0x86 */   CHAN_C|VCHAN_C|NONEOS_C,
433 > /* 0x87 */   CHAN_C|VCHAN_C|NONEOS_C,
434 > /* 0x88 */   CHAN_C|VCHAN_C|NONEOS_C,
435 > /* 0x89 */   CHAN_C|VCHAN_C|NONEOS_C,
436 > /* 0x8A */   CHAN_C|VCHAN_C|NONEOS_C,
437 > /* 0x8B */   CHAN_C|VCHAN_C|NONEOS_C,
438 > /* 0x8C */   CHAN_C|VCHAN_C|NONEOS_C,
439 > /* 0x8D */   CHAN_C|VCHAN_C|NONEOS_C,
440 > /* 0x8E */   CHAN_C|VCHAN_C|NONEOS_C,
441 > /* 0x8F */   CHAN_C|VCHAN_C|NONEOS_C,
442 > /* 0x90 */   CHAN_C|VCHAN_C|NONEOS_C,
443 > /* 0x91 */   CHAN_C|VCHAN_C|NONEOS_C,
444 > /* 0x92 */   CHAN_C|VCHAN_C|NONEOS_C,
445 > /* 0x93 */   CHAN_C|VCHAN_C|NONEOS_C,
446 > /* 0x94 */   CHAN_C|VCHAN_C|NONEOS_C,
447 > /* 0x95 */   CHAN_C|VCHAN_C|NONEOS_C,
448 > /* 0x96 */   CHAN_C|VCHAN_C|NONEOS_C,
449 > /* 0x97 */   CHAN_C|VCHAN_C|NONEOS_C,
450 > /* 0x98 */   CHAN_C|VCHAN_C|NONEOS_C,
451 > /* 0x99 */   CHAN_C|VCHAN_C|NONEOS_C,
452 > /* 0x9A */   CHAN_C|VCHAN_C|NONEOS_C,
453 > /* 0x9B */   CHAN_C|VCHAN_C|NONEOS_C,
454 > /* 0x9C */   CHAN_C|VCHAN_C|NONEOS_C,
455 > /* 0x9D */   CHAN_C|VCHAN_C|NONEOS_C,
456 > /* 0x9E */   CHAN_C|VCHAN_C|NONEOS_C,
457 > /* 0x9F */   CHAN_C|VCHAN_C|NONEOS_C,
458   /* 0xA0 */   CHAN_C|NONEOS_C,
459 < /* 0xA1 */   CHAN_C|NONEOS_C,
460 < /* 0xA2 */   CHAN_C|NONEOS_C,
461 < /* 0xA3 */   CHAN_C|NONEOS_C,
462 < /* 0xA4 */   CHAN_C|NONEOS_C,
463 < /* 0xA5 */   CHAN_C|NONEOS_C,
464 < /* 0xA6 */   CHAN_C|NONEOS_C,
465 < /* 0xA7 */   CHAN_C|NONEOS_C,
466 < /* 0xA8 */   CHAN_C|NONEOS_C,
467 < /* 0xA9 */   CHAN_C|NONEOS_C,
468 < /* 0xAA */   CHAN_C|NONEOS_C,
469 < /* 0xAB */   CHAN_C|NONEOS_C,
470 < /* 0xAC */   CHAN_C|NONEOS_C,
471 < /* 0xAD */   CHAN_C|NONEOS_C,
472 < /* 0xAE */   CHAN_C|NONEOS_C,
473 < /* 0xAF */   CHAN_C|NONEOS_C,
474 < /* 0xB0 */   CHAN_C|NONEOS_C,
475 < /* 0xB1 */   CHAN_C|NONEOS_C,
476 < /* 0xB2 */   CHAN_C|NONEOS_C,
477 < /* 0xB3 */   CHAN_C|NONEOS_C,
478 < /* 0xB4 */   CHAN_C|NONEOS_C,
479 < /* 0xB5 */   CHAN_C|NONEOS_C,
480 < /* 0xB6 */   CHAN_C|NONEOS_C,
481 < /* 0xB7 */   CHAN_C|NONEOS_C,
482 < /* 0xB8 */   CHAN_C|NONEOS_C,
483 < /* 0xB9 */   CHAN_C|NONEOS_C,
484 < /* 0xBA */   CHAN_C|NONEOS_C,
485 < /* 0xBB */   CHAN_C|NONEOS_C,
486 < /* 0xBC */   CHAN_C|NONEOS_C,
487 < /* 0xBD */   CHAN_C|NONEOS_C,
488 < /* 0xBE */   CHAN_C|NONEOS_C,
489 < /* 0xBF */   CHAN_C|NONEOS_C,
490 < /* 0xC0 */   CHAN_C|NONEOS_C,
491 < /* 0xC1 */   CHAN_C|NONEOS_C,
492 < /* 0xC2 */   CHAN_C|NONEOS_C,
493 < /* 0xC3 */   CHAN_C|NONEOS_C,
494 < /* 0xC4 */   CHAN_C|NONEOS_C,
495 < /* 0xC5 */   CHAN_C|NONEOS_C,
496 < /* 0xC6 */   CHAN_C|NONEOS_C,
497 < /* 0xC7 */   CHAN_C|NONEOS_C,
498 < /* 0xC8 */   CHAN_C|NONEOS_C,
499 < /* 0xC9 */   CHAN_C|NONEOS_C,
500 < /* 0xCA */   CHAN_C|NONEOS_C,
501 < /* 0xCB */   CHAN_C|NONEOS_C,
502 < /* 0xCC */   CHAN_C|NONEOS_C,
503 < /* 0xCD */   CHAN_C|NONEOS_C,
504 < /* 0xCE */   CHAN_C|NONEOS_C,
505 < /* 0xCF */   CHAN_C|NONEOS_C,
506 < /* 0xD0 */   CHAN_C|NONEOS_C,
507 < /* 0xD1 */   CHAN_C|NONEOS_C,
508 < /* 0xD2 */   CHAN_C|NONEOS_C,
509 < /* 0xD3 */   CHAN_C|NONEOS_C,
510 < /* 0xD4 */   CHAN_C|NONEOS_C,
511 < /* 0xD5 */   CHAN_C|NONEOS_C,
512 < /* 0xD6 */   CHAN_C|NONEOS_C,
513 < /* 0xD7 */   CHAN_C|NONEOS_C,
514 < /* 0xD8 */   CHAN_C|NONEOS_C,
515 < /* 0xD9 */   CHAN_C|NONEOS_C,
516 < /* 0xDA */   CHAN_C|NONEOS_C,
517 < /* 0xDB */   CHAN_C|NONEOS_C,
518 < /* 0xDC */   CHAN_C|NONEOS_C,
519 < /* 0xDD */   CHAN_C|NONEOS_C,
520 < /* 0xDE */   CHAN_C|NONEOS_C,
521 < /* 0xDF */   CHAN_C|NONEOS_C,
522 < /* 0xE0 */   CHAN_C|NONEOS_C,
523 < /* 0xE1 */   CHAN_C|NONEOS_C,
524 < /* 0xE2 */   CHAN_C|NONEOS_C,
525 < /* 0xE3 */   CHAN_C|NONEOS_C,
526 < /* 0xE4 */   CHAN_C|NONEOS_C,
527 < /* 0xE5 */   CHAN_C|NONEOS_C,
528 < /* 0xE6 */   CHAN_C|NONEOS_C,
529 < /* 0xE7 */   CHAN_C|NONEOS_C,
530 < /* 0xE8 */   CHAN_C|NONEOS_C,
531 < /* 0xE9 */   CHAN_C|NONEOS_C,
532 < /* 0xEA */   CHAN_C|NONEOS_C,
533 < /* 0xEB */   CHAN_C|NONEOS_C,
534 < /* 0xEC */   CHAN_C|NONEOS_C,
535 < /* 0xED */   CHAN_C|NONEOS_C,
536 < /* 0xEE */   CHAN_C|NONEOS_C,
537 < /* 0xEF */   CHAN_C|NONEOS_C,
538 < /* 0xF0 */   CHAN_C|NONEOS_C,
539 < /* 0xF1 */   CHAN_C|NONEOS_C,
540 < /* 0xF2 */   CHAN_C|NONEOS_C,
541 < /* 0xF3 */   CHAN_C|NONEOS_C,
542 < /* 0xF4 */   CHAN_C|NONEOS_C,
543 < /* 0xF5 */   CHAN_C|NONEOS_C,
544 < /* 0xF6 */   CHAN_C|NONEOS_C,
545 < /* 0xF7 */   CHAN_C|NONEOS_C,
546 < /* 0xF8 */   CHAN_C|NONEOS_C,
547 < /* 0xF9 */   CHAN_C|NONEOS_C,
548 < /* 0xFA */   CHAN_C|NONEOS_C,
549 < /* 0xFB */   CHAN_C|NONEOS_C,
550 < /* 0xFC */   CHAN_C|NONEOS_C,
551 < /* 0xFD */   CHAN_C|NONEOS_C,
552 < /* 0xFE */   CHAN_C|NONEOS_C,
553 < /* 0xFF */   CHAN_C|NONEOS_C
459 > /* 0xA1 */   CHAN_C|VCHAN_C|NONEOS_C,
460 > /* 0xA2 */   CHAN_C|VCHAN_C|NONEOS_C,
461 > /* 0xA3 */   CHAN_C|VCHAN_C|NONEOS_C,
462 > /* 0xA4 */   CHAN_C|VCHAN_C|NONEOS_C,
463 > /* 0xA5 */   CHAN_C|VCHAN_C|NONEOS_C,
464 > /* 0xA6 */   CHAN_C|VCHAN_C|NONEOS_C,
465 > /* 0xA7 */   CHAN_C|VCHAN_C|NONEOS_C,
466 > /* 0xA8 */   CHAN_C|VCHAN_C|NONEOS_C,
467 > /* 0xA9 */   CHAN_C|VCHAN_C|NONEOS_C,
468 > /* 0xAA */   CHAN_C|VCHAN_C|NONEOS_C,
469 > /* 0xAB */   CHAN_C|VCHAN_C|NONEOS_C,
470 > /* 0xAC */   CHAN_C|VCHAN_C|NONEOS_C,
471 > /* 0xAD */   CHAN_C|VCHAN_C|NONEOS_C,
472 > /* 0xAE */   CHAN_C|VCHAN_C|NONEOS_C,
473 > /* 0xAF */   CHAN_C|VCHAN_C|NONEOS_C,
474 > /* 0xB0 */   CHAN_C|VCHAN_C|NONEOS_C,
475 > /* 0xB1 */   CHAN_C|VCHAN_C|NONEOS_C,
476 > /* 0xB2 */   CHAN_C|VCHAN_C|NONEOS_C,
477 > /* 0xB3 */   CHAN_C|VCHAN_C|NONEOS_C,
478 > /* 0xB4 */   CHAN_C|VCHAN_C|NONEOS_C,
479 > /* 0xB5 */   CHAN_C|VCHAN_C|NONEOS_C,
480 > /* 0xB6 */   CHAN_C|VCHAN_C|NONEOS_C,
481 > /* 0xB7 */   CHAN_C|VCHAN_C|NONEOS_C,
482 > /* 0xB8 */   CHAN_C|VCHAN_C|NONEOS_C,
483 > /* 0xB9 */   CHAN_C|VCHAN_C|NONEOS_C,
484 > /* 0xBA */   CHAN_C|VCHAN_C|NONEOS_C,
485 > /* 0xBB */   CHAN_C|VCHAN_C|NONEOS_C,
486 > /* 0xBC */   CHAN_C|VCHAN_C|NONEOS_C,
487 > /* 0xBD */   CHAN_C|VCHAN_C|NONEOS_C,
488 > /* 0xBE */   CHAN_C|VCHAN_C|NONEOS_C,
489 > /* 0xBF */   CHAN_C|VCHAN_C|NONEOS_C,
490 > /* 0xC0 */   CHAN_C|VCHAN_C|NONEOS_C,
491 > /* 0xC1 */   CHAN_C|VCHAN_C|NONEOS_C,
492 > /* 0xC2 */   CHAN_C|VCHAN_C|NONEOS_C,
493 > /* 0xC3 */   CHAN_C|VCHAN_C|NONEOS_C,
494 > /* 0xC4 */   CHAN_C|VCHAN_C|NONEOS_C,
495 > /* 0xC5 */   CHAN_C|VCHAN_C|NONEOS_C,
496 > /* 0xC6 */   CHAN_C|VCHAN_C|NONEOS_C,
497 > /* 0xC7 */   CHAN_C|VCHAN_C|NONEOS_C,
498 > /* 0xC8 */   CHAN_C|VCHAN_C|NONEOS_C,
499 > /* 0xC9 */   CHAN_C|VCHAN_C|NONEOS_C,
500 > /* 0xCA */   CHAN_C|VCHAN_C|NONEOS_C,
501 > /* 0xCB */   CHAN_C|VCHAN_C|NONEOS_C,
502 > /* 0xCC */   CHAN_C|VCHAN_C|NONEOS_C,
503 > /* 0xCD */   CHAN_C|VCHAN_C|NONEOS_C,
504 > /* 0xCE */   CHAN_C|VCHAN_C|NONEOS_C,
505 > /* 0xCF */   CHAN_C|VCHAN_C|NONEOS_C,
506 > /* 0xD0 */   CHAN_C|VCHAN_C|NONEOS_C,
507 > /* 0xD1 */   CHAN_C|VCHAN_C|NONEOS_C,
508 > /* 0xD2 */   CHAN_C|VCHAN_C|NONEOS_C,
509 > /* 0xD3 */   CHAN_C|VCHAN_C|NONEOS_C,
510 > /* 0xD4 */   CHAN_C|VCHAN_C|NONEOS_C,
511 > /* 0xD5 */   CHAN_C|VCHAN_C|NONEOS_C,
512 > /* 0xD6 */   CHAN_C|VCHAN_C|NONEOS_C,
513 > /* 0xD7 */   CHAN_C|VCHAN_C|NONEOS_C,
514 > /* 0xD8 */   CHAN_C|VCHAN_C|NONEOS_C,
515 > /* 0xD9 */   CHAN_C|VCHAN_C|NONEOS_C,
516 > /* 0xDA */   CHAN_C|VCHAN_C|NONEOS_C,
517 > /* 0xDB */   CHAN_C|VCHAN_C|NONEOS_C,
518 > /* 0xDC */   CHAN_C|VCHAN_C|NONEOS_C,
519 > /* 0xDD */   CHAN_C|VCHAN_C|NONEOS_C,
520 > /* 0xDE */   CHAN_C|VCHAN_C|NONEOS_C,
521 > /* 0xDF */   CHAN_C|VCHAN_C|NONEOS_C,
522 > /* 0xE0 */   CHAN_C|VCHAN_C|NONEOS_C,
523 > /* 0xE1 */   CHAN_C|VCHAN_C|NONEOS_C,
524 > /* 0xE2 */   CHAN_C|VCHAN_C|NONEOS_C,
525 > /* 0xE3 */   CHAN_C|VCHAN_C|NONEOS_C,
526 > /* 0xE4 */   CHAN_C|VCHAN_C|NONEOS_C,
527 > /* 0xE5 */   CHAN_C|VCHAN_C|NONEOS_C,
528 > /* 0xE6 */   CHAN_C|VCHAN_C|NONEOS_C,
529 > /* 0xE7 */   CHAN_C|VCHAN_C|NONEOS_C,
530 > /* 0xE8 */   CHAN_C|VCHAN_C|NONEOS_C,
531 > /* 0xE9 */   CHAN_C|VCHAN_C|NONEOS_C,
532 > /* 0xEA */   CHAN_C|VCHAN_C|NONEOS_C,
533 > /* 0xEB */   CHAN_C|VCHAN_C|NONEOS_C,
534 > /* 0xEC */   CHAN_C|VCHAN_C|NONEOS_C,
535 > /* 0xED */   CHAN_C|VCHAN_C|NONEOS_C,
536 > /* 0xEE */   CHAN_C|VCHAN_C|NONEOS_C,
537 > /* 0xEF */   CHAN_C|VCHAN_C|NONEOS_C,
538 > /* 0xF0 */   CHAN_C|VCHAN_C|NONEOS_C,
539 > /* 0xF1 */   CHAN_C|VCHAN_C|NONEOS_C,
540 > /* 0xF2 */   CHAN_C|VCHAN_C|NONEOS_C,
541 > /* 0xF3 */   CHAN_C|VCHAN_C|NONEOS_C,
542 > /* 0xF4 */   CHAN_C|VCHAN_C|NONEOS_C,
543 > /* 0xF5 */   CHAN_C|VCHAN_C|NONEOS_C,
544 > /* 0xF6 */   CHAN_C|VCHAN_C|NONEOS_C,
545 > /* 0xF7 */   CHAN_C|VCHAN_C|NONEOS_C,
546 > /* 0xF8 */   CHAN_C|VCHAN_C|NONEOS_C,
547 > /* 0xF9 */   CHAN_C|VCHAN_C|NONEOS_C,
548 > /* 0xFA */   CHAN_C|VCHAN_C|NONEOS_C,
549 > /* 0xFB */   CHAN_C|VCHAN_C|NONEOS_C,
550 > /* 0xFC */   CHAN_C|VCHAN_C|NONEOS_C,
551 > /* 0xFD */   CHAN_C|VCHAN_C|NONEOS_C,
552 > /* 0xFE */   CHAN_C|VCHAN_C|NONEOS_C,
553 > /* 0xFF */   CHAN_C|VCHAN_C|NONEOS_C
554   };

Comparing:
ircd-hybrid/src/match.c (property svn:keywords), Revision 30 by adx, Sun Oct 2 20:03:27 2005 UTC vs.
ircd-hybrid/trunk/src/match.c (property svn:keywords), Revision 1666 by michael, Sun Nov 18 17:03:18 2012 UTC

# Line 1 | Line 1
1 < "Id Revision"
1 > Id Revision

Diff Legend

Removed lines
+ Added lines
< Changed lines (old)
> Changed lines (new)