Вот пример использования ncurses для записи на экран в определенных положениях (с помощью «mvaddstr»), считывание нажатий клавиш с помощью «getch» и интерпретация кодов клавиш (включая функциональные клавиши, UP, DOWN и т. Д.) ... Предполагая, что вы установили Ncurses в вашей системе (libncurses5-Dev на Ubuntu), то вы скомпилировать этот источник с «-lncurses»
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h> /* for sleep() */
#include <ctype.h>
#include <curses.h>
#include <string.h>
char * intprtkey(int ch);
int main(void) {
WINDOW * mainwin;
int ch;
/* Initialize ncurses */
if ((mainwin = initscr()) == NULL) {
fprintf(stderr, "Error initialising ncurses.\n");
exit(EXIT_FAILURE);
}
noecho(); /* Turn off key echoing */
keypad(mainwin, TRUE); /* Enable the keypad for non-char keys */
mvaddstr(13, 33, "Hello, world!");
mvaddstr(14, 33, "Press F2 to Exit.");
refresh();
/* Loop until user presses 'F2' */
ch = getch();
while (strcmp(intprtkey(ch), "Function key 2"))
{
/*
* Delete the old response line,
* and print a new one
*/
mvprintw(17, 30, " ");
deleteln();
mvprintw(17, 33, "You pressed: 0x%x (%s)", ch, intprtkey(ch));
refresh();
ch = getch();
}
sleep(1);
delwin(mainwin);
endwin();
refresh();
return 0;
}
/* Struct to hold keycode/keyname information */
struct keydesc {
int code;
char name[20];
};
/* Returns a string describing a character passed to it */
char * intprtkey(int ch) {
/* Define a selection of keys we will handle */
static struct keydesc keys[] = { { KEY_UP, "Up arrow" },
{ KEY_DOWN, "Down arrow" },
{ KEY_LEFT, "Left arrow" },
{ KEY_RIGHT, "Right arrow" },
{ KEY_HOME, "Home" },
{ KEY_END, "End" },
{ KEY_BACKSPACE, "Backspace" },
{ KEY_IC, "Insert" },
{ KEY_DC, "Delete" },
{ KEY_NPAGE, "Page down" },
{ KEY_ENTER, "Enter" },
{ KEY_PPAGE, "Page up" },
{ KEY_F(1), "Function key 1" },
{ KEY_F(2), "Function key 2" },
{ KEY_F(3), "Function key 3" },
{ KEY_F(4), "Function key 4" },
{ KEY_F(5), "Function key 5" },
{ KEY_F(6), "Function key 6" },
{ KEY_F(7), "Function key 7" },
{ KEY_F(8), "Function key 8" },
{ KEY_F(9), "Function key 9" },
{ KEY_F(10), "Function key 10" },
{ KEY_F(11), "Function key 11" },
{ KEY_F(12), "Function key 12" },
{ -1, "<unsupported>" }
};
static char keych[2] = {0};
if (isprint(ch) && !(ch & KEY_CODE_YES)) {
/* If a printable character */
keych[0] = ch;
return keych;
}
else {
/* Non-printable, so loop through our array of structs */
int n = 0;
do {
if (keys[n].code == ch)
return keys[n].name;
n++;
} while (keys[n].code != -1);
return keys[n].name;
}
return NULL; /* We shouldn't get here */
}
вы должны посмотреть на 'curses' библиотеки? (Или 'ncurses') –
Да ı найти getc getch funch. Но они не использовали их для координат. – imnew
Что значит «координаты»? –