Зачем в библиотеки 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