Board.KolibriOS.org

Официальный форум KolibriOS
Текущее время: Вс апр 30, 2017 4:04 pm

Часовой пояс: UTC+03:00




Начать новую тему  Ответить на тему  [ 6 сообщений ] 
Автор Сообщение
 Заголовок сообщения: SysFn2:GetKey
СообщениеДобавлено: Вт ноя 15, 2016 4:45 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 910
Как насчёт добавить в эту функцию поддержку Unicode?
У нас там есть ещё свободные биты для этого.
Код:
Returned value:
  * if the buffer is empty, function returns eax=1
  * if the buffer is not empty, function returns al=0,
    ah=code of the pressed key,
    bits 16-23 = contain scancode for pressed key in ASCII mode,
                 in the scancodes mode this bits cleared.
    bits 23-31 = zero
  * if there is "hotkey", function returns al=2,
    ah=scancode of the pressed key (0 for control keys),
    high word of eax contains a status of control keys at the moment
    of pressing a hotkey

То есть, можно добавить режим UNICODE. И возвращать eax = [Byte:Scan][Word:Key][Byte:0]


Вернуться к началу
 Заголовок сообщения: Re: SysFn2:GetKey
СообщениеДобавлено: Вт ноя 15, 2016 6:44 pm 
Не в сети
Mentor/Kernel Developer
Аватара пользователя

Зарегистрирован: Чт мар 26, 2015 5:16 pm
Сообщения: 1125
Ну, hidnplayr был бы рад. Можно даже отдельную функцию создать. Только для этого надо сделать таблицы для всех раскладок.


Вернуться к началу
 Заголовок сообщения: Re: SysFn2:GetKey
СообщениеДобавлено: Чт ноя 17, 2016 7:09 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Чт сен 03, 2009 1:52 pm
Сообщения: 1591
У меня есть встречное предложение. Хватит мусорных бит: viewtopic.php?p=67209#p67209

_________________
Сделаем мир лучше!


Вернуться к началу
 Заголовок сообщения: Re: SysFn2:GetKey
СообщениеДобавлено: Пт ноя 18, 2016 3:59 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 910
CleverMouse, почему именно UTF-8?
Вообще, вот есть http://en.wikipedia.org/wiki/Comparison_of_Unicode_encodings


Вернуться к началу
 Заголовок сообщения: Re: SysFn2:GetKey
СообщениеДобавлено: Пт ноя 25, 2016 10:18 pm 
Не в сети

Зарегистрирован: Вс окт 30, 2011 6:43 pm
Сообщения: 910
CleverMouse писал(а):
У меня есть встречное предложение
Но ведь в этой теме обсуждается конкретно SysFn2. Разве есть необходимость с клавиатуры вводить что-то за пределами https://en.wikipedia.org/wiki/Plane_%28 ... gual_Plane ?

Ну а за UTF-16 я потому что в ней символ может состоять или из 2-ух, или из 4-ёх байтов. В то время как в UTF-8 4 варианта(1|2|3|4). Это дополнительные проверки в коде, меньше производительность. Хуже, наверное, только EBCDIC.
В плане совместимости, файловые функции уже давно поддерживают UTF-16.

Вообще, в плане эффективности, как мне кажется, UCS-2(2 байта на символ) будет ещё лучше. Проще и быстрее строковые функции. Можно элементарно обратиться к i-ому символу, а не парсить всё до него как в UTF-8\16.

Вот смотри, пусть есть StrLen для однобайтной кодировки
Код:
        mov    edi, Str
        mov    ecx, $FFFFFFFF
        xor    eax, eax
        repne scasb
        mov    eax, $FFFFFFFF
        sub    eax, ecx


Как изменится код для UCS-2? Очень просто, изменится только scasb на scasw
Код:
        mov    edi, Str
        mov    ecx, $FFFFFFFF
        xor    eax, eax
        repne scasw
        mov    eax, $FFFFFFFF
        sub    eax, ecx


А для UTF-8/16 надо больше городить, будет гораздо больше проверок. Это даже если реально там символы помещаются в рамки UCS-2.

Я вовсе не хочу сказать, что надо отказываться от поддержки UTF-8\16. Но всему должно быть своё место.
Снова скажу, что в основном всё же используется Basic Multilingual Plane. А если нужно будет перекодировать, то пусть в библиотеке будут функции UCS2<->UTF16, UCS2<->UTF8, UTF16<->UTF8.


Вернуться к началу
 Заголовок сообщения: Re: SysFn2:GetKey
СообщениеДобавлено: Пт дек 23, 2016 3:25 pm 
Не в сети
Kernel Developer
Аватара пользователя

Зарегистрирован: Чт сен 03, 2009 1:52 pm
Сообщения: 1591
http://utf8everywhere.org/
Любой код, считающий количество unicode codepoints в строке, сломан. strlen имеет смысл только как количество байт в строке, и в этом значении он остаётся абсолютно одинаковым для однобайтовых кодировок и utf-8.

_________________
Сделаем мир лучше!


Вернуться к началу
Показать сообщения за:  Поле сортировки  
Начать новую тему  Ответить на тему  [ 6 сообщений ] 

Часовой пояс: UTC+03:00


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

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


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

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Limited
Русская поддержка phpBB