Я пытаюсь напечатать одну строку в левой половине терминала, а другую - в правой половине терминала. Я должен добиться этого, используя escape-последовательности ANSI, а не ncurses. Я также хочу убедиться, что ни одно слово не разбито в конце строки. Если в строке недостаточно места для печати слова, я хочу напечатать слово на следующей строке.
Я попытался заменить вызовы перемещения на printf (\ n), а затем с помощью перемещения, чтобы добраться до необходимой половины экрана. Вызов переезда, похоже, полностью игнорируется.
#define clear() printf("\033[H\033[J")
void move(int y, int x)
{
printf("\033[%d;%dH", y, x);
}
void print_left_right(int cols, char * left, char * right)
{
clear();
int cols_end = cols / 2;
int line = 0;
int current_pos = 0;
char * l_split = strtok(left, " ");
move(0, 0);
while (l_split != NULL)
{
current_pos += (strlen(l_split) + 1); // plus one for space
if (current_pos >= cols_end)
{
line += 1; // <----- doesn't seem to work
move(line, 0); // <----- seems to work
current_pos = 0;
}
printf("%s ", l_split);
l_split = strtok(NULL, " ");
}
line = 0;
current_pos = cols_end;
char * r_split = strtok(right, " ");
move(0, cols_end);
while (r_split != NULL)
{
current_pos += (strlen(r_split) + 1);
if (current_pos >= cols)
{
++line;
move(line, cols_end);
current_pos = cols_end;
}
printf("%s ", r_split);
r_split = strtok(NULL, " ");
}
}
Я разбил данные строки на слова, используя strtok, и попытался распечатать его. Если слово не подходит, я ожидал, что переменная строки будет увеличиваться и переходить к другой строке.
Однако строковая переменная не увеличивается, и этот код всегда переписывает одну и ту же строку. Как ни странно, движение, кажется, правильно перемещается в правильную половину терминала.
Я думаю, я делаю что-то невероятно глупое ...