Następujące terminy będą używane w tym rozdziale:
Zazwyczaj program używający bibliotekę ncurses wygląda następująco:
Dołączenie ncurses.h zdefiniuje zmienne i typy dla ncurses, np. WINDOW i prototypy funkcji. Plik automatycznie dołącza stdio.h, stdarg.h, termios.h i unctrl.h.
initscr() używana jest do zainicjowania danych oraz odczytania odpowiedniego pliku terminfo. Pamięć dla stdscr i curscr zostanie zaallokowana. Jeżeli wystąpią jakieś błędy initscr zwróci ERR, w innym wypadku zwrócony zostanie wskaźnik do stdscr. Dodatkowo ekran zostanie wymazany, zmienne LINES i COLS zostaną zainicjowane. Musisz wywołać tę funkcję przed jakąkolwiek inną funkcją ncurses.
endwin() usunie wszystkie utworzone przez ncurses zasoby, przywróci tty tryb, w którym był przed initscr(). Musisz wywołać tę funkcję po zakończeniu korzystania z ncurses.
Jeżeli chcesz korzystać z kilku terminali możesz użyć newterm(...) zamiast initscr().
Skompiluj program następująco:
Flagi mogą zawierać to co chcesz (zobacz gcc(1)).
Ponieważ ścieżka do ncurses.h zmieniła się musisz podać również:
W innym przypadku ncurses.h, nterm.h, termcap.h i unctrl.h nie zostaną znalezione. Inne możliwe opcje dla Linuxa to:
O2 mówi gcc aby dokonał pewnej optymalizacji, -ansi używane jest dla kodu zgodnego z kodem ansi-c, -Wall wypisze wszyskie ostrzeżenia, -m486 stworzy kod zoptymalizowany dla 486 ( będzie on również wykonywalny na 386 ).
Biblioteka ncurses znajduje się w /usr/lib/. Istnieją trzy wersje tej biblioteki:
Stuktury danych dla ekranu nazywane są oknami, są one zdefiniowane w ncurses.h. Okno jest jakby tablicą znaków w pamięci, którą programista może zmieniać bez wypisywania na ekran. Domyślnym oknem jest stdscr, ma ono wymiary teminala. Możesz tworzyć nowe okna za pomocą newwin(...).
Aby optymalnie zaktualizować fizyczny terminal ncurses posiadają dodatkowe okno - curscr. Jest to aktualny obraz terminala, podczas gdy stdscr zawiera informacje o tym jak terminal powinien wyglądać. Zapisanie informacji na terminalu zostanie dokonane gdy wywołasz funkcję refresh(). Ncurses zaktualizują curscr informacją zawartą w stdscr. Funkcje biblioteki użyją wewnętrznej optymalizacji procesu odświeżania, więc możesz zmienić wiele okien, po czym zaktualizować ekran w najbardziej optymalny sposób.
Za pomocą funkcji ncurses możesz manipulować różnymi oknami. Funkcje rozpoczynające się od w pozwalają wybrać okno, podczas gdy inne zazwyczaj działają na stdscr. Funcje zaczynające się na mv przesuną najpierw kursor do pozycji y,x.
Każdy znak jest typu chtype, który zdefiniowany jest jako long unsigned int w celu przechowywania dodatkowych informacji ( atrybuty, itp. ).
Ncurses używają bazy danych terminfo. Zazwyczaj znajduje się ona w usr/lib/terminfo/, tam ncurses zajrzą w poszukiwaniu jej. Jeżeli chcesz przetestować jakiś inny opis terminala bez zmiany terminfo ustaw zmienną systemową TERMINFO. Ncurses skorzysta z definicji zachowanych tam gdzie podałeś, zamiast /usr/lib/terminfo/.
Aktualną wersją ncurses jest 1.8.6(. ( ja mam 5.0, ale ta też już jest pewnie stara ).
Na końcu tego rozdziału znajdziesz tabelę zawierającą przegląd BSD-Curses, ncurses i curses z Sun-OS 5.4. Zajrzyj do niej w poszukiwaniu odpowiedniej funkcji i informacji o systemie, w którym ją zaimplementowano.