LINUX.ORG.RU

ncurses. mvwaddwch. Где?

 , ,


0

1

Мне надо вывести странную хрень с помощью ncurses.
Литеры будут юникодными, поэтому использую wchar_t;
Интернет говорит, что для этого следует использовать функцию mvwaddwch. А в какой она либе? Мне кажется в моей реализации ncurses такого нет. Может и не должно быть?
Или, если я вообще хрень какую-то делаю, как правильно выводить юникод при том условии, что мне надо работать именно с буквами по отдельности, а не с байтами? И надо иметь возможность нарисовать эту букву где я хочу.
Пока у меня квадратный массив wchar_t, который я циклом пытаюсь нарисовать с помощью mvwaddwch.

★★☆

Последнее исправление: CYB3R (всего исправлений: 1)
Ответ на: комментарий от E

Гм. Да. Есть такое. Только теперь эта штука называется mvwadd_wch и вместо wchar_t ожидает некий cchar_t, который вроде бы просто long...

Stahl ★★☆
() автор топика
Ответ на: комментарий от Stahl

Это не long, это структура. Выглядит примерно так:

typedef struct
{
    attr_t	attr;
    wchar_t	chars[CCHARW_MAX];
}
cchar_t;
По сути, это строка wide-символов с атрибутами, поэтому для вывода одного символа нужно сделать строку из него одного:
cchar_t t;
t.attr = COLOR_PAIR(1);
t.chars[0] = 0x2584; // LOWER HALF BLOCK
t.chars[1] = L'\0'; // Null-terminated string.
mvadd_wch(y, x, &t);

Ну и само собой, в целях оптимизации лучше выводить всё-таки строки целиком, а не отдельные символы.

E ★★★
()
Последнее исправление: E (всего исправлений: 1)
Ответ на: комментарий от E

Да, спасибо. Где-то так у меня всё и вышло...

Stahl ★★☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.