Programowanie z ncurses (index)
W katalogu domowym utworzyć podkatalog menu. Utworzyć w nim pliki Makefile i menu.c postaci:
/*
* menu.c
*
* Program z HOWTO zmodyfikowany.
* Przyklad prostego menu.
*/
#include <ncurses.h>
#define XSIZE 35
#define YSIZE 10
void print_menu(WINDOW *menu_win, int rewers);
char *etykiety[]= { /* etykiety do menu */
"Koniec pracy z bazą danych",
"Pomoc i dodatkowe informacje",
"Aktualizacja bazy danych",
"Zapytania do bazy danych",
"Pisemne raporty (LaTeX, HTML)"
};
/* Obliczenie liczby pozycji w menu */
int liczba= sizeof(etykiety) / sizeof(char *);
int main(void)
{
WINDOW *menu_win;
int startx= 0; /* polozenie okna menu */
int starty= 0; /* polozenie okna menu */
int xmax, ymax; /* rozmiary stdscr */
int rewers= 0; /* zakres od 0 do liczba-1 (nr etykiety w rewersie) */
int pozycja= -1; /* zakres od -1 do liczba-1 (-1 gdy nic nie wybrano) */
int c;
initscr();
clear();
noecho();
cbreak();
getmaxyx(stdscr, ymax, xmax);
startx= (xmax - XSIZE) / 2;
starty= (ymax - YSIZE) / 2;
menu_win= newwin(YSIZE, XSIZE, starty, startx);
keypad(menu_win, TRUE);
mvprintw(0, 0, "Uzyj kursora do poruszania. Nacisnij ENTER aby wybrac pozycje.");
refresh();
print_menu(menu_win, rewers);
while (pozycja == -1) {
c= wgetch(menu_win);
if (c == KEY_UP) {
rewers= (rewers + liczba -1) % liczba;
} else if (c == KEY_DOWN) {
rewers= (rewers + 1) % liczba;
} else if (c == '\n') {
pozycja= rewers;
} else {
mvprintw(ymax-1, 0, "Nacisnieto znak = %3d drukowany jako '%c'", c, c);
refresh();
}
print_menu(menu_win, rewers);
}
mvprintw(ymax-2, 0, "Wybrano pozycje %d z etykieta %s\n", pozycja+1, etykiety[pozycja]);
clrtoeol();
refresh();
delwin(menu_win);
endwin();
return 0;
}
void print_menu(WINDOW *menu_win, int rewers)
{
int x, y, i;
x= 2;
y= 2;
box(menu_win, 0, 0); /* ramka na okno */
for (i= 0; i < liczba; ++i) {
if (rewers == i) { /* wyswietl te pozycje w rewersie */
wattron(menu_win, A_REVERSE);
mvwprintw(menu_win, y, x, "%s", etykiety[i]);
wattroff(menu_win, A_REVERSE);
} else {
mvwprintw(menu_win, y, x, "%s", etykiety[i]);
}
++y;
}
wrefresh(menu_win);
}
Skompilować i uruchomić program.
Aby użyć biblioteki menu, należy do kodu dołączyć nagłówki
#include <curses.h> #include <menu.h>
Przy scalaniu trzeba dołączyć opcje -lcurses -lmenu.