The menu can be made based on the library PDcurses.
#include
#include
#define ENTER 0x0a
#define KEY_ESC 0x1b /* Escape */
void init_curses() {
initscr();
start_color();
init_pair(1, COLOR_WHITE, COLOR_BLUE);
init_pair(2, COLOR_BLUE, COLOR_WHITE);
curs_set(0);
noecho();
keypad(stdscr, TRUE);
}
int main(void) {
const char* items[] = {
"Main", "Advanced", "H/W Monitor", "Boot", "Security", "Exit" };
int item_max_num = 5;
int items_pos[] = { 5, 12, 23, 37, 44, 55 };
bool quit;
int i, selected_item, key;
init_curses();
bkgd(COLOR_PAIR(1));
erase();
attrset(COLOR_PAIR(1));
for (i = 0; i <= item_max_num; i++) {
move(0, items_pos[i]);
addstr(items[i]);
}
selected_item = 0;
quit = FALSE;
while (!quit) {
move(0, items_pos[selected_item]);
attrset(COLOR_PAIR(2));
addstr(items[selected_item]);
refresh();
key = getch();
move(0, items_pos[selected_item]);
attrset(COLOR_PAIR(1));
addstr(items[selected_item]);
switch (key) {
case KEY_LEFT:
selected_item--;
if (selected_item item_max_num) selected_item = 0;
break;
case ENTER:
quit = TRUE;
break;
case KEY_ESC:
selected_item = -1;
quit = TRUE;
}
}
clear();
endwin();
if (selected_item != -1)
printf("selected item: %s\n", items[selected_item]);
return 0;
}