Page 1 of 1

Нестандартный ASCII в Kolibri ! + как печатать русские буквы из двух байт?

Posted: Sat Jun 09, 2018 7:41 pm
by floppy121
Вставляя в код IRC-клиента печать различных байтов, я узнал как они выглядят в Kolibri :
https://i.imgur.com/SFWJyEU.png ( https://imgur.com/dDx3rQR ) + та же картинка во вложениях
(Kolibri ASCII table, пожалуйста не уменьшайте в размерах: качество сильно портится)

Получается, для символов 0, 32 и 33 - 126 это ещё соответствует "стандартному ASCII"
( https://www.asciitable.com/ ), а вот для 1-31 и 127 напечатало очень странные символы.
Символ с кодом 3 вообще не смогло напечатать - IRC клиент вылетает.
Ещё: во второй половине байта 128 - 255 нет ни одного символа, нет расширенной ASCII

С этим "нестандартным ASCII" я вроде бы разобрался, но до сих пор не знаю как печатать
русские буквы - знаю только что они состоят из двух байт! И другие двухбайтовые
или даже трёхбайтовые символы которые поддерживаются, особенно языковые:
если в System Settings выбрать эстонский, покажет i с двумя точками и жирный кружочек

Подскажите пожалуйста, где можно узнать более подробно про коды нестандартных символов в Kolibri ?

Re: Нестандартный ASCII в Kolibri ! + как печатать русские буквы из двух байт?

Posted: Sat Jun 09, 2018 9:28 pm
by 0CodErr
floppy121 wrote:Kolibri ASCII table
У нас есть такая программа http://board.kolibrios.org/viewtopic.php?f=42&t=1455
floppy121 wrote:Получается, для символов 0, 32 и 33 - 126 это ещё соответствует "стандартному ASCII"
( https://www.asciitable.com/ ), а вот для 1-31 и 127 напечатало очень странные символы.
В KolibriOS используется кодировка https://ru.wikipedia.org/wiki/CP866 основанная на https://ru.wikipedia.org/wiki/CP437
floppy121 wrote:знаю только что они состоят из двух байт!
В 8-битной кодировке(CP866) символы состоят из одного байта.
floppy121 wrote:Вставляя в код IRC-клиента печать различных байтов
Код в студию! Иначе гадать можно долго — может ты пытаешься UTF-8 или UTF-16 вывести?

Re: Нестандартный ASCII в Kolibri ! + как печатать русские буквы из двух байт?

Posted: Sat Jun 09, 2018 10:40 pm
by floppy121
0CodErr wrote:У нас есть такая программа http://board.kolibrios.org/viewtopic.php?f=42&t=1455
её скрин показывает что у русской буквы А код 128, но когда я пытался символы с такими кодами печатать - ничего не выводило
floppy121 wrote:В KolibriOS используется кодировка https://ru.wikipedia.org/wiki/CP866 основанная на https://ru.wikipedia.org/wiki/CP437
Совпадает расположением символов 0, 32 и 33-126 ; но остальные символы совсем другие! Например, символ с кодом 1: IRC-клиент распечатал чёрный ромб, а в CP866 на этом месте смайлик (более удобная таблица - https://en.wikipedia.org/wiki/Code_page_866) . И символы 128-255 не печатаются
0CodErr wrote:Код в студию! Иначе гадать можно долго — может ты пытаешься UTF-8 или UTF-16 вывести?
IRCC в svn-репозитории Kolibri , там есть файл encodings.inc , но в другом файле userparser.inc (строка 437) в "cmd_usr_code:" (функция для смены кодировки, вызываемая по команде /code) - только "; TODO", поэтому я подумал что encodings неактивен . Русские буквы точно занимают два байта: когда я попробовал написать сообщение по-русски в поле ввода IRC клиента, его длина в байтах оказалась в два раза больше чем было букв

Re: Нестандартный ASCII в Kolibri ! + как печатать русские буквы из двух байт?

Posted: Sat Jun 09, 2018 11:22 pm
by 0CodErr
floppy121 wrote:IRCC в svn-репозитории Kolibri
Я прекрасно знаю, где исходник IRCC. Где твой код?
floppy121 wrote: когда я пытался символы с такими кодами печатать - ничего не выводило
floppy121 wrote:Например, символ с кодом 1: IRC-клиент распечатал чёрный ромб, а в CP866 на этом месте смайлик
floppy121 wrote:Русские буквы точно занимают два байта: когда я попробовал написать сообщение по-русски в поле ввода IRC клиента, его длина в байтах оказалась в два раза больше чем было букв
Ну, значит, это не CP866.

Взял бы что-то попроще тогда, если с IRCC сложно разобраться.
Хотя бы тот же example.asm из дистрибутива.
http://websvn.kolibrios.org/filedetails ... xample.asm

Re: Нестандартный ASCII в Kolibri ! + как печатать русские буквы из двух байт?

Posted: Sat Jun 09, 2018 11:45 pm
by 0CodErr
0CodErr wrote:может ты пытаешься UTF-8 или UTF-16 вывести?
floppy121 wrote: Русские буквы точно занимают два байта:
0CodErr wrote:Ну, значит, это не CP866.
Похоже, что так и есть:

Code: Select all

user_parser:
................................................................................
        mov     esi, input_text
        mov     edi, user_command
        call    recode                                  ; Convert to UTF-8
................................................................................
recode:
        mov     eax, [encoding]
        jmp     [recode_proc+eax*4]



encoding        dd      UTF8

Re: Нестандартный ASCII в Kolibri ! + как печатать русские буквы из двух байт?

Posted: Sat Jun 09, 2018 11:52 pm
by floppy121
0CodErr wrote:Я прекрасно знаю, где исходник IRCC. Где твой код?
Полный код смогу выложить в лучшем случае на следующей неделе, поэтому постараюсь воспроизвести важные моменты по памяти. Для печати символов на экран я изменял сообщение готовое к распечатке внутри userparser.inc ( возможно строки 59-60 ) Прямо перед

Code: Select all

        mov     esi, user_command
        call    print_asciiz
я добавлял код наподобие

Code: Select all

mov byte[user_command + 0], 31
mov byte[user_command + 1], 32
mov byte[user_command + 2], 33
...
, затем писал в консоль длинное сообщение и смотрел/скринил на что заменятся его символы
0CodErr wrote:Взял бы что-то попроще тогда, если с IRCC сложно разобраться
Пытаюсь одну очень важную функцию добавить, уже наполовину получилось несмотря на весьма маленький опыт именно в x86 ассемблере, и разумеется поделюсь с вами :wink:

Re: Нестандартный ASCII в Kolibri ! + как печатать русские буквы из двух байт?

Posted: Sun Jun 10, 2018 12:14 am
by floppy121
0CodErr wrote:Похоже, что так и есть
Textbox, в который мы вводим сообщение, предоставляется ОС Колибри? Получается, на этапе ввода текста это 1 байт CP866, который потом конвертируется в два байта UTF-8 функцией recode_to_utf8 из encodings.inc ? Надеюсь я на верном пути, сейчас пытаюсь понять utf8_table

Re: Нестандартный ASCII в Kolibri ! + как печатать русские буквы из двух байт?

Posted: Mon Jun 11, 2018 11:49 am
by 0CodErr
floppy121 wrote:Textbox, в который мы вводим сообщение, предоставляется ОС Колибри?
Он предоставляется библиотекой box_lib
floppy121 wrote:Получается, на этапе ввода текста это 1 байт CP866, который потом конвертируется в два байта UTF-8 функцией recode_to_utf8 из encodings.inc ?
Да, получается так. Но не обязательно в два байта — это зависит от символа: английские буквы, цифры, многие знаки препинания занимают один байт.

Re: Нестандартный ASCII в Kolibri ! + как печатать русские буквы из двух байт?

Posted: Wed Jul 04, 2018 7:09 pm
by floppy121
0CodErr wrote:Где твой код?
Как и обещал, выложил свои наработки по IRCC, вот они: viewtopic.php?f=11&p=70875