#include #include #include #include #include void move_cursor(int direction) { if (direction == -1) { printf("\x0D "); printf("\x0D\x1B[1A>"); printf("\x0D"); } else if (direction == 1) { printf("\x0D "); printf("\x0D\x1B[1B>"); printf("\x0D"); } fflush(stdout); } struct termios setup_term() { struct termios old, new; tcgetattr(STDIN_FILENO, &old); new = old; new.c_lflag &= ~(ECHO | ICANON); new.c_cc[VMIN] = 0; // bytes read to return new.c_cc[VTIME] = 0; // time before return tcsetattr(STDIN_FILENO, TCSANOW, &new); return old; } void return_term(struct termios *old) { tcsetattr(STDIN_FILENO, TCSANOW, old); } void menu() { struct pollfd poller[1]; poller[0].fd = STDIN_FILENO; poller[0].events = POLLIN; printf(" hallo\n felix\n lass\n minecraft\n spielen\n"); printf("\x1B[5A>\x0D"); fflush(stdout); uint8_t run = 1; while (run) { int events = poll(poller, 1, -1); if (events > 0 && poller[0].revents & POLLIN) { char buffer[10]; uint16_t length = read(STDIN_FILENO, buffer, sizeof(buffer)); if (length > 0) { uint8_t i; for (i = 0; i < length; i++) { if (buffer[i] == 'q') run = 0; else if (buffer[i] == 'j') { move_cursor(1); } else if (buffer[i] == 'k') { move_cursor(-1); } } } } } } int main() { struct termios old = setup_term(); menu(); return_term(&old); return 0; }