This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]