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

Applications development, KoOS API questions
  • 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 вывести?
  • 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 клиента, его длина в байтах оказалась в два раза больше чем было букв
  • 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
  • 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
  • 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:
  • 0CodErr wrote:Похоже, что так и есть
    Textbox, в который мы вводим сообщение, предоставляется ОС Колибри? Получается, на этапе ввода текста это 1 байт CP866, который потом конвертируется в два байта UTF-8 функцией recode_to_utf8 из encodings.inc ? Надеюсь я на верном пути, сейчас пытаюсь понять utf8_table
  • floppy121 wrote:Textbox, в который мы вводим сообщение, предоставляется ОС Колибри?
    Он предоставляется библиотекой box_lib
    floppy121 wrote:Получается, на этапе ввода текста это 1 байт CP866, который потом конвертируется в два байта UTF-8 функцией recode_to_utf8 из encodings.inc ?
    Да, получается так. Но не обязательно в два байта — это зависит от символа: английские буквы, цифры, многие знаки препинания занимают один байт.
  • 0CodErr wrote:Где твой код?
    Как и обещал, выложил свои наработки по IRCC, вот они: viewtopic.php?f=11&p=70875
  • Who is online

    Users browsing this forum: No registered users and 9 guests