[PATCH/RFA] Extended wctomb/mbtowc conversion and more stuff

Jeff Johnston jjohnstn@redhat.com
Mon Mar 23 18:07:00 GMT 2009


Corinna Vinschen wrote:
> On Mar 22 17:30, Corinna Vinschen wrote:
>   
>> Ok,
>>
>> this is the new patch about the extended wctomb_r/mbtowc_r stuff.
>> [...]
>> Again, the patch is split in two.  The first one containing all changes
>> except those in ctype, the second one containg the ctype changes.
>>     
>
> This is part two of the patch, just the ctype stuff.
>
>   
Ok.

-- Jeff J.
> Corinna
>
>
> Index: libc/ctype/iswalpha.c
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/ctype/iswalpha.c,v
> retrieving revision 1.5
> diff -u -p -r1.5 iswalpha.c
> --- libc/ctype/iswalpha.c	3 Mar 2009 09:28:44 -0000	1.5
> +++ libc/ctype/iswalpha.c	22 Mar 2009 16:25:06 -0000
> @@ -70,270 +70,253 @@ int
>  _DEFUN(iswalpha,(c), wint_t c)
>  {
>  #ifdef _MB_CAPABLE
> -  int unicode = 0;
> +  unsigned const char *table;
> +  unsigned char *ptr;
> +  unsigned char ctmp;
> +  int size;
> +  wint_t x;
>  
>    if (!strcmp (__locale_charset (), "JIS"))
> -    {
> -      c = __jp2uc (c, JP_JIS);
> -      unicode = 1;
> -    }
> +    c = __jp2uc (c, JP_JIS);
>    else if (!strcmp (__locale_charset (), "SJIS"))
> -    {
> -      c = __jp2uc (c, JP_SJIS);
> -      unicode = 1;
> -    }
> +    c = __jp2uc (c, JP_SJIS);
>    else if (!strcmp (__locale_charset (), "EUCJP"))
> +    c = __jp2uc (c, JP_EUCJP);
> +
> +  x = (c >> 8);
> +  /* for some large sections, all characters are alphabetic so handle them here */
> +  if ((x >= 0x34 && x <= 0x4c) ||
> +      (x >= 0x4e && x <= 0x9e) ||
> +      (x >= 0xac && x <= 0xd6) ||
> +      (x >= 0x200 && x <= 0x2a5))
> +    return 1;
> +  
> +  switch (x)
>      {
> -      c = __jp2uc (c, JP_EUCJP);
> -      unicode = 1;
> -    }
> -  else if (!strcmp (__locale_charset (), "UTF-8"))
> -    {
> -      unicode = 1;
> +    case 0x00:
> +      table = u0;
> +      size = sizeof(u0);
> +      break;
> +    case 0x01:
> +    case 0x15:
> +    case 0xa0:
> +    case 0xa1:
> +    case 0xa2:
> +    case 0xa3:
> +    case 0xf9:
> +    case 0xfc:
> +    case 0x2f8:
> +    case 0x2f9:
> +      return 1;
> +    case 0x02:
> +      table = u2;
> +      size = sizeof(u2);
> +      break;
> +    case 0x03:
> +      table = u3;
> +      size = sizeof(u3);
> +      break;
> +    case 0x04:
> +      table = u4;
> +      size = sizeof(u4);
> +      break;
> +    case 0x05:
> +      table = u5;
> +      size = sizeof(u5);
> +      break;
> +    case 0x06:
> +      table = u6;
> +      size = sizeof(u6);
> +      break;
> +    case 0x07:
> +      table = u7;
> +      size = sizeof(u7);
> +      break;
> +    case 0x09:
> +      table = u9;
> +      size = sizeof(u9);
> +      break;
> +    case 0x0a:
> +      table = ua;
> +      size = sizeof(ua);
> +      break;
> +    case 0x0b:
> +      table = ub;
> +      size = sizeof(ub);
> +      break;
> +    case 0x0c:
> +      table = uc;
> +      size = sizeof(uc);
> +      break;
> +    case 0x0d:
> +      table = ud;
> +      size = sizeof(ud);
> +      break;
> +    case 0x0e:
> +      table = ue;
> +      size = sizeof(ue);
> +      break;
> +    case 0x0f:
> +      table = uf;
> +      size = sizeof(uf);
> +      break;
> +    case 0x10:
> +      table = u10;
> +      size = sizeof(u10);
> +      break;
> +    case 0x11:
> +      table = u11;
> +      size = sizeof(u11);
> +      break;
> +    case 0x12:
> +      table = u12;
> +      size = sizeof(u12);
> +      break;
> +    case 0x13:
> +      table = u13;
> +      size = sizeof(u13);
> +      break;
> +    case 0x14:
> +      table = u14;
> +      size = sizeof(u14);
> +      break;
> +    case 0x16:
> +      table = u16;
> +      size = sizeof(u16);
> +      break;
> +    case 0x17:
> +      table = u17;
> +      size = sizeof(u17);
> +      break;
> +    case 0x18:
> +      table = u18;
> +      size = sizeof(u18);
> +      break;
> +    case 0x1e:
> +      table = u1e;
> +      size = sizeof(u1e);
> +      break;
> +    case 0x1f:
> +      table = u1f;
> +      size = sizeof(u1f);
> +      break;
> +    case 0x20:
> +      table = u20;
> +      size = sizeof(u20);
> +      break;
> +    case 0x21:
> +      table = u21;
> +      size = sizeof(u21);
> +      break;
> +    case 0x24:
> +      table = u24;
> +      size = sizeof(u24);
> +      break;
> +    case 0x30:
> +      table = u30;
> +      size = sizeof(u30);
> +      break;
> +    case 0x31:
> +      table = u31;
> +      size = sizeof(u31);
> +      break;
> +    case 0x4d:
> +      table = u4d;
> +      size = sizeof(u4d);
> +      break;
> +    case 0x9f:
> +      table = u9f;
> +      size = sizeof(u9f);
> +      break;
> +    case 0xa4:
> +      table = ua4;
> +      size = sizeof(ua4);
> +      break;
> +    case 0xd7:
> +      table = ud7;
> +      size = sizeof(ud7);
> +      break;
> +    case 0xfa:
> +      table = ufa;
> +      size = sizeof(ufa);
> +      break;
> +    case 0xfb:
> +      table = ufb;
> +      size = sizeof(ufb);
> +      break;
> +    case 0xfd:
> +      table = ufd;
> +      size = sizeof(ufd);
> +      break;
> +    case 0xfe:
> +      table = ufe;
> +      size = sizeof(ufe);
> +      break;
> +    case 0xff:
> +      table = uff;
> +      size = sizeof(uff);
> +      break;
> +    case 0x103:
> +      table = u103;
> +      size = sizeof(u103);
> +      break;
> +    case 0x104:
> +      table = u104;
> +      size = sizeof(u104);
> +      break;
> +    case 0x1d4:
> +      table = u1d4;
> +      size = sizeof(u1d4);
> +      break;
> +    case 0x1d5:
> +      table = u1d5;
> +      size = sizeof(u1d5);
> +      break;
> +    case 0x1d6:
> +      table = u1d6;
> +      size = sizeof(u1d6);
> +      break;
> +    case 0x1d7:
> +      table = u1d7;
> +      size = sizeof(u1d7);
> +      break;
> +    case 0x2a6:
> +      table = u2a6;
> +      size = sizeof(u2a6);
> +      break;
> +    case 0x2fa:
> +      table = u2fa;
> +      size = sizeof(u2fa);
> +      break;
> +    default:
> +      return 0;
>      }
> -
> -  if (unicode)
> +  /* we have narrowed down to a section of 256 characters to check */
> +  /* now check if c matches the alphabetic wide-chars within that section */
> +  ptr = (unsigned char *)table;
> +  ctmp = (unsigned char)c;
> +  while (ptr < table + size)
>      {
> -      unsigned const char *table;
> -      unsigned char *ptr;
> -      unsigned char ctmp;
> -      int size;
> -      wint_t x = (c >> 8);
> -      
> -      /* for some large sections, all characters are alphabetic so handle them here */
> -      if ((x >= 0x34 && x <= 0x4c) ||
> -	  (x >= 0x4e && x <= 0x9e) ||
> -	  (x >= 0xac && x <= 0xd6) ||
> -	  (x >= 0x200 && x <= 0x2a5))
> +      if (ctmp == *ptr)
>  	return 1;
> -      
> -      switch (x)
> -	{
> -	case 0x00:
> -	  table = u0;
> -	  size = sizeof(u0);
> -	  break;
> -	case 0x01:
> -	case 0x15:
> -	case 0xa0:
> -	case 0xa1:
> -	case 0xa2:
> -	case 0xa3:
> -	case 0xf9:
> -	case 0xfc:
> -	case 0x2f8:
> -	case 0x2f9:
> -	  return 1;
> -	case 0x02:
> -	  table = u2;
> -	  size = sizeof(u2);
> -	  break;
> -	case 0x03:
> -	  table = u3;
> -	  size = sizeof(u3);
> -	  break;
> -	case 0x04:
> -	  table = u4;
> -	  size = sizeof(u4);
> -	  break;
> -	case 0x05:
> -	  table = u5;
> -	  size = sizeof(u5);
> -	  break;
> -	case 0x06:
> -	  table = u6;
> -	  size = sizeof(u6);
> -	  break;
> -	case 0x07:
> -	  table = u7;
> -	  size = sizeof(u7);
> -	  break;
> -	case 0x09:
> -	  table = u9;
> -	  size = sizeof(u9);
> -	  break;
> -	case 0x0a:
> -	  table = ua;
> -	  size = sizeof(ua);
> -	  break;
> -	case 0x0b:
> -	  table = ub;
> -	  size = sizeof(ub);
> -	  break;
> -	case 0x0c:
> -	  table = uc;
> -	  size = sizeof(uc);
> -	  break;
> -	case 0x0d:
> -	  table = ud;
> -	  size = sizeof(ud);
> -	  break;
> -	case 0x0e:
> -	  table = ue;
> -	  size = sizeof(ue);
> -	  break;
> -	case 0x0f:
> -	  table = uf;
> -	  size = sizeof(uf);
> -	  break;
> -	case 0x10:
> -	  table = u10;
> -	  size = sizeof(u10);
> -	  break;
> -	case 0x11:
> -	  table = u11;
> -	  size = sizeof(u11);
> -	  break;
> -	case 0x12:
> -	  table = u12;
> -	  size = sizeof(u12);
> -	  break;
> -	case 0x13:
> -	  table = u13;
> -	  size = sizeof(u13);
> -	  break;
> -	case 0x14:
> -	  table = u14;
> -	  size = sizeof(u14);
> -	  break;
> -	case 0x16:
> -	  table = u16;
> -	  size = sizeof(u16);
> -	  break;
> -	case 0x17:
> -	  table = u17;
> -	  size = sizeof(u17);
> -	  break;
> -	case 0x18:
> -	  table = u18;
> -	  size = sizeof(u18);
> -	  break;
> -	case 0x1e:
> -	  table = u1e;
> -	  size = sizeof(u1e);
> -	  break;
> -	case 0x1f:
> -	  table = u1f;
> -	  size = sizeof(u1f);
> -	  break;
> -	case 0x20:
> -	  table = u20;
> -	  size = sizeof(u20);
> -	  break;
> -	case 0x21:
> -	  table = u21;
> -	  size = sizeof(u21);
> -	  break;
> -	case 0x24:
> -	  table = u24;
> -	  size = sizeof(u24);
> -	  break;
> -	case 0x30:
> -	  table = u30;
> -	  size = sizeof(u30);
> -	  break;
> -	case 0x31:
> -	  table = u31;
> -	  size = sizeof(u31);
> -	  break;
> -	case 0x4d:
> -	  table = u4d;
> -	  size = sizeof(u4d);
> -	  break;
> -	case 0x9f:
> -	  table = u9f;
> -	  size = sizeof(u9f);
> -	  break;
> -	case 0xa4:
> -	  table = ua4;
> -	  size = sizeof(ua4);
> -	  break;
> -	case 0xd7:
> -	  table = ud7;
> -	  size = sizeof(ud7);
> -	  break;
> -	case 0xfa:
> -	  table = ufa;
> -	  size = sizeof(ufa);
> -	  break;
> -	case 0xfb:
> -	  table = ufb;
> -	  size = sizeof(ufb);
> -	  break;
> -	case 0xfd:
> -	  table = ufd;
> -	  size = sizeof(ufd);
> -	  break;
> -	case 0xfe:
> -	  table = ufe;
> -	  size = sizeof(ufe);
> -	  break;
> -	case 0xff:
> -	  table = uff;
> -	  size = sizeof(uff);
> -	  break;
> -	case 0x103:
> -	  table = u103;
> -	  size = sizeof(u103);
> -	  break;
> -	case 0x104:
> -	  table = u104;
> -	  size = sizeof(u104);
> -	  break;
> -	case 0x1d4:
> -	  table = u1d4;
> -	  size = sizeof(u1d4);
> -	  break;
> -	case 0x1d5:
> -	  table = u1d5;
> -	  size = sizeof(u1d5);
> -	  break;
> -	case 0x1d6:
> -	  table = u1d6;
> -	  size = sizeof(u1d6);
> -	  break;
> -	case 0x1d7:
> -	  table = u1d7;
> -	  size = sizeof(u1d7);
> -	  break;
> -	case 0x2a6:
> -	  table = u2a6;
> -	  size = sizeof(u2a6);
> -	  break;
> -	case 0x2fa:
> -	  table = u2fa;
> -	  size = sizeof(u2fa);
> -	  break;
> -	default:
> -	  return 0;
> -	}
> -      /* we have narrowed down to a section of 256 characters to check */
> -      /* now check if c matches the alphabetic wide-chars within that section */
> -      ptr = (unsigned char *)table;
> -      ctmp = (unsigned char)c;
> -      while (ptr < table + size)
> +      if (ctmp < *ptr)
> +	return 0;
> +      /* otherwise c > *ptr */
> +      /* look for 0x0 as next element which indicates a range */
> +      ++ptr;
> +      if (*ptr == 0x0)
>  	{
> -	  if (ctmp == *ptr)
> +	  /* we have a range..see if c falls within range */
> +	  ++ptr;
> +	  if (ctmp <= *ptr)
>  	    return 1;
> -	  if (ctmp < *ptr)
> -	    return 0;
> -	  /* otherwise c > *ptr */
> -	  /* look for 0x0 as next element which indicates a range */
>  	  ++ptr;
> -	  if (*ptr == 0x0)
> -	    {
> -	      /* we have a range..see if c falls within range */
> -	      ++ptr;
> -	      if (ctmp <= *ptr)
> -		return 1;
> -	      ++ptr;
> -	    }
>  	}
> -      /* not in table */
> -      return 0;
>      }
> -#endif /* _MB_CAPABLE */
> -
> +  /* not in table */
> +  return 0;
> +#else
>    return (c < (wint_t)0x100 ? isalpha (c) : 0);
> +#endif /* _MB_CAPABLE */
>  }
>  
> Index: libc/ctype/iswblank.c
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/ctype/iswblank.c,v
> retrieving revision 1.5
> diff -u -p -r1.5 iswblank.c
> --- libc/ctype/iswblank.c	3 Mar 2009 09:28:45 -0000	1.5
> +++ libc/ctype/iswblank.c	22 Mar 2009 16:25:06 -0000
> @@ -66,37 +66,18 @@ int
>  _DEFUN(iswblank,(c), wint_t c)
>  {
>  #ifdef _MB_CAPABLE
> -  int unicode = 0;
> -
>    if (!strcmp (__locale_charset (), "JIS"))
> -    {
> -      c = __jp2uc (c, JP_JIS);
> -      unicode = 1;
> -    }
> +    c = __jp2uc (c, JP_JIS);
>    else if (!strcmp (__locale_charset (), "SJIS"))
> -    {
> -      c = __jp2uc (c, JP_SJIS);
> -      unicode = 1;
> -    }
> +    c = __jp2uc (c, JP_SJIS);
>    else if (!strcmp (__locale_charset (), "EUCJP"))
> -    {
> -      c = __jp2uc (c, JP_EUCJP);
> -      unicode = 1;
> -    }
> -  else if (!strcmp (__locale_charset (), "UTF-8"))
> -    {
> -      unicode = 1;
> -    }
> -
> -  if (unicode)
> -    {
> -      return (c == 0x0009 || c == 0x0020 || c == 0x1680 ||
> -              (c >= 0x2000 && c <= 0x2006) ||
> -              (c >= 0x2008 && c <= 0x200b) ||
> -              c == 0x205f || c == 0x3000);
> -    }
> -#endif /* _MB_CAPABLE */
> -
> +    c = __jp2uc (c, JP_EUCJP);
> +  return (c == 0x0009 || c == 0x0020 || c == 0x1680 ||
> +	  (c >= 0x2000 && c <= 0x2006) ||
> +	  (c >= 0x2008 && c <= 0x200b) ||
> +	  c == 0x205f || c == 0x3000);
> +#else
>    return (c < 0x100 ? isblank (c) : 0);
> +#endif /* _MB_CAPABLE */
>  }
>  
> Index: libc/ctype/iswcntrl.c
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/ctype/iswcntrl.c,v
> retrieving revision 1.5
> diff -u -p -r1.5 iswcntrl.c
> --- libc/ctype/iswcntrl.c	3 Mar 2009 09:28:45 -0000	1.5
> +++ libc/ctype/iswcntrl.c	22 Mar 2009 16:25:06 -0000
> @@ -66,36 +66,17 @@ int
>  _DEFUN(iswcntrl,(c), wint_t c)
>  {
>  #ifdef _MB_CAPABLE
> -  int unicode = 0;
> -
>    if (!strcmp (__locale_charset (), "JIS"))
> -    {
> -      c = __jp2uc (c, JP_JIS);
> -      unicode = 1;
> -    }
> +    c = __jp2uc (c, JP_JIS);
>    else if (!strcmp (__locale_charset (), "SJIS"))
> -    {
> -      c = __jp2uc (c, JP_SJIS);
> -      unicode = 1;
> -    }
> +    c = __jp2uc (c, JP_SJIS);
>    else if (!strcmp (__locale_charset (), "EUCJP"))
> -    {
> -      c = __jp2uc (c, JP_EUCJP);
> -      unicode = 1;
> -    }
> -  else if (!strcmp (__locale_charset (), "UTF-8"))
> -    {
> -      unicode = 1;
> -    }
> -
> -  if (unicode)
> -    {
> -      return ((c >= 0x0000 && c <= 0x001f) || 
> -              (c >= 0x007f && c <= 0x009f) ||
> -              c == 0x2028 || c == 0x2029);
> -    }
> -#endif /* _MB_CAPABLE */
> -
> +    c = __jp2uc (c, JP_EUCJP);
> +  return ((c >= 0x0000 && c <= 0x001f) || 
> +	  (c >= 0x007f && c <= 0x009f) ||
> +	  c == 0x2028 || c == 0x2029);
> +#else
>    return (c < 0x100 ? iscntrl (c) : 0);
> +#endif /* _MB_CAPABLE */
>  }
>  
> Index: libc/ctype/iswprint.c
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/ctype/iswprint.c,v
> retrieving revision 1.5
> diff -u -p -r1.5 iswprint.c
> --- libc/ctype/iswprint.c	3 Mar 2009 09:28:45 -0000	1.5
> +++ libc/ctype/iswprint.c	22 Mar 2009 16:25:06 -0000
> @@ -70,325 +70,308 @@ int
>  _DEFUN(iswprint,(c), wint_t c)
>  {
>  #ifdef _MB_CAPABLE
> -  int unicode = 0;
> -
> +  unsigned const char *table;
> +  unsigned char *ptr;
> +  unsigned char ctmp;
> +  int size;
> +  wint_t x;
> +  
>    if (!strcmp (__locale_charset (), "JIS"))
> -    {
> -      c = __jp2uc (c, JP_JIS);
> -      unicode = 1;
> -    }
> +    c = __jp2uc (c, JP_JIS);
>    else if (!strcmp (__locale_charset (), "SJIS"))
> -    {
> -      c = __jp2uc (c, JP_SJIS);
> -      unicode = 1;
> -    }
> +    c = __jp2uc (c, JP_SJIS);
>    else if (!strcmp (__locale_charset (), "EUCJP"))
> +    c = __jp2uc (c, JP_EUCJP);
> +
> +  x = (c >> 8);
> +  /* for some large sections, all characters are printuation so handle them here */
> +  if ((x >= 0x34 && x <= 0x4c) ||
> +      (x >= 0x4e && x <= 0x9e) ||
> +      (x >= 0xac && x <= 0xd6) ||
> +      (x >= 0xe0 && x <= 0xf9) ||
> +      (x >= 0x200 && x <= 0x2a5) ||
> +      (x >= 0xf00 && x <= 0xffe) ||
> +      (x >= 0x1000 && x <= 0x10fe))
> +    return 1;
> +  
> +  switch (x)
>      {
> -      c = __jp2uc (c, JP_EUCJP);
> -      unicode = 1;
> +    case 0x01:
> +    case 0x15:
> +    case 0x22:
> +    case 0x25:
> +    case 0x28:
> +    case 0x29:
> +    case 0x2a:
> +    case 0xa0:
> +    case 0xa1:
> +    case 0xa2:
> +    case 0xa3:
> +    case 0xfc:
> +    case 0x2f8:
> +    case 0x2f9:
> +      return 1;
> +    case 0x00:
> +      table = u0;
> +      size = sizeof(u0);
> +      break;
> +    case 0x02:
> +      table = u2;
> +      size = sizeof(u2);
> +      break;
> +    case 0x03:
> +      table = u3;
> +      size = sizeof(u3);
> +      break;
> +    case 0x04:
> +      table = u4;
> +      size = sizeof(u4);
> +      break;
> +    case 0x05:
> +      table = u5;
> +      size = sizeof(u5);
> +      break;
> +    case 0x06:
> +      table = u6;
> +      size = sizeof(u6);
> +      break;
> +    case 0x07:
> +      table = u7;
> +      size = sizeof(u7);
> +      break;
> +    case 0x09:
> +      table = u9;
> +      size = sizeof(u9);
> +      break;
> +    case 0x0a:
> +      table = ua;
> +      size = sizeof(ua);
> +      break;
> +    case 0x0b:
> +      table = ub;
> +      size = sizeof(ub);
> +      break;
> +    case 0x0c:
> +      table = uc;
> +      size = sizeof(uc);
> +      break;
> +    case 0x0d:
> +      table = ud;
> +      size = sizeof(ud);
> +      break;
> +    case 0x0e:
> +      table = ue;
> +      size = sizeof(ue);
> +      break;
> +    case 0x0f:
> +      table = uf;
> +      size = sizeof(uf);
> +      break;
> +    case 0x10:
> +      table = u10;
> +      size = sizeof(u10);
> +      break;
> +    case 0x11:
> +      table = u11;
> +      size = sizeof(u11);
> +      break;
> +    case 0x12:
> +      table = u12;
> +      size = sizeof(u12);
> +      break;
> +    case 0x13:
> +      table = u13;
> +      size = sizeof(u13);
> +      break;
> +    case 0x14:
> +      table = u14;
> +      size = sizeof(u14);
> +      break;
> +    case 0x16:
> +      table = u16;
> +      size = sizeof(u16);
> +      break;
> +    case 0x17:
> +      table = u17;
> +      size = sizeof(u17);
> +      break;
> +    case 0x18:
> +      table = u18;
> +      size = sizeof(u18);
> +      break;
> +    case 0x1e:
> +      table = u1e;
> +      size = sizeof(u1e);
> +      break;
> +    case 0x1f:
> +      table = u1f;
> +      size = sizeof(u1f);
> +      break;
> +    case 0x20:
> +      table = u20;
> +      size = sizeof(u20);
> +      break;
> +    case 0x21:
> +      table = u21;
> +      size = sizeof(u21);
> +      break;
> +    case 0x23:
> +      table = u23;
> +      size = sizeof(u23);
> +      break;
> +    case 0x24:
> +      table = u24;
> +      size = sizeof(u24);
> +      break;
> +    case 0x26:
> +      table = u26;
> +      size = sizeof(u26);
> +      break;
> +    case 0x27:
> +      table = u27;
> +      size = sizeof(u27);
> +      break;
> +    case 0x2e:
> +      table = u2e;
> +      size = sizeof(u2e);
> +      break;
> +    case 0x2f:
> +      table = u2f;
> +      size = sizeof(u2f);
> +      break;
> +    case 0x30:
> +      table = u30;
> +      size = sizeof(u30);
> +      break;
> +    case 0x31:
> +      table = u31;
> +      size = sizeof(u31);
> +      break;
> +    case 0x32:
> +      table = u32;
> +      size = sizeof(u32);
> +      break;
> +    case 0x33:
> +      table = u33;
> +      size = sizeof(u33);
> +      break;
> +    case 0x4d:
> +      table = u4d;
> +      size = sizeof(u4d);
> +      break;
> +    case 0x9f:
> +      table = u9f;
> +      size = sizeof(u9f);
> +      break;
> +    case 0xa4:
> +      table = ua4;
> +      size = sizeof(ua4);
> +      break;
> +    case 0xd7:
> +      table = ud7;
> +      size = sizeof(ud7);
> +      break;
> +    case 0xfa:
> +      table = ufa;
> +      size = sizeof(ufa);
> +      break;
> +    case 0xfb:
> +      table = ufb;
> +      size = sizeof(ufb);
> +      break;
> +    case 0xfd:
> +      table = ufd;
> +      size = sizeof(ufd);
> +      break;
> +    case 0xfe:
> +      table = ufe;
> +      size = sizeof(ufe);
> +      break;
> +    case 0xff:
> +      table = uff;
> +      size = sizeof(uff);
> +      break;
> +    case 0x103:
> +      table = u103;
> +      size = sizeof(u103);
> +      break;
> +    case 0x104:
> +      table = u104;
> +      size = sizeof(u104);
> +      break;
> +    case 0x1d0:
> +      table = u1d0;
> +      size = sizeof(u1d0);
> +      break;
> +    case 0x1d1:
> +      table = u1d1;
> +      size = sizeof(u1d1);
> +      break;
> +    case 0x1d4:
> +      table = u1d4;
> +      size = sizeof(u1d4);
> +      break;
> +    case 0x1d5:
> +      table = u1d5;
> +      size = sizeof(u1d5);
> +      break;
> +    case 0x1d6:
> +      table = u1d6;
> +      size = sizeof(u1d6);
> +      break;
> +    case 0x1d7:
> +      table = u1d7;
> +      size = sizeof(u1d7);
> +      break;
> +    case 0x2a6:
> +      table = u2a6;
> +      size = sizeof(u2a6);
> +      break;
> +    case 0x2fa:
> +      table = u2fa;
> +      size = sizeof(u2fa);
> +      break;
> +    case 0xe00:
> +      table = ue00;
> +      size = sizeof(ue00);
> +      break;
> +    case 0xfff:
> +      table = ufff;
> +      size = sizeof(ufff);
> +      break;
> +    case 0x10ff:
> +      table = u10ff;
> +      size = sizeof(u10ff);
> +      break;
> +    default:
> +      return 0;
>      }
> -  else if (!strcmp (__locale_charset (), "UTF-8"))
> +  /* we have narrowed down to a section of 256 characters to check */
> +  /* now check if c matches the printuation wide-chars within that section */
> +  ptr = (unsigned char *)table;
> +  ctmp = (unsigned char)c;
> +  while (ptr < table + size)
>      {
> -      unicode = 1;
> -    }
> -
> -  if (unicode)
> -    {
> -      unsigned const char *table;
> -      unsigned char *ptr;
> -      unsigned char ctmp;
> -      int size;
> -      wint_t x = (c >> 8);
> -      
> -      /* for some large sections, all characters are printuation so handle them here */
> -      if ((x >= 0x34 && x <= 0x4c) ||
> -	  (x >= 0x4e && x <= 0x9e) ||
> -	  (x >= 0xac && x <= 0xd6) ||
> -	  (x >= 0xe0 && x <= 0xf9) ||
> -	  (x >= 0x200 && x <= 0x2a5) ||
> -	  (x >= 0xf00 && x <= 0xffe) ||
> -	  (x >= 0x1000 && x <= 0x10fe))
> +      if (ctmp == *ptr)
>  	return 1;
> -      
> -      switch (x)
> -	{
> -	case 0x01:
> -	case 0x15:
> -	case 0x22:
> -	case 0x25:
> -	case 0x28:
> -	case 0x29:
> -	case 0x2a:
> -	case 0xa0:
> -	case 0xa1:
> -	case 0xa2:
> -	case 0xa3:
> -	case 0xfc:
> -	case 0x2f8:
> -	case 0x2f9:
> -	  return 1;
> -	case 0x00:
> -	  table = u0;
> -	  size = sizeof(u0);
> -	  break;
> -	case 0x02:
> -	  table = u2;
> -	  size = sizeof(u2);
> -	  break;
> -	case 0x03:
> -	  table = u3;
> -	  size = sizeof(u3);
> -	  break;
> -	case 0x04:
> -	  table = u4;
> -	  size = sizeof(u4);
> -	  break;
> -	case 0x05:
> -	  table = u5;
> -	  size = sizeof(u5);
> -	  break;
> -	case 0x06:
> -	  table = u6;
> -	  size = sizeof(u6);
> -	  break;
> -	case 0x07:
> -	  table = u7;
> -	  size = sizeof(u7);
> -	  break;
> -	case 0x09:
> -	  table = u9;
> -	  size = sizeof(u9);
> -	  break;
> -	case 0x0a:
> -	  table = ua;
> -	  size = sizeof(ua);
> -	  break;
> -	case 0x0b:
> -	  table = ub;
> -	  size = sizeof(ub);
> -	  break;
> -	case 0x0c:
> -	  table = uc;
> -	  size = sizeof(uc);
> -	  break;
> -	case 0x0d:
> -	  table = ud;
> -	  size = sizeof(ud);
> -	  break;
> -	case 0x0e:
> -	  table = ue;
> -	  size = sizeof(ue);
> -	  break;
> -	case 0x0f:
> -	  table = uf;
> -	  size = sizeof(uf);
> -	  break;
> -	case 0x10:
> -	  table = u10;
> -	  size = sizeof(u10);
> -	  break;
> -	case 0x11:
> -	  table = u11;
> -	  size = sizeof(u11);
> -	  break;
> -	case 0x12:
> -	  table = u12;
> -	  size = sizeof(u12);
> -	  break;
> -	case 0x13:
> -	  table = u13;
> -	  size = sizeof(u13);
> -	  break;
> -	case 0x14:
> -	  table = u14;
> -	  size = sizeof(u14);
> -	  break;
> -	case 0x16:
> -	  table = u16;
> -	  size = sizeof(u16);
> -	  break;
> -	case 0x17:
> -	  table = u17;
> -	  size = sizeof(u17);
> -	  break;
> -	case 0x18:
> -	  table = u18;
> -	  size = sizeof(u18);
> -	  break;
> -	case 0x1e:
> -	  table = u1e;
> -	  size = sizeof(u1e);
> -	  break;
> -	case 0x1f:
> -	  table = u1f;
> -	  size = sizeof(u1f);
> -	  break;
> -	case 0x20:
> -	  table = u20;
> -	  size = sizeof(u20);
> -	  break;
> -	case 0x21:
> -	  table = u21;
> -	  size = sizeof(u21);
> -	  break;
> -	case 0x23:
> -	  table = u23;
> -	  size = sizeof(u23);
> -	  break;
> -	case 0x24:
> -	  table = u24;
> -	  size = sizeof(u24);
> -	  break;
> -	case 0x26:
> -	  table = u26;
> -	  size = sizeof(u26);
> -	  break;
> -	case 0x27:
> -	  table = u27;
> -	  size = sizeof(u27);
> -	  break;
> -	case 0x2e:
> -	  table = u2e;
> -	  size = sizeof(u2e);
> -	  break;
> -	case 0x2f:
> -	  table = u2f;
> -	  size = sizeof(u2f);
> -	  break;
> -	case 0x30:
> -	  table = u30;
> -	  size = sizeof(u30);
> -	  break;
> -	case 0x31:
> -	  table = u31;
> -	  size = sizeof(u31);
> -	  break;
> -	case 0x32:
> -	  table = u32;
> -	  size = sizeof(u32);
> -	  break;
> -	case 0x33:
> -	  table = u33;
> -	  size = sizeof(u33);
> -	  break;
> -	case 0x4d:
> -	  table = u4d;
> -	  size = sizeof(u4d);
> -	  break;
> -	case 0x9f:
> -	  table = u9f;
> -	  size = sizeof(u9f);
> -	  break;
> -	case 0xa4:
> -	  table = ua4;
> -	  size = sizeof(ua4);
> -	  break;
> -	case 0xd7:
> -	  table = ud7;
> -	  size = sizeof(ud7);
> -	  break;
> -	case 0xfa:
> -	  table = ufa;
> -	  size = sizeof(ufa);
> -	  break;
> -	case 0xfb:
> -	  table = ufb;
> -	  size = sizeof(ufb);
> -	  break;
> -	case 0xfd:
> -	  table = ufd;
> -	  size = sizeof(ufd);
> -	  break;
> -	case 0xfe:
> -	  table = ufe;
> -	  size = sizeof(ufe);
> -	  break;
> -	case 0xff:
> -	  table = uff;
> -	  size = sizeof(uff);
> -	  break;
> -	case 0x103:
> -	  table = u103;
> -	  size = sizeof(u103);
> -	  break;
> -	case 0x104:
> -	  table = u104;
> -	  size = sizeof(u104);
> -	  break;
> -	case 0x1d0:
> -	  table = u1d0;
> -	  size = sizeof(u1d0);
> -	  break;
> -	case 0x1d1:
> -	  table = u1d1;
> -	  size = sizeof(u1d1);
> -	  break;
> -	case 0x1d4:
> -	  table = u1d4;
> -	  size = sizeof(u1d4);
> -	  break;
> -	case 0x1d5:
> -	  table = u1d5;
> -	  size = sizeof(u1d5);
> -	  break;
> -	case 0x1d6:
> -	  table = u1d6;
> -	  size = sizeof(u1d6);
> -	  break;
> -	case 0x1d7:
> -	  table = u1d7;
> -	  size = sizeof(u1d7);
> -	  break;
> -	case 0x2a6:
> -	  table = u2a6;
> -	  size = sizeof(u2a6);
> -	  break;
> -	case 0x2fa:
> -	  table = u2fa;
> -	  size = sizeof(u2fa);
> -	  break;
> -	case 0xe00:
> -	  table = ue00;
> -	  size = sizeof(ue00);
> -	  break;
> -	case 0xfff:
> -	  table = ufff;
> -	  size = sizeof(ufff);
> -	  break;
> -	case 0x10ff:
> -	  table = u10ff;
> -	  size = sizeof(u10ff);
> -	  break;
> -	default:
> -	  return 0;
> -	}
> -      /* we have narrowed down to a section of 256 characters to check */
> -      /* now check if c matches the printuation wide-chars within that section */
> -      ptr = (unsigned char *)table;
> -      ctmp = (unsigned char)c;
> -      while (ptr < table + size)
> +      if (ctmp < *ptr)
> +	return 0;
> +      /* otherwise c > *ptr */
> +      /* look for 0x0 as next element which indicates a range */
> +      ++ptr;
> +      if (*ptr == 0x0)
>  	{
> -	  if (ctmp == *ptr)
> +	  /* we have a range..see if c falls within range */
> +	  ++ptr;
> +	  if (ctmp <= *ptr)
>  	    return 1;
> -	  if (ctmp < *ptr)
> -	    return 0;
> -	  /* otherwise c > *ptr */
> -	  /* look for 0x0 as next element which indicates a range */
>  	  ++ptr;
> -	  if (*ptr == 0x0)
> -	    {
> -	      /* we have a range..see if c falls within range */
> -	      ++ptr;
> -	      if (ctmp <= *ptr)
> -		return 1;
> -	      ++ptr;
> -	    }
>  	}
> -      /* not in table */
> -      return 0;
>      }
> -#endif /* _MB_CAPABLE */
> -
> +  /* not in table */
> +  return 0;
> +#else
>    return (c < (wint_t)0x100 ? isprint (c) : 0);
> +#endif /* _MB_CAPABLE */
>  }
>  
> Index: libc/ctype/iswpunct.c
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/ctype/iswpunct.c,v
> retrieving revision 1.5
> diff -u -p -r1.5 iswpunct.c
> --- libc/ctype/iswpunct.c	3 Mar 2009 09:28:45 -0000	1.5
> +++ libc/ctype/iswpunct.c	22 Mar 2009 16:25:06 -0000
> @@ -70,260 +70,243 @@ int
>  _DEFUN(iswpunct,(c), wint_t c)
>  {
>  #ifdef _MB_CAPABLE
> -  int unicode = 0;
> +  unsigned const char *table;
> +  unsigned char *ptr;
> +  unsigned char ctmp;
> +  int size;
> +  wint_t x;
>  
>    if (!strcmp (__locale_charset (), "JIS"))
> -    {
> -      c = __jp2uc (c, JP_JIS);
> -      unicode = 1;
> -    }
> +    c = __jp2uc (c, JP_JIS);
>    else if (!strcmp (__locale_charset (), "SJIS"))
> -    {
> -      c = __jp2uc (c, JP_SJIS);
> -      unicode = 1;
> -    }
> +    c = __jp2uc (c, JP_SJIS);
>    else if (!strcmp (__locale_charset (), "EUCJP"))
> +    c = __jp2uc (c, JP_EUCJP);
> +
> +  x = (c >> 8);
> +  /* for some large sections, all characters are punctuation so handle them here */
> +  if ((x >= 0xe0 && x <= 0xf8) ||
> +      (x >= 0xf00 && x <= 0xffe) ||
> +      (x >= 0x1000 && x <= 0x10fe))
> +    return 1;
> +  
> +  switch (x)
>      {
> -      c = __jp2uc (c, JP_EUCJP);
> -      unicode = 1;
> -    }
> -  else if (!strcmp (__locale_charset (), "UTF-8"))
> -    {
> -      unicode = 1;
> +    case 0x22:
> +    case 0x25:
> +    case 0x28:
> +    case 0x29:
> +    case 0x2a:
> +      return 1;
> +    case 0x00:
> +      table = u0;
> +      size = sizeof(u0);
> +      break;
> +    case 0x02:
> +      table = u2;
> +      size = sizeof(u2);
> +      break;
> +    case 0x03:
> +      table = u3;
> +      size = sizeof(u3);
> +      break;
> +    case 0x04:
> +      table = u4;
> +      size = sizeof(u4);
> +      break;
> +    case 0x05:
> +      table = u5;
> +      size = sizeof(u5);
> +      break;
> +    case 0x06:
> +      table = u6;
> +      size = sizeof(u6);
> +      break;
> +    case 0x07:
> +      table = u7;
> +      size = sizeof(u7);
> +      break;
> +    case 0x09:
> +      table = u9;
> +      size = sizeof(u9);
> +      break;
> +    case 0x0a:
> +      table = ua;
> +      size = sizeof(ua);
> +      break;
> +    case 0x0b:
> +      table = ub;
> +      size = sizeof(ub);
> +      break;
> +    case 0x0c:
> +      table = uc;
> +      size = sizeof(uc);
> +      break;
> +    case 0x0d:
> +      table = ud;
> +      size = sizeof(ud);
> +      break;
> +    case 0x0e:
> +      table = ue;
> +      size = sizeof(ue);
> +      break;
> +    case 0x0f:
> +      table = uf;
> +      size = sizeof(uf);
> +      break;
> +    case 0x10:
> +      table = u10;
> +      size = sizeof(u10);
> +      break;
> +    case 0x13:
> +      table = u13;
> +      size = sizeof(u13);
> +      break;
> +    case 0x16:
> +      table = u16;
> +      size = sizeof(u16);
> +      break;
> +    case 0x17:
> +      table = u17;
> +      size = sizeof(u17);
> +      break;
> +    case 0x18:
> +      table = u18;
> +      size = sizeof(u18);
> +      break;
> +    case 0x1f:
> +      table = u1f;
> +      size = sizeof(u1f);
> +      break;
> +    case 0x20:
> +      table = u20;
> +      size = sizeof(u20);
> +      break;
> +    case 0x21:
> +      table = u21;
> +      size = sizeof(u21);
> +      break;
> +    case 0x23:
> +      table = u23;
> +      size = sizeof(u23);
> +      break;
> +    case 0x24:
> +      table = u24;
> +      size = sizeof(u24);
> +      break;
> +    case 0x26:
> +      table = u26;
> +      size = sizeof(u26);
> +      break;
> +    case 0x27:
> +      table = u27;
> +      size = sizeof(u27);
> +      break;
> +    case 0x2e:
> +      table = u2e;
> +      size = sizeof(u2e);
> +      break;
> +    case 0x2f:
> +      table = u2f;
> +      size = sizeof(u2f);
> +      break;
> +    case 0x30:
> +      table = u30;
> +      size = sizeof(u30);
> +      break;
> +    case 0x31:
> +      table = u31;
> +      size = sizeof(u31);
> +      break;
> +    case 0x32:
> +      table = u32;
> +      size = sizeof(u32);
> +      break;
> +    case 0x33:
> +      table = u33;
> +      size = sizeof(u33);
> +      break;
> +    case 0xa4:
> +      table = ua4;
> +      size = sizeof(ua4);
> +      break;
> +    case 0xfb:
> +      table = ufb;
> +      size = sizeof(ufb);
> +      break;
> +    case 0xfd:
> +      table = ufd;
> +      size = sizeof(ufd);
> +      break;
> +    case 0xfe:
> +      table = ufe;
> +      size = sizeof(ufe);
> +      break;
> +    case 0xff:
> +      table = uff;
> +      size = sizeof(uff);
> +      break;
> +    case 0x103:
> +      table = u103;
> +      size = sizeof(u103);
> +      break;
> +    case 0x1d0:
> +      table = u1d0;
> +      size = sizeof(u1d0);
> +      break;
> +    case 0x1d1:
> +      table = u1d1;
> +      size = sizeof(u1d1);
> +      break;
> +    case 0x1d6:
> +      table = u1d6;
> +      size = sizeof(u1d6);
> +      break;
> +    case 0x1d7:
> +      table = u1d7;
> +      size = sizeof(u1d7);
> +      break;
> +    case 0xe00:
> +      table = ue00;
> +      size = sizeof(ue00);
> +      break;
> +    case 0xfff:
> +      table = ufff;
> +      size = sizeof(ufff);
> +      break;
> +    case 0x10ff:
> +      table = u10ff;
> +      size = sizeof(u10ff);
> +      break;
> +    default:
> +      return 0;
>      }
> -
> -  if (unicode)
> +  /* we have narrowed down to a section of 256 characters to check */
> +  /* now check if c matches the punctuation wide-chars within that section */
> +  ptr = (unsigned char *)table;
> +  ctmp = (unsigned char)c;
> +  while (ptr < table + size)
>      {
> -      unsigned const char *table;
> -      unsigned char *ptr;
> -      unsigned char ctmp;
> -      int size;
> -      wint_t x = (c >> 8);
> -      
> -      /* for some large sections, all characters are punctuation so handle them here */
> -      if ((x >= 0xe0 && x <= 0xf8) ||
> -	  (x >= 0xf00 && x <= 0xffe) ||
> -	  (x >= 0x1000 && x <= 0x10fe))
> +      if (ctmp == *ptr)
>  	return 1;
> -      
> -      switch (x)
> -	{
> -	case 0x22:
> -	case 0x25:
> -	case 0x28:
> -	case 0x29:
> -	case 0x2a:
> -	  return 1;
> -	case 0x00:
> -	  table = u0;
> -	  size = sizeof(u0);
> -	  break;
> -	case 0x02:
> -	  table = u2;
> -	  size = sizeof(u2);
> -	  break;
> -	case 0x03:
> -	  table = u3;
> -	  size = sizeof(u3);
> -	  break;
> -	case 0x04:
> -	  table = u4;
> -	  size = sizeof(u4);
> -	  break;
> -	case 0x05:
> -	  table = u5;
> -	  size = sizeof(u5);
> -	  break;
> -	case 0x06:
> -	  table = u6;
> -	  size = sizeof(u6);
> -	  break;
> -	case 0x07:
> -	  table = u7;
> -	  size = sizeof(u7);
> -	  break;
> -	case 0x09:
> -	  table = u9;
> -	  size = sizeof(u9);
> -	  break;
> -	case 0x0a:
> -	  table = ua;
> -	  size = sizeof(ua);
> -	  break;
> -	case 0x0b:
> -	  table = ub;
> -	  size = sizeof(ub);
> -	  break;
> -	case 0x0c:
> -	  table = uc;
> -	  size = sizeof(uc);
> -	  break;
> -	case 0x0d:
> -	  table = ud;
> -	  size = sizeof(ud);
> -	  break;
> -	case 0x0e:
> -	  table = ue;
> -	  size = sizeof(ue);
> -	  break;
> -	case 0x0f:
> -	  table = uf;
> -	  size = sizeof(uf);
> -	  break;
> -	case 0x10:
> -	  table = u10;
> -	  size = sizeof(u10);
> -	  break;
> -	case 0x13:
> -	  table = u13;
> -	  size = sizeof(u13);
> -	  break;
> -	case 0x16:
> -	  table = u16;
> -	  size = sizeof(u16);
> -	  break;
> -	case 0x17:
> -	  table = u17;
> -	  size = sizeof(u17);
> -	  break;
> -	case 0x18:
> -	  table = u18;
> -	  size = sizeof(u18);
> -	  break;
> -	case 0x1f:
> -	  table = u1f;
> -	  size = sizeof(u1f);
> -	  break;
> -	case 0x20:
> -	  table = u20;
> -	  size = sizeof(u20);
> -	  break;
> -	case 0x21:
> -	  table = u21;
> -	  size = sizeof(u21);
> -	  break;
> -	case 0x23:
> -	  table = u23;
> -	  size = sizeof(u23);
> -	  break;
> -	case 0x24:
> -	  table = u24;
> -	  size = sizeof(u24);
> -	  break;
> -	case 0x26:
> -	  table = u26;
> -	  size = sizeof(u26);
> -	  break;
> -	case 0x27:
> -	  table = u27;
> -	  size = sizeof(u27);
> -	  break;
> -	case 0x2e:
> -	  table = u2e;
> -	  size = sizeof(u2e);
> -	  break;
> -	case 0x2f:
> -	  table = u2f;
> -	  size = sizeof(u2f);
> -	  break;
> -	case 0x30:
> -	  table = u30;
> -	  size = sizeof(u30);
> -	  break;
> -	case 0x31:
> -	  table = u31;
> -	  size = sizeof(u31);
> -	  break;
> -	case 0x32:
> -	  table = u32;
> -	  size = sizeof(u32);
> -	  break;
> -	case 0x33:
> -	  table = u33;
> -	  size = sizeof(u33);
> -	  break;
> -	case 0xa4:
> -	  table = ua4;
> -	  size = sizeof(ua4);
> -	  break;
> -	case 0xfb:
> -	  table = ufb;
> -	  size = sizeof(ufb);
> -	  break;
> -	case 0xfd:
> -	  table = ufd;
> -	  size = sizeof(ufd);
> -	  break;
> -	case 0xfe:
> -	  table = ufe;
> -	  size = sizeof(ufe);
> -	  break;
> -	case 0xff:
> -	  table = uff;
> -	  size = sizeof(uff);
> -	  break;
> -	case 0x103:
> -	  table = u103;
> -	  size = sizeof(u103);
> -	  break;
> -	case 0x1d0:
> -	  table = u1d0;
> -	  size = sizeof(u1d0);
> -	  break;
> -	case 0x1d1:
> -	  table = u1d1;
> -	  size = sizeof(u1d1);
> -	  break;
> -	case 0x1d6:
> -	  table = u1d6;
> -	  size = sizeof(u1d6);
> -	  break;
> -	case 0x1d7:
> -	  table = u1d7;
> -	  size = sizeof(u1d7);
> -	  break;
> -	case 0xe00:
> -	  table = ue00;
> -	  size = sizeof(ue00);
> -	  break;
> -	case 0xfff:
> -	  table = ufff;
> -	  size = sizeof(ufff);
> -	  break;
> -	case 0x10ff:
> -	  table = u10ff;
> -	  size = sizeof(u10ff);
> -	  break;
> -	default:
> -	  return 0;
> -	}
> -      /* we have narrowed down to a section of 256 characters to check */
> -      /* now check if c matches the punctuation wide-chars within that section */
> -      ptr = (unsigned char *)table;
> -      ctmp = (unsigned char)c;
> -      while (ptr < table + size)
> +      if (ctmp < *ptr)
> +	return 0;
> +      /* otherwise c > *ptr */
> +      /* look for 0x0 as next element which indicates a range */
> +      ++ptr;
> +      if (*ptr == 0x0)
>  	{
> -	  if (ctmp == *ptr)
> +	  /* we have a range..see if c falls within range */
> +	  ++ptr;
> +	  if (ctmp <= *ptr)
>  	    return 1;
> -	  if (ctmp < *ptr)
> -	    return 0;
> -	  /* otherwise c > *ptr */
> -	  /* look for 0x0 as next element which indicates a range */
>  	  ++ptr;
> -	  if (*ptr == 0x0)
> -	    {
> -	      /* we have a range..see if c falls within range */
> -	      ++ptr;
> -	      if (ctmp <= *ptr)
> -		return 1;
> -	      ++ptr;
> -	    }
>  	}
> -      /* not in table */
> -      return 0;
>      }
> -#endif /* _MB_CAPABLE */
> -
> +  /* not in table */
> +  return 0;
> +#else
>    return (c < (wint_t)0x100 ? ispunct (c) : 0);
> +#endif /* _MB_CAPABLE */
>  }
>  
> Index: libc/ctype/iswspace.c
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/ctype/iswspace.c,v
> retrieving revision 1.5
> diff -u -p -r1.5 iswspace.c
> --- libc/ctype/iswspace.c	3 Mar 2009 09:28:45 -0000	1.5
> +++ libc/ctype/iswspace.c	22 Mar 2009 16:25:06 -0000
> @@ -66,38 +66,19 @@ int
>  _DEFUN(iswspace,(c), wint_t c)
>  {
>  #ifdef _MB_CAPABLE
> -  int unicode = 0;
> -
>    if (!strcmp (__locale_charset (), "JIS"))
> -    {
> -      c = __jp2uc (c, JP_JIS);
> -      unicode = 1;
> -    }
> +    c = __jp2uc (c, JP_JIS);
>    else if (!strcmp (__locale_charset (), "SJIS"))
> -    {
> -      c = __jp2uc (c, JP_SJIS);
> -      unicode = 1;
> -    }
> +    c = __jp2uc (c, JP_SJIS);
>    else if (!strcmp (__locale_charset (), "EUCJP"))
> -    {
> -      c = __jp2uc (c, JP_EUCJP);
> -      unicode = 1;
> -    }
> -  else if (!strcmp (__locale_charset (), "UTF-8"))
> -    {
> -      unicode = 1;
> -    }
> -
> -  if (unicode)
> -    {
> -      return ((c >= 0x0009 && c <= 0x000d) || c == 0x0020 || c == 0x1680 ||
> -              (c >= 0x2000 && c <= 0x2006) ||
> -              (c >= 0x2008 && c <= 0x200b) ||
> -              c == 0x2028 || c == 0x2029 ||
> -              c == 0x205f || c == 0x3000);
> -    }
> -#endif /* _MB_CAPABLE */
> -
> +    c = __jp2uc (c, JP_EUCJP);
> +  return ((c >= 0x0009 && c <= 0x000d) || c == 0x0020 || c == 0x1680 ||
> +	  (c >= 0x2000 && c <= 0x2006) ||
> +	  (c >= 0x2008 && c <= 0x200b) ||
> +	  c == 0x2028 || c == 0x2029 ||
> +	  c == 0x205f || c == 0x3000);
> +#else
>    return (c < 0x100 ? isspace (c) : 0);
> +#endif /* _MB_CAPABLE */
>  }
>  
> Index: libc/ctype/jp2uc.c
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/ctype/jp2uc.c,v
> retrieving revision 1.3
> diff -u -p -r1.3 jp2uc.c
> --- libc/ctype/jp2uc.c	23 Apr 2004 21:44:21 -0000	1.3
> +++ libc/ctype/jp2uc.c	22 Mar 2009 16:25:06 -0000
> @@ -41,6 +41,11 @@
>  wint_t
>  _DEFUN (__jp2uc, (c, type), wint_t c _AND int type)
>  {
> +/* Under Cygwin, the incoming wide character is already given in UTF due
> +   to the requirements of the underlying OS. */
> +#ifdef  __CYGWIN__
> +  return c;
> +#else
>    int index, adj;
>    unsigned char byte1, byte2;
>    wint_t ret;
> @@ -140,6 +145,7 @@ _DEFUN (__jp2uc, (c, type), wint_t c _AN
>      }
>  
>    return WEOF; 
> +#endif
>  }
>  
>  #endif /* _MB_CAPABLE */
> Index: libc/ctype/towlower.c
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/ctype/towlower.c,v
> retrieving revision 1.5
> diff -u -p -r1.5 towlower.c
> --- libc/ctype/towlower.c	3 Mar 2009 09:28:45 -0000	1.5
> +++ libc/ctype/towlower.c	22 Mar 2009 16:25:06 -0000
> @@ -70,405 +70,388 @@ wint_t
>  _DEFUN(towlower,(c), wint_t c)
>  {
>  #ifdef _MB_CAPABLE
> -  int unicode = 0;
> -
>    if (!strcmp (__locale_charset (), "JIS"))
> -    {
> -      c = __jp2uc (c, JP_JIS);
> -      unicode = 1;
> -    }
> +    c = __jp2uc (c, JP_JIS);
>    else if (!strcmp (__locale_charset (), "SJIS"))
> -    {
> -      c = __jp2uc (c, JP_SJIS);
> -      unicode = 1;
> -    }
> +    c = __jp2uc (c, JP_SJIS);
>    else if (!strcmp (__locale_charset (), "EUCJP"))
> +    c = __jp2uc (c, JP_EUCJP);
> +
> +  if (c < 0x100)
>      {
> -      c = __jp2uc (c, JP_EUCJP);
> -      unicode = 1;
> -    }
> -  else if (!strcmp (__locale_charset (), "UTF-8"))
> -    {
> -      unicode = 1;
> -    }
> +      if ((c >= 0x0041 && c <= 0x005a) ||
> +	  (c >= 0x00c0 && c <= 0x00de))
> +	return (c + 0x20);
>  
> -  if (unicode)
> +      if (c == 0x00b5)
> +	return 0x03bc;
> +      
> +      return c;
> +    }
> +  else if (c < 0x300)
>      {
> -      if (c < 0x100)
> +      if ((c >= 0x0100 && c <= 0x012e) ||
> +	  (c >= 0x0132 && c <= 0x0136) ||
> +	  (c >= 0x014a && c <= 0x0176) ||
> +	  (c >= 0x01de && c <= 0x01ee) ||
> +	  (c >= 0x01f8 && c <= 0x021e) ||
> +	  (c >= 0x0222 && c <= 0x0232))
>  	{
> -	  if ((c >= 0x0041 && c <= 0x005a) ||
> -	      (c >= 0x00c0 && c <= 0x00de))
> -	    return (c + 0x20);
> +	  if (!(c & 0x01))
> +	    return (c + 1);
> +	  return c;
> +	}
>  
> -	  if (c == 0x00b5)
> -	    return 0x03bc;
> -	  
> +      if ((c >= 0x0139 && c <= 0x0147) ||
> +	  (c >= 0x01cd && c <= 0x91db))
> +	{
> +	  if (c & 0x01)
> +	    return (c + 1);
>  	  return c;
>  	}
> -      else if (c < 0x300)
> +      
> +      if (c >= 0x178 && c <= 0x01f7)
>  	{
> -	  if ((c >= 0x0100 && c <= 0x012e) ||
> -	      (c >= 0x0132 && c <= 0x0136) ||
> -	      (c >= 0x014a && c <= 0x0176) ||
> -	      (c >= 0x01de && c <= 0x01ee) ||
> -	      (c >= 0x01f8 && c <= 0x021e) ||
> -	      (c >= 0x0222 && c <= 0x0232))
> +	  wint_t k;
> +	  switch (c)
>  	    {
> -	      if (!(c & 0x01))
> -		return (c + 1);
> -	      return c;
> +	    case 0x0178:
> +	      k = 0x00ff;
> +	      break;
> +	    case 0x0179:
> +	    case 0x017b:
> +	    case 0x017d:
> +	    case 0x0182:
> +	    case 0x0184:
> +	    case 0x0187:
> +	    case 0x018b:
> +	    case 0x0191:
> +	    case 0x0198:
> +	    case 0x01a0:
> +	    case 0x01a2:
> +	    case 0x01a4:
> +	    case 0x01a7:
> +	    case 0x01ac:
> +	    case 0x01af:
> +	    case 0x01b3:
> +	    case 0x01b5:
> +	    case 0x01b8:
> +	    case 0x01bc:
> +	    case 0x01c5:
> +	    case 0x01c8:
> +	    case 0x01cb:
> +	    case 0x01cd:
> +	    case 0x01cf:
> +	    case 0x01d1:
> +	    case 0x01d3:
> +	    case 0x01d5:
> +	    case 0x01d7:
> +	    case 0x01d9:
> +	    case 0x01db:
> +	    case 0x01f2:
> +	    case 0x01f4:
> +	      k = c + 1;
> +	      break;
> +	    case 0x017f:
> +	      k = 0x0073;
> +	      break;
> +	    case 0x0181:
> +	      k = 0x0253;
> +	      break;
> +	    case 0x0186:
> +	      k = 0x0254;
> +	      break;
> +	    case 0x0189:
> +	      k = 0x0256;
> +	      break;
> +	    case 0x018a:
> +	      k = 0x0257;
> +	      break;
> +	    case 0x018e:
> +	      k = 0x01dd;
> +	      break;
> +	    case 0x018f:
> +	      k = 0x0259;
> +	      break;
> +	    case 0x0190:
> +	      k = 0x025b;
> +	      break;
> +	    case 0x0193:
> +	      k = 0x0260;
> +	      break;
> +	    case 0x0194:
> +	      k = 0x0263;
> +	      break;
> +	    case 0x0196:
> +	      k = 0x0269;
> +	      break;
> +	    case 0x0197:
> +	      k = 0x0268;
> +	      break;
> +	    case 0x019c:
> +	      k = 0x026f;
> +	      break;
> +	    case 0x019d:
> +	      k = 0x0272;
> +	      break;
> +	    case 0x019f:
> +	      k = 0x0275;
> +	      break;
> +	    case 0x01a6:
> +	      k = 0x0280;
> +	      break;
> +	    case 0x01a9:
> +	      k = 0x0283;
> +	      break;
> +	    case 0x01ae:
> +	      k = 0x0288;
> +	      break;
> +	    case 0x01b1:
> +	      k = 0x028a;
> +	      break;
> +	    case 0x01b2:
> +	      k = 0x028b;
> +	      break;
> +	    case 0x01b7:
> +	      k = 0x0292;
> +	      break;
> +	    case 0x01c4:
> +	    case 0x01c7:
> +	    case 0x01ca:
> +	    case 0x01f1:
> +	      k = c + 2;
> +	      break;
> +	    case 0x01f6:
> +	      k = 0x0195;
> +	      break;
> +	    case 0x01f7:
> +	      k = 0x01bf;
> +	      break;
> +	    default:
> +	      k = 0;
>  	    }
> +	  if (k != 0)
> +	    return k;
> +	}
>  
> -	  if ((c >= 0x0139 && c <= 0x0147) ||
> -	      (c >= 0x01cd && c <= 0x91db))
> -	    {
> -	      if (c & 0x01)
> -		return (c + 1);
> -	      return c;
> -	    }
> -	  
> -	  if (c >= 0x178 && c <= 0x01f7)
> +      if (c == 0x0220)
> +	return 0x019e;
> +    }
> +  else if (c < 0x0400)
> +    {
> +      if (c >= 0x0391 && c <= 0x03ab && c != 0x03a2)
> +	return (c + 0x20);
> +      if (c >= 0x03d8 && c <= 0x03ee && !(c & 0x01))
> +	return (c + 1);
> +      if (c >= 0x0386 && c <= 0x03f5)
> +	{
> +	  wint_t k;
> +	  switch (c)
>  	    {
> -	      wint_t k;
> -	      switch (c)
> -		{
> -		case 0x0178:
> -		  k = 0x00ff;
> -		  break;
> -		case 0x0179:
> -		case 0x017b:
> -		case 0x017d:
> -		case 0x0182:
> -		case 0x0184:
> -		case 0x0187:
> -		case 0x018b:
> -		case 0x0191:
> -		case 0x0198:
> -		case 0x01a0:
> -		case 0x01a2:
> -		case 0x01a4:
> -		case 0x01a7:
> -		case 0x01ac:
> -		case 0x01af:
> -		case 0x01b3:
> -		case 0x01b5:
> -		case 0x01b8:
> -		case 0x01bc:
> -		case 0x01c5:
> -		case 0x01c8:
> -		case 0x01cb:
> -		case 0x01cd:
> -		case 0x01cf:
> -		case 0x01d1:
> -		case 0x01d3:
> -		case 0x01d5:
> -		case 0x01d7:
> -		case 0x01d9:
> -		case 0x01db:
> -		case 0x01f2:
> -		case 0x01f4:
> -		  k = c + 1;
> -		  break;
> -		case 0x017f:
> -		  k = 0x0073;
> -		  break;
> -		case 0x0181:
> -		  k = 0x0253;
> -		  break;
> -		case 0x0186:
> -		  k = 0x0254;
> -		  break;
> -		case 0x0189:
> -		  k = 0x0256;
> -		  break;
> -		case 0x018a:
> -		  k = 0x0257;
> -		  break;
> -		case 0x018e:
> -		  k = 0x01dd;
> -		  break;
> -		case 0x018f:
> -		  k = 0x0259;
> -		  break;
> -		case 0x0190:
> -		  k = 0x025b;
> -		  break;
> -		case 0x0193:
> -		  k = 0x0260;
> -		  break;
> -		case 0x0194:
> -		  k = 0x0263;
> -		  break;
> -		case 0x0196:
> -		  k = 0x0269;
> -		  break;
> -		case 0x0197:
> -		  k = 0x0268;
> -		  break;
> -		case 0x019c:
> -		  k = 0x026f;
> -		  break;
> -		case 0x019d:
> -		  k = 0x0272;
> -		  break;
> -		case 0x019f:
> -		  k = 0x0275;
> -		  break;
> -		case 0x01a6:
> -		  k = 0x0280;
> -		  break;
> -		case 0x01a9:
> -		  k = 0x0283;
> -		  break;
> -		case 0x01ae:
> -		  k = 0x0288;
> -		  break;
> -		case 0x01b1:
> -		  k = 0x028a;
> -		  break;
> -		case 0x01b2:
> -		  k = 0x028b;
> -		  break;
> -		case 0x01b7:
> -		  k = 0x0292;
> -		  break;
> -		case 0x01c4:
> -		case 0x01c7:
> -		case 0x01ca:
> -		case 0x01f1:
> -		  k = c + 2;
> -		  break;
> -		case 0x01f6:
> -		  k = 0x0195;
> -		  break;
> -		case 0x01f7:
> -		  k = 0x01bf;
> -		  break;
> -		default:
> -		  k = 0;
> -		}
> -	      if (k != 0)
> -		return k;
> +	    case 0x0386:
> +	      k = 0x03ac;
> +	      break;
> +	    case 0x0388:
> +	      k = 0x03ad;
> +	      break;
> +	    case 0x0389:
> +	      k = 0x03ae;
> +	      break;
> +	    case 0x038a:
> +	      k = 0x03af;
> +	      break;
> +	    case 0x038c:
> +	      k = 0x03cc;
> +	      break;
> +	    case 0x038e:
> +	      k = 0x03cd;
> +	      break;
> +	    case 0x038f:
> +	      k = 0x038f;
> +	      break;
> +	    case 0x03c2:
> +	      k = 0x03c3;
> +	      break;
> +	    case 0x03d0:
> +	      k = 0x03b2;
> +	      break;
> +	    case 0x03d1:
> +	      k = 0x03b8;
> +	      break;
> +	    case 0x03d5:
> +	      k = 0x03c6;
> +	      break;
> +	    case 0x03d6:
> +	      k = 0x03c0;
> +	      break;
> +	    case 0x03f0:
> +	      k = 0x03ba;
> +	      break;
> +	    case 0x03f1:
> +	      k = 0x03c1;
> +	      break;
> +	    case 0x03f2:
> +	      k = 0x03c3;
> +	      break;
> +	    case 0x03f4:
> +	      k = 0x03b8;
> +	      break;
> +	    case 0x03f5:
> +	      k = 0x03b5;
> +	      break;
> +	    default:
> +	      k = 0;
>  	    }
> -
> -	  if (c == 0x0220)
> -	    return 0x019e;
> +	  if (k != 0)
> +	    return k;
>  	}
> -      else if (c < 0x0400)
> +
> +      if (c == 0x0345)
> +	return 0x03b9;
> +    }
> +  else if (c < 0x500)
> +    {
> +      if (c >= 0x0400 && c <= 0x040f)
> +	return (c + 0x50);
> +      
> +      if (c >= 0x0410 && c <= 0x042f)
> +	return (c + 0x20);
> +      
> +      if ((c >= 0x0460 && c <= 0x0480) ||
> +	  (c >= 0x048a && c <= 0x04be) ||
> +	  (c >= 0x04d0 && c <= 0x04f4) ||
> +	  (c == 0x04f8))
>  	{
> -	  if (c >= 0x0391 && c <= 0x03ab && c != 0x03a2)
> -	    return (c + 0x20);
> -	  if (c >= 0x03d8 && c <= 0x03ee && !(c & 0x01))
> +	  if (!(c & 0x01))
>  	    return (c + 1);
> -	  if (c >= 0x0386 && c <= 0x03f5)
> -	    {
> -	      wint_t k;
> -	      switch (c)
> -		{
> -		case 0x0386:
> -		  k = 0x03ac;
> -		  break;
> -		case 0x0388:
> -		  k = 0x03ad;
> -		  break;
> -		case 0x0389:
> -		  k = 0x03ae;
> -		  break;
> -		case 0x038a:
> -		  k = 0x03af;
> -		  break;
> -		case 0x038c:
> -		  k = 0x03cc;
> -		  break;
> -		case 0x038e:
> -		  k = 0x03cd;
> -		  break;
> -		case 0x038f:
> -		  k = 0x038f;
> -		  break;
> -		case 0x03c2:
> -		  k = 0x03c3;
> -		  break;
> -		case 0x03d0:
> -		  k = 0x03b2;
> -		  break;
> -		case 0x03d1:
> -		  k = 0x03b8;
> -		  break;
> -		case 0x03d5:
> -		  k = 0x03c6;
> -		  break;
> -		case 0x03d6:
> -		  k = 0x03c0;
> -		  break;
> -		case 0x03f0:
> -		  k = 0x03ba;
> -		  break;
> -		case 0x03f1:
> -		  k = 0x03c1;
> -		  break;
> -		case 0x03f2:
> -		  k = 0x03c3;
> -		  break;
> -		case 0x03f4:
> -		  k = 0x03b8;
> -		  break;
> -		case 0x03f5:
> -		  k = 0x03b5;
> -		  break;
> -		default:
> -		  k = 0;
> -		}
> -	      if (k != 0)
> -		return k;
> -	    }
> -
> -	  if (c == 0x0345)
> -	    return 0x03b9;
> +	  return c;
>  	}
> -      else if (c < 0x500)
> +      
> +      if (c >= 0x04c1 && c <= 0x04cd)
>  	{
> -	  if (c >= 0x0400 && c <= 0x040f)
> -	    return (c + 0x50);
> -	  
> -	  if (c >= 0x0410 && c <= 0x042f)
> -	    return (c + 0x20);
> -	  
> -	  if ((c >= 0x0460 && c <= 0x0480) ||
> -	      (c >= 0x048a && c <= 0x04be) ||
> -	      (c >= 0x04d0 && c <= 0x04f4) ||
> -	      (c == 0x04f8))
> -	    {
> -	      if (!(c & 0x01))
> -		return (c + 1);
> -	      return c;
> -	    }
> -	  
> -	  if (c >= 0x04c1 && c <= 0x04cd)
> -	    {
> -	      if (c & 0x01)
> -		return (c + 1);
> -	      return c;
> -	    }
> +	  if (c & 0x01)
> +	    return (c + 1);
> +	  return c;
>  	}
> -      else if (c < 0x1f00)
> +    }
> +  else if (c < 0x1f00)
> +    {
> +      if ((c >= 0x0500 && c <= 0x050e) ||
> +	  (c >= 0x1e00 && c <= 0x1e94) ||
> +	  (c >= 0x1ea0 && c <= 0x1ef8))
>  	{
> -	  if ((c >= 0x0500 && c <= 0x050e) ||
> -	      (c >= 0x1e00 && c <= 0x1e94) ||
> -	      (c >= 0x1ea0 && c <= 0x1ef8))
> -	    {
> -	      if (!(c & 0x01))
> -		return (c + 1);
> -	      return c;
> -	    }
> -	  
> -	  if (c >= 0x0531 && c <= 0x0556)
> -	    return (c + 0x30);
> -
> -	  if (c == 0x1e9b)
> -	    return 0x1e61;
> +	  if (!(c & 0x01))
> +	    return (c + 1);
> +	  return c;
>  	}
> -      else if (c < 0x2000)
> +      
> +      if (c >= 0x0531 && c <= 0x0556)
> +	return (c + 0x30);
> +
> +      if (c == 0x1e9b)
> +	return 0x1e61;
> +    }
> +  else if (c < 0x2000)
> +    {
> +      if ((c >= 0x1f08 && c <= 0x1f0f) ||
> +	  (c >= 0x1f18 && c <= 0x1f1d) ||
> +	  (c >= 0x1f28 && c <= 0x1f2f) ||
> +	  (c >= 0x1f38 && c <= 0x1f3f) ||
> +	  (c >= 0x1f48 && c <= 0x1f4d) ||
> +	  (c >= 0x1f68 && c <= 0x1f6f) ||
> +	  (c >= 0x1f88 && c <= 0x1f8f) ||
> +	  (c >= 0x1f98 && c <= 0x1f9f) ||
> +	  (c >= 0x1fa8 && c <= 0x1faf))
> +	return (c - 0x08);
> +
> +      if (c >= 0x1f59 && c <= 0x1f5f)
>  	{
> -	  if ((c >= 0x1f08 && c <= 0x1f0f) ||
> -	      (c >= 0x1f18 && c <= 0x1f1d) ||
> -	      (c >= 0x1f28 && c <= 0x1f2f) ||
> -	      (c >= 0x1f38 && c <= 0x1f3f) ||
> -	      (c >= 0x1f48 && c <= 0x1f4d) ||
> -	      (c >= 0x1f68 && c <= 0x1f6f) ||
> -	      (c >= 0x1f88 && c <= 0x1f8f) ||
> -	      (c >= 0x1f98 && c <= 0x1f9f) ||
> -	      (c >= 0x1fa8 && c <= 0x1faf))
> +	  if (c & 0x01)
>  	    return (c - 0x08);
> -
> -	  if (c >= 0x1f59 && c <= 0x1f5f)
> -	    {
> -	      if (c & 0x01)
> -		return (c - 0x08);
> -	      return c;
> -	    }
> -	
> -	  if (c >= 0x1fb8 && c <= 0x1ffc)
> +	  return c;
> +	}
> +    
> +      if (c >= 0x1fb8 && c <= 0x1ffc)
> +	{
> +	  wint_t k;
> +	  switch (c)
>  	    {
> -	      wint_t k;
> -	      switch (c)
> -		{
> -		case 0x1fb8:
> -		case 0x1fb9:
> -		case 0x1fd8:
> -		case 0x1fd9:
> -		case 0x1fe8:
> -		case 0x1fe9:
> -		  k = c - 0x08;
> -		  break;
> -		case 0x1fba:
> -		case 0x1fbb:
> -		  k = c - 0x4a;
> -		  break;
> -		case 0x1fbc:
> -		  k = 0x1fb3;
> -		  break;
> -		case 0x1fbe:
> -		  k = 0x03b9;
> -		  break;
> -		case 0x1fc8:
> -		case 0x1fc9:
> -		case 0x1fca:
> -		case 0x1fcb:
> -		  k = c - 0x56;
> -		  break;
> -		case 0x1fcc:
> -		  k = 0x1fc3;
> -		  break;
> -		case 0x1fda:
> -		case 0x1fdb:
> -		  k = c - 0x64;
> -		  break;
> -		case 0x1fea:
> -		case 0x1feb:
> -		  k = c - 0x70;
> -		  break;
> -		case 0x1fec:
> -		  k = 0x1fe5;
> -		  break;
> -		case 0x1ffa:
> -		case 0x1ffb:
> -		  k = c - 0x7e;
> -		  break;
> -		case 0x1ffc:
> -		  k = 0x1ff3;
> -		  break;
> -		default:
> -		  k = 0;
> -		}
> -	      if (k != 0)
> -		return k;
> +	    case 0x1fb8:
> +	    case 0x1fb9:
> +	    case 0x1fd8:
> +	    case 0x1fd9:
> +	    case 0x1fe8:
> +	    case 0x1fe9:
> +	      k = c - 0x08;
> +	      break;
> +	    case 0x1fba:
> +	    case 0x1fbb:
> +	      k = c - 0x4a;
> +	      break;
> +	    case 0x1fbc:
> +	      k = 0x1fb3;
> +	      break;
> +	    case 0x1fbe:
> +	      k = 0x03b9;
> +	      break;
> +	    case 0x1fc8:
> +	    case 0x1fc9:
> +	    case 0x1fca:
> +	    case 0x1fcb:
> +	      k = c - 0x56;
> +	      break;
> +	    case 0x1fcc:
> +	      k = 0x1fc3;
> +	      break;
> +	    case 0x1fda:
> +	    case 0x1fdb:
> +	      k = c - 0x64;
> +	      break;
> +	    case 0x1fea:
> +	    case 0x1feb:
> +	      k = c - 0x70;
> +	      break;
> +	    case 0x1fec:
> +	      k = 0x1fe5;
> +	      break;
> +	    case 0x1ffa:
> +	    case 0x1ffb:
> +	      k = c - 0x7e;
> +	      break;
> +	    case 0x1ffc:
> +	      k = 0x1ff3;
> +	      break;
> +	    default:
> +	      k = 0;
>  	    }
> +	  if (k != 0)
> +	    return k;
>  	}
> -      else 
> -	{
> -	  if (c >= 0x2160 && c <= 0x216f)
> -	    return (c + 0x10);
> -	  
> -	  if (c >= 0x24b6 && c <= 0x24cf)
> -	    return (c + 0x1a);
> -	  
> -	  if (c >= 0xff21 && c <= 0xff3a)
> -	    return (c + 0x20);
> -	  
> -	  if (c >= 0x10400 && c <= 0x10425)
> -	    return (c + 0x28);
> +    }
> +  else 
> +    {
> +      if (c >= 0x2160 && c <= 0x216f)
> +	return (c + 0x10);
> +      
> +      if (c >= 0x24b6 && c <= 0x24cf)
> +	return (c + 0x1a);
> +      
> +      if (c >= 0xff21 && c <= 0xff3a)
> +	return (c + 0x20);
> +      
> +      if (c >= 0x10400 && c <= 0x10425)
> +	return (c + 0x28);
>  
> -	  if (c == 0x2126)
> -	    return 0x03c9;
> -	  if (c == 0x212a)
> -	    return 0x006b;
> -	  if (c == 0x212b)
> -	    return 0x00e5;
> -	}
> -    }     
> -#endif /* _MB_CAPABLE */
> -  
> +      if (c == 0x2126)
> +	return 0x03c9;
> +      if (c == 0x212a)
> +	return 0x006b;
> +      if (c == 0x212b)
> +	return 0x00e5;
> +    }
> +  return c;
> +#else
>    return (c < 0x00ff ? (wint_t)(tolower ((int)c)) : c);
> +#endif /* _MB_CAPABLE */
>  }
>  
> Index: libc/ctype/towupper.c
> ===================================================================
> RCS file: /cvs/src/src/newlib/libc/ctype/towupper.c,v
> retrieving revision 1.5
> diff -u -p -r1.5 towupper.c
> --- libc/ctype/towupper.c	3 Mar 2009 09:28:45 -0000	1.5
> +++ libc/ctype/towupper.c	22 Mar 2009 16:25:07 -0000
> @@ -70,432 +70,415 @@ wint_t
>  _DEFUN(towupper,(c), wint_t c)
>  {
>  #ifdef _MB_CAPABLE
> -  int unicode = 0;
> -
>    if (!strcmp (__locale_charset (), "JIS"))
> -    {
> -      c = __jp2uc (c, JP_JIS);
> -      unicode = 1;
> -    }
> +    c = __jp2uc (c, JP_JIS);
>    else if (!strcmp (__locale_charset (), "SJIS"))
> -    {
> -      c = __jp2uc (c, JP_SJIS);
> -      unicode = 1;
> -    }
> +    c = __jp2uc (c, JP_SJIS);
>    else if (!strcmp (__locale_charset (), "EUCJP"))
> +    c = __jp2uc (c, JP_EUCJP);
> +
> +  if (c < 0x100)
>      {
> -      c = __jp2uc (c, JP_EUCJP);
> -      unicode = 1;
> -    }
> -  else if (!strcmp (__locale_charset (), "UTF-8"))
> -    {
> -      unicode = 1;
> +      if (c == 0x00b5)
> +	return 0x039c;
> +      
> +      if ((c >= 0x00e0 && c <= 0x00fe) ||
> +	  (c >= 0x0061 && c <= 0x007a))
> +	return (c - 0x20);
> +      
> +      if (c == 0xff)
> +	return 0x0178;
> +      
> +      return c;
>      }
> -
> -  if (unicode)
> +  else if (c < 0x300)
>      {
> -      if (c < 0x100)
> +      if ((c >= 0x0101 && c <= 0x012f) ||
> +	  (c >= 0x0133 && c <= 0x0137) ||
> +	  (c >= 0x014b && c <= 0x0177) ||
> +	  (c >= 0x01df && c <= 0x01ef) ||
> +	  (c >= 0x01f9 && c <= 0x021f) ||
> +	  (c >= 0x0223 && c <= 0x0233))
>  	{
> -	  if (c == 0x00b5)
> -	    return 0x039c;
> -	  
> -	  if ((c >= 0x00e0 && c <= 0x00fe) ||
> -	      (c >= 0x0061 && c <= 0x007a))
> -	    return (c - 0x20);
> -	  
> -	  if (c == 0xff)
> -	    return 0x0178;
> -	  
> +	  if (c & 0x01)
> +	    return (c - 1);
>  	  return c;
>  	}
> -      else if (c < 0x300)
> -	{
> -	  if ((c >= 0x0101 && c <= 0x012f) ||
> -	      (c >= 0x0133 && c <= 0x0137) ||
> -	      (c >= 0x014b && c <= 0x0177) ||
> -	      (c >= 0x01df && c <= 0x01ef) ||
> -	      (c >= 0x01f9 && c <= 0x021f) ||
> -	      (c >= 0x0223 && c <= 0x0233))
> -	    {
> -	      if (c & 0x01)
> -		return (c - 1);
> -	      return c;
> -	    }
>  
> -	  if ((c >= 0x013a && c <= 0x0148) ||
> -	      (c >= 0x01ce && c <= 0x1dc))
> -	    {
> -	      if (!(c & 0x01))
> -		return (c - 1);
> -	      return c;
> -	    }
> -	  
> -	  if (c == 0x0131)
> -	    return 0x0049;
> -	  
> -	  if (c == 0x017a || c == 0x017c || c == 0x017e)
> +      if ((c >= 0x013a && c <= 0x0148) ||
> +	  (c >= 0x01ce && c <= 0x1dc))
> +	{
> +	  if (!(c & 0x01))
>  	    return (c - 1);
> -	  
> -	  if (c >= 0x017f && c <= 0x0292)
> -	    {
> -	      wint_t k;
> -	      switch (c)
> -		{
> -		case 0x017f:
> -		  k = 0x0053;
> -		  break;
> -		case 0x0183:
> -		  k = 0x0182;
> -		  break;
> -		case 0x0185:
> -		  k = 0x0184;
> -		  break;
> -		case 0x0188:
> -		  k = 0x0187;
> -		  break;
> -		case 0x018c:
> -		  k = 0x018b;
> -		  break;
> -		case 0x0192:
> -		  k = 0x0191;
> -		  break;
> -		case 0x0195:
> -		  k = 0x01f6;
> -		  break;
> -		case 0x0199:
> -		  k = 0x0198;
> -		  break;
> -		case 0x019e:
> -		  k = 0x0220;
> -		  break;
> -		case 0x01a1:
> -		case 0x01a3:
> -		case 0x01a5:
> -		case 0x01a8:
> -		case 0x01ad:
> -		case 0x01b0:
> -		case 0x01b4:
> -		case 0x01b6:
> -		case 0x01b9:
> -		case 0x01bd:
> -		case 0x01c5:
> -		case 0x01c8:
> -		case 0x01cb:
> -		case 0x01f2:
> -		case 0x01f5:
> -		  k = c - 1;
> -		  break;
> -		case 0x01bf:
> -		  k = 0x01f7;
> -		  break;
> -		case 0x01c6:
> -		case 0x01c9:
> -		case 0x01cc:
> -		  k = c - 2;
> -		  break;
> -		case 0x01dd:
> -		  k = 0x018e;
> -		  break;
> -		case 0x01f3:
> -		  k = 0x01f1;
> -		  break;
> -		case 0x0253:
> -		  k = 0x0181;
> -		  break;
> -		case 0x0254:
> -		  k = 0x0186;
> -		  break;
> -		case 0x0256:
> -		  k = 0x0189;
> -		  break;
> -		case 0x0257:
> -		  k = 0x018a;
> -		  break;
> -		case 0x0259:
> -		  k = 0x018f;
> -		  break;
> -		case 0x025b:
> -		  k = 0x0190;
> -		  break;
> -		case 0x0260:
> -		  k = 0x0193;
> -		  break;
> -		case 0x0263:
> -		  k = 0x0194;
> -		  break;
> -		case 0x0268:
> -		  k = 0x0197;
> -		  break;
> -		case 0x0269:
> -		  k = 0x0196;
> -		  break;
> -		case 0x026f:
> -		  k = 0x019c;
> -		  break;
> -		case 0x0272:
> -		  k = 0x019d;
> -		  break;
> -		case 0x0275:
> -		  k = 0x019f;
> -		  break;
> -		case 0x0280:
> -		  k = 0x01a6;
> -		  break;
> -		case 0x0283:
> -		  k = 0x01a9;
> -		  break;
> -		case 0x0288:
> -		  k = 0x01ae;
> -		  break;
> -		case 0x028a:
> -		  k = 0x01b1;
> -		  break;
> -		case 0x028b:
> -		  k = 0x01b2;
> -		  break;
> -		case 0x0292:
> -		  k = 0x01b7;
> -		  break;
> -		default:
> -		  k = 0;
> -		}
> -	      if (k != 0)
> -		return k;
> -	    }
> +	  return c;
>  	}
> -      else if (c < 0x0400)
> +      
> +      if (c == 0x0131)
> +	return 0x0049;
> +      
> +      if (c == 0x017a || c == 0x017c || c == 0x017e)
> +	return (c - 1);
> +      
> +      if (c >= 0x017f && c <= 0x0292)
>  	{
> -	  if (c == 0x03ac)
> -	    return 0x0386;
> -	  
> -	  if ((c & 0xfff0) == 0x03a0 && c >= 0x03ad)
> -	    return (c - 0x15);
> -	  
> -	  if (c >= 0x03b1 && c <= 0x03cb && c != 0x03c2)
> -	    return (c - 0x20);
> -	  
> -	  if (c == 0x03c2)
> -	    return 0x03a3;
> -	  
> -	  if (c >= 0x03cc && c <= 0x03f5)
> +	  wint_t k;
> +	  switch (c)
>  	    {
> -	      wint_t k;
> -	      switch (c)
> -		{
> -		case 0x03cc:
> -		  k = 0x038c;
> -		  break;
> -		case 0x03cd:
> -		case 0x03ce:
> -		  k = c - 0x3f;
> -		  break;
> -		case 0x03d0:
> -		  k = 0x0392;
> -		  break;
> -		case 0x03d1:
> -		  k = 0x0398;
> -		  break;
> -		case 0x03d5:
> -		  k = 0x03a6;
> -		  break;
> -		case 0x03d6:
> -		  k = 0x03a0;
> -		  break;
> -		case 0x03d9:
> -		case 0x03db:
> -		case 0x03dd:
> -		case 0x03df:
> -		case 0x03e1:
> -		case 0x03e3:
> -		case 0x03e5:
> -		case 0x03e7:
> -		case 0x03e9:
> -		case 0x03eb:
> -		case 0x03ed:
> -		case 0x03ef:
> -		  k = c - 1;
> -		  break;
> -		case 0x03f0:
> -		  k = 0x039a;
> -		  break;
> -		case 0x03f1:
> -		  k = 0x03a1;
> -		  break;
> -		case 0x03f2:
> -		  k = 0x03a3;
> -		  break;
> -		case 0x03f5:
> -		  k = 0x0395;
> -		  break;
> -		default:
> -		  k = 0;
> -		}
> -	      if (k != 0)
> -		return k;
> +	    case 0x017f:
> +	      k = 0x0053;
> +	      break;
> +	    case 0x0183:
> +	      k = 0x0182;
> +	      break;
> +	    case 0x0185:
> +	      k = 0x0184;
> +	      break;
> +	    case 0x0188:
> +	      k = 0x0187;
> +	      break;
> +	    case 0x018c:
> +	      k = 0x018b;
> +	      break;
> +	    case 0x0192:
> +	      k = 0x0191;
> +	      break;
> +	    case 0x0195:
> +	      k = 0x01f6;
> +	      break;
> +	    case 0x0199:
> +	      k = 0x0198;
> +	      break;
> +	    case 0x019e:
> +	      k = 0x0220;
> +	      break;
> +	    case 0x01a1:
> +	    case 0x01a3:
> +	    case 0x01a5:
> +	    case 0x01a8:
> +	    case 0x01ad:
> +	    case 0x01b0:
> +	    case 0x01b4:
> +	    case 0x01b6:
> +	    case 0x01b9:
> +	    case 0x01bd:
> +	    case 0x01c5:
> +	    case 0x01c8:
> +	    case 0x01cb:
> +	    case 0x01f2:
> +	    case 0x01f5:
> +	      k = c - 1;
> +	      break;
> +	    case 0x01bf:
> +	      k = 0x01f7;
> +	      break;
> +	    case 0x01c6:
> +	    case 0x01c9:
> +	    case 0x01cc:
> +	      k = c - 2;
> +	      break;
> +	    case 0x01dd:
> +	      k = 0x018e;
> +	      break;
> +	    case 0x01f3:
> +	      k = 0x01f1;
> +	      break;
> +	    case 0x0253:
> +	      k = 0x0181;
> +	      break;
> +	    case 0x0254:
> +	      k = 0x0186;
> +	      break;
> +	    case 0x0256:
> +	      k = 0x0189;
> +	      break;
> +	    case 0x0257:
> +	      k = 0x018a;
> +	      break;
> +	    case 0x0259:
> +	      k = 0x018f;
> +	      break;
> +	    case 0x025b:
> +	      k = 0x0190;
> +	      break;
> +	    case 0x0260:
> +	      k = 0x0193;
> +	      break;
> +	    case 0x0263:
> +	      k = 0x0194;
> +	      break;
> +	    case 0x0268:
> +	      k = 0x0197;
> +	      break;
> +	    case 0x0269:
> +	      k = 0x0196;
> +	      break;
> +	    case 0x026f:
> +	      k = 0x019c;
> +	      break;
> +	    case 0x0272:
> +	      k = 0x019d;
> +	      break;
> +	    case 0x0275:
> +	      k = 0x019f;
> +	      break;
> +	    case 0x0280:
> +	      k = 0x01a6;
> +	      break;
> +	    case 0x0283:
> +	      k = 0x01a9;
> +	      break;
> +	    case 0x0288:
> +	      k = 0x01ae;
> +	      break;
> +	    case 0x028a:
> +	      k = 0x01b1;
> +	      break;
> +	    case 0x028b:
> +	      k = 0x01b2;
> +	      break;
> +	    case 0x0292:
> +	      k = 0x01b7;
> +	      break;
> +	    default:
> +	      k = 0;
>  	    }
> +	  if (k != 0)
> +	    return k;
>  	}
> -      else if (c < 0x500)
> +    }
> +  else if (c < 0x0400)
> +    {
> +      if (c == 0x03ac)
> +	return 0x0386;
> +      
> +      if ((c & 0xfff0) == 0x03a0 && c >= 0x03ad)
> +	return (c - 0x15);
> +      
> +      if (c >= 0x03b1 && c <= 0x03cb && c != 0x03c2)
> +	return (c - 0x20);
> +      
> +      if (c == 0x03c2)
> +	return 0x03a3;
> +      
> +      if (c >= 0x03cc && c <= 0x03f5)
>  	{
> -	  if (c >= 0x0450 && c <= 0x045f)
> -	    return (c - 0x50);
> -	  
> -	  if (c >= 0x0430 && c <= 0x044f)
> -	    return (c - 0x20);
> -	  
> -	  if ((c >= 0x0461 && c <= 0x0481) ||
> -	      (c >= 0x048b && c <= 0x04bf) ||
> -	      (c >= 0x04d1 && c <= 0x04f5))
> -	    {
> -	      if (c & 0x01)
> -		return (c - 1);
> -	      return c;
> -	    }
> -	  
> -	  if (c >= 0x04c2 && c <= 0x04ce)
> +	  wint_t k;
> +	  switch (c)
>  	    {
> -	      if (!(c & 0x01))
> -		return (c - 1);
> -	      return c;
> +	    case 0x03cc:
> +	      k = 0x038c;
> +	      break;
> +	    case 0x03cd:
> +	    case 0x03ce:
> +	      k = c - 0x3f;
> +	      break;
> +	    case 0x03d0:
> +	      k = 0x0392;
> +	      break;
> +	    case 0x03d1:
> +	      k = 0x0398;
> +	      break;
> +	    case 0x03d5:
> +	      k = 0x03a6;
> +	      break;
> +	    case 0x03d6:
> +	      k = 0x03a0;
> +	      break;
> +	    case 0x03d9:
> +	    case 0x03db:
> +	    case 0x03dd:
> +	    case 0x03df:
> +	    case 0x03e1:
> +	    case 0x03e3:
> +	    case 0x03e5:
> +	    case 0x03e7:
> +	    case 0x03e9:
> +	    case 0x03eb:
> +	    case 0x03ed:
> +	    case 0x03ef:
> +	      k = c - 1;
> +	      break;
> +	    case 0x03f0:
> +	      k = 0x039a;
> +	      break;
> +	    case 0x03f1:
> +	      k = 0x03a1;
> +	      break;
> +	    case 0x03f2:
> +	      k = 0x03a3;
> +	      break;
> +	    case 0x03f5:
> +	      k = 0x0395;
> +	      break;
> +	    default:
> +	      k = 0;
>  	    }
> -	  
> -	  if (c == 0x04f9)
> -	    return 0x04f8;
> +	  if (k != 0)
> +	    return k;
>  	}
> -      else if (c < 0x1f00)
> +    }
> +  else if (c < 0x500)
> +    {
> +      if (c >= 0x0450 && c <= 0x045f)
> +	return (c - 0x50);
> +      
> +      if (c >= 0x0430 && c <= 0x044f)
> +	return (c - 0x20);
> +      
> +      if ((c >= 0x0461 && c <= 0x0481) ||
> +	  (c >= 0x048b && c <= 0x04bf) ||
> +	  (c >= 0x04d1 && c <= 0x04f5))
>  	{
> -	  if ((c >= 0x0501 && c <= 0x050f) ||
> -	      (c >= 0x1e01 && c <= 0x1e95) ||
> -	      (c >= 0x1ea1 && c <= 0x1ef9))
> -	    {
> -	      if (c & 0x01)
> -		return (c - 1);
> -	      return c;
> -	    }
> -	  
> -	  if (c >= 0x0561 && c <= 0x0586)
> -	    return (c - 0x30);
> -
> -	  if (c == 0x1e9b)
> -	    return 0x1e60;
> +	  if (c & 0x01)
> +	    return (c - 1);
> +	  return c;
>  	}
> -      else if (c < 0x2000)
> +      
> +      if (c >= 0x04c2 && c <= 0x04ce)
>  	{
> -	  
> -	  if ((c >= 0x1f00 && c <= 0x1f07) ||
> -	      (c >= 0x1f10 && c <= 0x1f15) ||
> -	      (c >= 0x1f20 && c <= 0x1f27) ||
> -	      (c >= 0x1f30 && c <= 0x1f37) ||
> -	      (c >= 0x1f40 && c <= 0x1f45) ||
> -	      (c >= 0x1f60 && c <= 0x1f67) ||
> -	      (c >= 0x1f80 && c <= 0x1f87) ||
> -	      (c >= 0x1f90 && c <= 0x1f97) ||
> -	      (c >= 0x1fa0 && c <= 0x1fa7))
> -	    return (c + 0x08);
> - 
> -	  if (c >= 0x1f51 && c <= 0x1f57 && (c & 0x01))
> -	    return (c + 0x08);
> -	  
> -	  if (c >= 0x1f70 && c <= 0x1ff3)
> -	    {
> -	      wint_t k;
> -	      switch (c)
> -		{
> -		case 0x1fb0:
> -		  k = 0x1fb8;
> -		  break;
> -		case 0x1fb1:
> -		  k = 0x1fb9;
> -		  break;
> -		case 0x1f70:
> -		  k = 0x1fba;
> -		  break;
> -		case 0x1f71:
> -		  k = 0x1fbb;
> -		  break;
> -		case 0x1fb3:
> -		  k = 0x1fbc;
> -		  break;
> -		case 0x1fbe:
> -		  k = 0x0399;
> -		  break;
> -		case 0x1f72:
> -		  k = 0x1fc8;
> -		  break;
> -		case 0x1f73:
> -		  k = 0x1fc9;
> -		  break;
> -		case 0x1f74:
> -		  k = 0x1fca;
> -		  break;
> -		case 0x1f75:
> -		  k = 0x1fcb;
> -		  break;
> -		case 0x1fd0:
> -		  k = 0x1fd8;
> -		  break;
> -		case 0x1fd1:
> -		  k = 0x1fd9;
> -		  break;
> -		case 0x1f76:
> -		  k = 0x1fda;
> -		  break;
> -		case 0x1f77:
> -		  k = 0x1fdb;
> -		  break;
> -		case 0x1fe0:
> -		  k = 0x1fe8;
> -		  break;
> -		case 0x1fe1:
> -		  k = 0x1fe9;
> -		  break;
> -		case 0x1f7a:
> -		  k = 0x1fea;
> -		  break;
> -		case 0x1f7b:
> -		  k = 0x1feb;
> -		  break;
> -		case 0x1fe5:
> -		  k = 0x1fec;
> -		  break;
> -		case 0x1f78:
> -		  k = 0x1ff8;
> -		  break;
> -		case 0x1f79:
> -		  k = 0x1ff9;
> -		  break;
> -		case 0x1f7c:
> -		  k = 0x1ffa;
> -		  break;
> -		case 0x1f7d:
> -		  k = 0x1ffb;
> -		  break;
> -		case 0x1ff3:
> -		  k = 0x1ffc;
> -		  break;
> -		default:
> -		  k = 0;
> -		}
> -	      if (k != 0)
> -		return k;
> -	    }
> +	  if (!(c & 0x01))
> +	    return (c - 1);
> +	  return c;
>  	}
> -      else 
> +      
> +      if (c == 0x04f9)
> +	return 0x04f8;
> +    }
> +  else if (c < 0x1f00)
> +    {
> +      if ((c >= 0x0501 && c <= 0x050f) ||
> +	  (c >= 0x1e01 && c <= 0x1e95) ||
> +	  (c >= 0x1ea1 && c <= 0x1ef9))
>  	{
> -	  if (c >= 0x2170 && c <= 0x217f)
> -	    return (c - 0x10);
> -	  
> -	  if (c >= 0x24d0 && c <= 0x24e9)
> -	    return (c - 0x1a);
> -	  
> -	  if (c >= 0xff41 && c <= 0xff5a)
> -	    return (c - 0x20);
> -	  
> -	  if (c >= 0x10428 && c <= 0x1044d)
> -	    return (c - 0x28);
> +	  if (c & 0x01)
> +	    return (c - 1);
> +	  return c;
>  	}
> -    }     
> -#endif /* _MB_CAPABLE */
> -  
> +      
> +      if (c >= 0x0561 && c <= 0x0586)
> +	return (c - 0x30);
> +
> +      if (c == 0x1e9b)
> +	return 0x1e60;
> +    }
> +  else if (c < 0x2000)
> +    {
> +      
> +      if ((c >= 0x1f00 && c <= 0x1f07) ||
> +	  (c >= 0x1f10 && c <= 0x1f15) ||
> +	  (c >= 0x1f20 && c <= 0x1f27) ||
> +	  (c >= 0x1f30 && c <= 0x1f37) ||
> +	  (c >= 0x1f40 && c <= 0x1f45) ||
> +	  (c >= 0x1f60 && c <= 0x1f67) ||
> +	  (c >= 0x1f80 && c <= 0x1f87) ||
> +	  (c >= 0x1f90 && c <= 0x1f97) ||
> +	  (c >= 0x1fa0 && c <= 0x1fa7))
> +	return (c + 0x08);
> +
> +      if (c >= 0x1f51 && c <= 0x1f57 && (c & 0x01))
> +	return (c + 0x08);
> +      
> +      if (c >= 0x1f70 && c <= 0x1ff3)
> +	{
> +	  wint_t k;
> +	  switch (c)
> +	    {
> +	    case 0x1fb0:
> +	      k = 0x1fb8;
> +	      break;
> +	    case 0x1fb1:
> +	      k = 0x1fb9;
> +	      break;
> +	    case 0x1f70:
> +	      k = 0x1fba;
> +	      break;
> +	    case 0x1f71:
> +	      k = 0x1fbb;
> +	      break;
> +	    case 0x1fb3:
> +	      k = 0x1fbc;
> +	      break;
> +	    case 0x1fbe:
> +	      k = 0x0399;
> +	      break;
> +	    case 0x1f72:
> +	      k = 0x1fc8;
> +	      break;
> +	    case 0x1f73:
> +	      k = 0x1fc9;
> +	      break;
> +	    case 0x1f74:
> +	      k = 0x1fca;
> +	      break;
> +	    case 0x1f75:
> +	      k = 0x1fcb;
> +	      break;
> +	    case 0x1fd0:
> +	      k = 0x1fd8;
> +	      break;
> +	    case 0x1fd1:
> +	      k = 0x1fd9;
> +	      break;
> +	    case 0x1f76:
> +	      k = 0x1fda;
> +	      break;
> +	    case 0x1f77:
> +	      k = 0x1fdb;
> +	      break;
> +	    case 0x1fe0:
> +	      k = 0x1fe8;
> +	      break;
> +	    case 0x1fe1:
> +	      k = 0x1fe9;
> +	      break;
> +	    case 0x1f7a:
> +	      k = 0x1fea;
> +	      break;
> +	    case 0x1f7b:
> +	      k = 0x1feb;
> +	      break;
> +	    case 0x1fe5:
> +	      k = 0x1fec;
> +	      break;
> +	    case 0x1f78:
> +	      k = 0x1ff8;
> +	      break;
> +	    case 0x1f79:
> +	      k = 0x1ff9;
> +	      break;
> +	    case 0x1f7c:
> +	      k = 0x1ffa;
> +	      break;
> +	    case 0x1f7d:
> +	      k = 0x1ffb;
> +	      break;
> +	    case 0x1ff3:
> +	      k = 0x1ffc;
> +	      break;
> +	    default:
> +	      k = 0;
> +	    }
> +	  if (k != 0)
> +	    return k;
> +	}
> +    }
> +  else 
> +    {
> +      if (c >= 0x2170 && c <= 0x217f)
> +	return (c - 0x10);
> +      
> +      if (c >= 0x24d0 && c <= 0x24e9)
> +	return (c - 0x1a);
> +      
> +      if (c >= 0xff41 && c <= 0xff5a)
> +	return (c - 0x20);
> +      
> +      if (c >= 0x10428 && c <= 0x1044d)
> +	return (c - 0x28);
> +    }
> +  return c;
> +#else
>    return (c < 0x00ff ? (wint_t)(toupper ((int)c)) : c);
> +#endif /* _MB_CAPABLE */
>  }
>  
>
>   



More information about the Newlib mailing list