Официальный форум СВД Встраиваемые Системы
25 Апрель, 2024, 08:17:51 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
 
 
 Сайт СВД ВС  Начало   Помощь Поиск Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: ncurses и mqc  (Прочитано 2429 раз)
ad
Пользователь

Сообщений: 70


« : 05 Март, 2014, 21:54:55 »

Имееется всего лишь один вопрос. Файловый менеджер mqc для своей графики использует библиотеку ncurses или же какую-то другую? Или же это что-то собственной разработки? Вопрос возник, так как при отрисовке границ окошек в ncurses, вертикальные линии рисуются нормально, а горизонтальные заменяются буквой D. Если вместо символа ACS_HLINE использовать обычный '-', такой замены не происходит. Может кто-нибудь знает, в чем загвоздка?
Записан
e-jinn
Пользователь

Сообщений: 32

Gravatar


« Ответ #1 : 07 Март, 2014, 17:14:34 »

Можно попробовать сменить терминал, например на linux или 386at
export TERM=linux
или
export TERM=386at

Наличие этих терминалов можно проверить в /usr/lib/terminfo
Если они остутствуют, то их можно установить из любой версии ncurses командой
make install.data
Записан
ad
Пользователь

Сообщений: 70


« Ответ #2 : 10 Март, 2014, 21:00:33 »

Можно попробовать сменить терминал, например на linux или 386at
export TERM=linux
или
export TERM=386at

Наличие этих терминалов можно проверить в /usr/lib/terminfo
Если они остутствуют, то их можно установить из любой версии ncurses командой
make install.data

Ага, спасибо.
export TERM=386at
Помог. Но пришлось слегка исхитриться. К сожалению, если сделать постоянный
export TERM=386at, не для приложения, а, например, прописать в rc.local или еще где-нибудь, то mqc и med перестают работать нормально. Поэтому пришлось включать и выключать данный тип терминала в самом приложении.

Вначале функции main запоминаю исходный терминал следующим образом:
Код:
const char* old_term_name = getenv("TERM");
Затем выставляю нужный мне терминал с помощью функции setenv:
Код:
int res_func = setenv("TERM", "386at", 1);
// далее, проверка результата функции

А в конце функции main возвращаю исходный терминал:
Код:
res_func = setenv("TERM", old_term_name, 1);
// далее, проверка результата функции
При таком подходе все сработало. Спасибо за помощь! Wink
Записан
e-jinn
Пользователь

Сообщений: 32

Gravatar


« Ответ #3 : 11 Март, 2014, 15:03:14 »

Возможна засада, если приложение будет запущено не из консоли, а в окне какого-либо терминала: PuTTY, Xshell и т.п. Терминал будет неправильный и на экране возможна каша.
Я к своей программе скопировал всю базу terminfo, изменив там файлик своей консоли qansi-m на копию 386at.
И при запуске переопределяю не конкретный терминал, а переменную TERMINFO. А при выходе - восстанавливаю исходное значение. В результате моя программка работает на всех терминалах (теоретически. Практически на эмуляторах 8 штук проверил).
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP © 2002-2024 СВД Встраиваемые Системы.
При использовании материалов сайта ссылка на forum.kpda.ru обязательна.

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines | © Aiwan. Kolobok smiles | Sitemap
Valid XHTML 1.0! Valid CSS!
Сайт СВД ВС

В последний раз google посещал эту страницу 29 Декабрь, 2020, 19:32:28