Зачем в библиотеки mcurses в функции 'mcurses_addch_or_insch' от символа отнимают 0x20

Пытаюсь работать с библиотекой mcurses при выводе кириллице заметил крокозябры в частности на букву 'Э'. Кодировка cp866. Терминал настроен. Полез разбираться и увидал что в функции 'mcurses_addch_or_insch' зачем то происходит отнимание от символа '0x20' не понял зачем это надо.

сама функция:

    static void
mcurses_addch_or_insch (uint_fast8_t ch, uint_fast8_t insert)
{
    static uint_fast8_t  charset = 0xff;
    static uint_fast8_t  insert_mode = FALSE;

    if (ch >= 0x80 && ch <= 0x9F)
    {
        if (charset != CHARSET_G1)
        {
            mcurses_putc ('\016');                                              // switch to G1 set
            charset = CHARSET_G1;
        }
        ch -= 0x20;                                                             // subtract offset to G1 characters
    }
    else
    {
        if (charset != CHARSET_G0)
        {
            mcurses_putc ('\017');                                              // switch to G0 set
            charset = CHARSET_G0;
        }
    }

    if (insert)
    {
        if (! insert_mode)
        {
            mcurses_puts_P (SEQ_INSERT_MODE);
            insert_mode = TRUE;
        }
    }
    else
    {
        if (insert_mode)
        {
            mcurses_puts_P (SEQ_REPLACE_MODE);
            insert_mode = FALSE;
        }
    }

    mcurses_putc (ch);
    mcurses_curx++;
}

https://github.com/ChrisMicro/mcurses/blob/master/examples/box_demo/box_demo.ino


Ответы (0 шт):