У меня едет крыша.
Вот зачем-то приспичило мне поработать с терминалом напрямую...
Ну вот делов-то: запомнить позицию курсора, переставить его куда надо, написать что надо и вернуть всё как было.
Это убер-жесть. Нано-чугуний просто.
Ну вот, например, кусочек кода:
char code_move_cursor[100];
memset(code_move_cursor, 0, 100);
struct termios tty, orig_tty;
tcgetattr( tty_fd, &tty );
orig_tty = tty;
tty.c_lflag &= ~( ICANON | ECHO | ISIG );
tty.c_cc[ VMIN ] = 1;
tcsetattr( tty_fd, TCSAFLUSH, &tty );
sprintf(code_move_cursor, "%c[%d;%dH", 27, row, col);
write(tty_fd, code_move_cursor, strlen(code_move_cursor));
tcsetattr(tty_fd, TCSAFLUSH, &orig_tty);
И такого ужаса сотни строк набыдлокодил-накопипастил.
После подобных манипуляций терминал обычно превращается в тыкву. Причём что-то работает всегда, что-то иногда, а дебажить это вообще нереально.
Руки опускаются.
Думаю переходить на ncurces или что-то подобное...
Но это поломает саму идею, хотя может добавить кроссплатформенности чуток. Боюсь, что мой быдлокод кроме как из-под линукса нигде работать не будет.
Впрочем, на данный момент он и из-под линукса не работает.
Плак-плак.