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.