This is the mail archive of the
cygwin
mailing list for the Cygwin project.
Re: KOI8
On Aug 22 09:45, Andy Koppe wrote:
> Corinna Vinschen:
> >> > Anyway, to help support them, the attached patch adds the KOI8
> >> > charsets to newlib's Unicode conversion and ctype tables. I took the
> >> > conversion tables from iconv and adapted the ctype tables from the
> >> > CP1251 version. Since KOI8 has printable characters in the C1 range
> >> > from 0x80 to 0x9F, it seems easiest to treat them as Windows
> >> > codepages.
> >> >
> >> > To complete support, "KOI8-R" and "KOI8-U" would need to be recognised
> >> > in _setlocale_r and mapped to codepages 20866 and 21866.
> >>
> >> I'd suggest to add the missing code to loadlocale() ?(the internally
> >> used charset should be set to "CP20866"/"CP21866", but it seems you know
> >> this already) and send the entire patch, together with a ChangeLog
> >> entry, to the newlib list. ?If you could base it on my pending proposal
> >> to make the charset case insensitive
> >> http://sourceware.org/ml/newlib/2009/msg00840.html, that would be great.
> >
> > I applied this patch ?a couple of minutes ago, so you can simply base
> > your patch on current CVS.
>
> Okay, will do.
Thanks! Here's a (untested) suggestion:
Index: libc/locale/locale.c
===================================================================
RCS file: /cvs/src/src/newlib/libc/locale/locale.c,v
retrieving revision 1.23
diff -u -p -r1.23 locale.c
--- libc/locale/locale.c 21 Aug 2009 20:56:13 -0000 1.23
+++ libc/locale/locale.c 22 Aug 2009 08:59:04 -0000
@@ -615,6 +615,24 @@ loadlocale(struct _reent *p, int categor
return NULL;
}
break;
+ case 'K':
+ case 'k':
+ if (!strcasecmp (charset, "KOI8-R"))
+ strcpy (charset, "CP20866");
+ else if (!strcasecmp (charset, "KOI8-U"))
+ strcpy (charset, "CP21866");
+ else
+ return NULL;
+#ifdef _MB_CAPABLE
+#ifdef _MB_EXTENDED_CHARSETS_WINDOWS
+ l_wctomb = __cp_wctomb;
+ l_mbtowc = __cp_mbtowc;
+#else /* !_MB_EXTENDED_CHARSETS_WINDOWS */
+ l_wctomb = __ascii_wctomb;
+ l_mbtowc = __ascii_mbtowc;
+#endif /* _MB_EXTENDED_CHARSETS_WINDOWS */
+#endif
+ break;
case 'A':
case 'a':
if (strcasecmp (charset, "ASCII"))
Corinna
--
Corinna Vinschen Please, send mails regarding Cygwin to
Cygwin Project Co-Leader cygwin AT cygwin DOT com
Red Hat
--
Problem reports: http://cygwin.com/problems.html
FAQ: http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple