OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Четверг, 19 Октябрь, 2017 02:55

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 46 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
СообщениеДобавлено: Четверг, 01 Ноябрь, 2012 20:20 
Аватара пользователя

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 427
Откуда: Егорьевск
Верно. Но дело ещё в том, что кодировка iconv, которую надо указывать, чтобы порядок следования байтов был такой же, как на данной машине, зависит от реализации iconv. Для Linux (glibc iconv) это "UCS-2", для OpenBSD (libiconv) это "UCS-2-INTERNAL". А "UCS-2LE" и "UCS-2BE" более однозначны.

А в том, что "IMPORT Kernel", ничего плохого нет -- это же Host.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 02 Ноябрь, 2012 00:51 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 8821
Откуда: Россия, Орёл
Может быть, ты открыл в памяти текстовик с обратным порядком байт - не как массив CHAR, а более низкоуровнево, как массив BYTE, допустим, и обратился к iconv... Так что, что энтот iconv просит уточнить порядок - это логично.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 16 Сентябрь, 2014 01:45 
Аватара пользователя

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1157
Откуда: Tel-Aviv
Alexander Shiryaev писал(а):
Реализовал преобразование кодировки имён файлов и каталогов и переменных окружения в HostFiles через iconv:
Код:
MODULE LinIconv ["libc.so.6"]; (* Linux *)

   IMPORT Libc := LinLibc;

   CONST
      NULL* = Libc.NULL;

   TYPE
      PtrVoid = Libc.PtrVoid;
      PtrSTR* = Libc.PtrSTR;
      PtrLSTR* = POINTER TO ARRAY [untagged] OF CHAR;
      size_t* = Libc.size_t;

      iconv_t* = PtrVoid;

   PROCEDURE [ccall] iconv_open* (tocode, fromcode: PtrSTR): iconv_t;
   PROCEDURE [ccall] iconv_close* (cd: iconv_t): INTEGER;

   PROCEDURE [ccall] iconv* (cd: iconv_t; VAR [nil] inbuf: PtrSTR; VAR inbytesleft: size_t; VAR [nil] outbuf: PtrSTR; VAR outbytesleft: size_t): size_t;

   PROCEDURE [ccall] iconv_encode* ["iconv"] (cd: iconv_t; VAR [nil] inbuf: PtrLSTR; VAR inbytesleft: size_t; VAR [nil] outbuf: PtrSTR; VAR outbytesleft: size_t): size_t;

   PROCEDURE [ccall] iconv_decode* ["iconv"] (cd: iconv_t; VAR [nil] inbuf: PtrSTR; VAR inbytesleft: size_t; VAR [nil] outbuf: PtrLSTR; VAR outbytesleft: size_t): size_t;

END LinIconv.
...
...

Полностью HostFiles для Linux.

Проверял в Ubuntu и в Fedora Core с кодировкой UTF-8 ("UTF8" тоже работает), в OpenBSD -- с KOI8-R.

Хочу поинтересоваться из каких заголовков были получены определения функций iconv_encode и iconv_decode? Я нигде не смог найти их определение.

Поиск по Гуглю по "iconv_encode" выдаёт лишь ссылки с упоминанием инициативы перевода BlackBox на Линукс.
https://www.google.ru/search?q=%22iconv_encode%22&hl=ru


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 16 Сентябрь, 2014 09:52 
Аватара пользователя

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 427
Откуда: Егорьевск
Ни из каких. Эти функции нужны только для удобной работы с типом данных PtrLSTR. См. те места, где они вызываются.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 16 Сентябрь, 2014 11:32 
Аватара пользователя

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1157
Откуда: Tel-Aviv
Прошу прощения, не обратил внимание на то что по факту функции iconv_encode, iconv_decode используются в качестве alias из-за флага ["iconv"].

Спасибо за пояснение.

И с таким выравниванием чуточку понятнее в чём суть этих функций:
Код:
   PROCEDURE [ccall] iconv*                  (cd: iconv_t; VAR [nil] inbuf: PtrSTR;  VAR inbytesleft: size_t; VAR [nil] outbuf: PtrSTR;  VAR outbytesleft: size_t): size_t;
   PROCEDURE [ccall] iconv_encode* ["iconv"] (cd: iconv_t; VAR [nil] inbuf: PtrLSTR; VAR inbytesleft: size_t; VAR [nil] outbuf: PtrSTR;  VAR outbytesleft: size_t): size_t;
   PROCEDURE [ccall] iconv_decode* ["iconv"] (cd: iconv_t; VAR [nil] inbuf: PtrSTR;  VAR inbytesleft: size_t; VAR [nil] outbuf: PtrLSTR; VAR outbytesleft: size_t): size_t;


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 04 Ноябрь, 2014 00:45 
Аватара пользователя

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 427
Откуда: Егорьевск
Alexander Shiryaev писал(а):
Ошибки исправил...

Исправлена ещё одна ошибка.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 46 ]  На страницу Пред.  1, 2, 3

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
cron
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2017, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB