«Перенос» написанного кода conio.h в curses.h

Я хочу портировать простое консольное приложение для работы на терминале Linux, максимально сохраняя его текущее поведение. Это небольшая игра на основе командной строки, использующая conio.h в Windows, я хотел бы перенести ее на Linux.

Все специфичные строки conio.h таковы:

...  
  HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE);
  CONSOLE_CURSOR_INFO     cursorInfo;
  GetConsoleCursorInfo(out, &cursorInfo);
  cursorInfo.bVisible = false; // set the cursor visibility
  SetConsoleCursorInfo(out, &cursorInfo);
  short int CX=0, CY=0;
        COORD coord;
        coord.X = CX;
        coord.Y = CY;
...
     SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
...

(и: следует ли использовать curses.h или ncurses.h?)


person deniable_encryption    schedule 04.05.2019    source источник
comment
Это вызовы консоли Windows, а не то, что я бы назвал conio.h (см., например, en. wikipedia.org/wiki/Conio.h ).   -  person William McBrine    schedule 04.05.2019
comment
У других людей другие идеи — см., например, это.   -  person Thomas Dickey    schedule 04.05.2019


Ответы (1)


conio.h вопросы обычно касаются getch, что примерно соответствует высшему уровню (ругательствам) getch. Однако большая часть conio.h является низкоуровневой, как это, и может быть выполнена с использованием terminfo, например, tigetstr, tparm, tputs, с использованием "civis" (курсор-невидимка) и "cup" (курсор-позиция). Эти функции определяются через <term.h>.

Скорее всего, программа использует другие возможности (и полезных туториалов по переносу с conio.h на curses нет). В curses упомянутыми функциями будут curs_set и переместить.

Дальнейшее чтение (terminfo):

person Thomas Dickey    schedule 04.05.2019