Board.KolibriOS.org

Official KolibriOS board
It is currently Thu Aug 22, 2019 1:42 am

All times are UTC+03:00




Post new topic  Reply to topic  [ 6 posts ] 
Author Message
 Post subject: SysFn2:GetKey
PostPosted: Tue Nov 15, 2016 4:45 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
Как насчёт добавить в эту функцию поддержку Unicode?
У нас там есть ещё свободные биты для этого.
Code:
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]


Top
   
 Post subject: Re: SysFn2:GetKey
PostPosted: Tue Nov 15, 2016 6:44 pm 
Offline
Mentor/Kernel Developer
User avatar

Joined: Thu Mar 26, 2015 5:16 pm
Posts: 1264
Ну, hidnplayr был бы рад. Можно даже отдельную функцию создать. Только для этого надо сделать таблицы для всех раскладок.


Top
   
 Post subject: Re: SysFn2:GetKey
PostPosted: Thu Nov 17, 2016 7:09 pm 
Offline
Kernel Developer
User avatar

Joined: Thu Sep 03, 2009 1:52 pm
Posts: 1620
У меня есть встречное предложение. Хватит мусорных бит: viewtopic.php?p=67209#p67209

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


Top
   
 Post subject: Re: SysFn2:GetKey
PostPosted: Fri Nov 18, 2016 3:59 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
CleverMouse, почему именно UTF-8?
Вообще, вот есть http://en.wikipedia.org/wiki/Comparison_of_Unicode_encodings


Top
   
 Post subject: Re: SysFn2:GetKey
PostPosted: Fri Nov 25, 2016 10:18 pm 
Offline

Joined: Sun Oct 30, 2011 6:43 pm
Posts: 1499
CleverMouse wrote:
У меня есть встречное предложение
Но ведь в этой теме обсуждается конкретно 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 для однобайтной кодировки
Code:
        mov    edi, Str
        mov    ecx, $FFFFFFFF
        xor    eax, eax
        repne scasb
        mov    eax, $FFFFFFFF
        sub    eax, ecx


Как изменится код для UCS-2? Очень просто, изменится только scasb на scasw
Code:
        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.


Top
   
 Post subject: Re: SysFn2:GetKey
PostPosted: Fri Dec 23, 2016 3:25 pm 
Offline
Kernel Developer
User avatar

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

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


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 6 posts ] 

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Limited