Оцените этот текст:


From: Ales Popov 

 NM)                      libc-5.2.18, ld.so-1.7.14...
Вот в этой библиотеке дело ^^^^^^^^^^  !
Можно просто взять ее с CD Linux.Yes или пересобрать эту библиотеку.
Только надо в сырцах исправить, - это вот с того сидюка:

=== Begin 11.r ===
Eugene Shakhtarin 

Локализация koi8-r для версии libc 5.2.18 (ELF).
Сделано в Linux kernel 1.3.57, gcc 2.7.2.

 1) Описание механизма генерации locale находится здесь:
http://es-sun2.fernuni-hagen.de/public/mirrors/GCC-experimental/Intro

2) Стандарты charmap и locale находятся здесь:
http://www.dkuug.dk/JTC1/SC22/WG15/

3) В дистрибутиве libc 5.2.18 функция libc/locale/ctype.c неисправна,
 а именно, в операторе (is_upper ? toupper_done : tolower_done)
|=  BIT  (token);  выражение  BIT  (token)   равно   0   вместо
необходимой  1  и  tolower_done получает значение 0, даже когда
tolower таблица сформирована. ctype.c далее  принимает  решение
заменить tolower на умолчание.

 Для починки требуется замена в libc/locale/ctype.c:
/*
static unsigned short toupper_done = 0;
static unsigned short tolower_done = 0;
 */
static unsigned toupper_done = 0;
static unsigned tolower_done = 0;

Вот соответствующий патч:
*** ctype.c.orig        Tue Jan 16 19:02:43 1996
--- ctype.c     Tue Jan 16 19:03:23 1996
***************
*** 54,59 ****
--- 54,63 ----
  /* Remember which class or conversion is already done.  */
  static unsigned short class_done = 0;
+ /*
  static unsigned short toupper_done = 0;
  static unsigned short tolower_done = 0;
+  */
+ static unsigned toupper_done = 0;
+ static unsigned tolower_done = 0;

  #define SYNTAX_ERROR \

Здесь находятся
http://eugene.mplik.ru/pub/Linux/utils/nls/locale/libc-5.2.18.fix/
ctype.c -- 6534 исправленный вариант ctype.c
localedef.gz -- 53833 программа, оттранслированная для отладчика с ключем -g

4) Трансляция localedef.c (и locale.c):
make SHARED= programs

5) В libc 5.2.18 поддержка LC_COLLATE не реализована вообще.

6)  Для  генерации  базы данных locale для koi8-r в депозитарии
нет готовых исходных данных.
 http://www.dkuug.dk/JTC1/SC22/WG15/
Исходные данные для генерации koi8-r находятся здесь:
 http://eugene.mplik.ru/pub/Linux/utils/nls/locale/share/nls/charmap/KOI8-R
 http://eugene.mplik.ru/pub/Linux/utils/nls/locale/share/nls/locale/ru_RU

Эти данные подготовлены на основе стандартов ISO 10646 (Unicode),
RFC-1489 и депозитария
http://www.dkuug.dk/JTC1/SC22/WG15/

Файлы  KOI8-R и ru_RU не являются официальными документами и не
обладают никаким формальным статусом. Они сделаны  для  личного
употребления, не имеют ограничений на тиражирование, и гарантия
их пригодности  для  каких-либо  определенных  целей  абсолютно
отсутствует.

7) Генерация базы данных locale для koi8-r.
7.1) Создать каталоги
mkdirhier /usr/share/nls/charmap
mkdir /usr/share/nls/locale
mkdir /usr/share/locale

7.1) Разместить описания KOI8-R и ru_RU в каталогах
/usr/share/nls/charmap/KOI8-R
/usr/share/nls/locale/ru_RU

7.2) Построить описание категорий koi8-r в каталоге /usr/share/locale/koi8-r/
localedef -c -i /usr/share/nls/locale/ru_RU -f KOI8-R koi8-r

 Уже   готовый  набор  описаний  категорий  koi8-r,  полученный
описанным методом, находится в
 http://eugene.mplik.ru/pub/Linux/utils/nls/locale/share/locale/koi8-r/

8) Использование построенной локализации koi8-r.
8.1) Определить переменную командной среды
export LANG=koi8-r

После этого программы, созданные на базе libc 5.2.18 с учетом locale,
будут локализованы соответствующим образом.

8.2) Для интернационализации создаваемой программы необходимо применить
функцию setlocale (см. man setlocale), например:
#include 
#include 
main()
{
int c, C;
setlocale(LC_ALL, "");

c='й';
C=toupper(c);
printf("%c\n", C);

C='Й';
c=tolower(C);
printf("%c\n", c);

}

Last-modified: Sun, 18 Aug 1996 16:43:32 GMT
Оцените этот текст: