Provided by:
manpages-pl-dev_20060617-1_all 
NAZWA
ncurses - pakiet obsługi CRT i jego optymalizacji
STRESZCZENIE
#include <curses.h>
OPIS
Funkcje biblioteki curses dają użytkownikowi niezależne od terminala
metody obsługiwania ekranów znakowych z sensowną optymalizacją. Ta
implementacja to ,,nowe curses'' (ncurses). Jest ona zatwierdzonym
zamiennikiem dla klasycznych curses z 4.4BSD, których rozwoju
zaprzestano.
Funkcje ncurses emulują bibliotekę curses(3X) Systemu Vr4, a także
standard XPG4 (XSI curses), lecz biblioteka ncurses jest wolnodostępna
w postaci źródłowej. Różnice między curses z SVr4 podsumowano w
sekcjach ROZSZERZENIA i BŁĘDY, występujących poniżej, a opisano
szczegółowo w takich samych sekcjach stron podręcznika systemowego
poświęconych poszczególnym funkcjom.
Program, który korzysta z tych funkcji, musi być skonsolidowany z opcją
-lncurses (lub jeśli został wygenerowany) z biblioteką debuggową
-lncurses_g. Biblioteka ncurses_g generuje logi śledzenia (plik o
nazwie 'trace', w bieżącym katalogu), które opisują akcje curses.
Pakiet ncurses obsługuje: działanie na ekranie, oknach i padach;
wyjście do okien i padów; odczytywanie wejścia z terminala; sterowanie
terminalem oraz opcje wejścia/wyjścia curses; funkcje zapytań
środowiskowych; działanie na kolorach; używanie klawiszy o miękkich
etykietach; właściwości terminfo; i dostęp do niskopoziomowych funkcji
obsługi terminala.
Aby zainicjalizować pakiet, należy na samym początku wywołać funkcję
initscr, lub newterm. Przed wyjściem należy wywołać funkcję endwin. Aby
uzyskać wejście znakowe znak-po-znaku bez echa (większość interaktywnie
zorientowanych programów tego chce), powinno się użyć następującej
sekwencji:
initscr(); cbreak(); noecho();
Większość programów chętnie wykorzystuje też sekwencje:
nonl();
intrflush(stdscr, FALSE);
keypad(stdscr, TRUE);
Przed uruchomieniem programu curses, należy ustawić <tab stops>
(pozycje tabulacji) terminala, oraz wysłać doń łańcuchy inicjujące.
Można tego dokonać, wywołując polecenie tput init po uprzednim
wyeksportowaniu zmiennej środowiskowej TERM. Odpowiedzialny za to jest
tset(1). [Szczegóły - zobacz terminfo(5).]
Biblioteka curses zezwala na działanie na strukturach danych,
nazywanych oknami, o których można myśleć jak o dwuwymiarowych
tablicach znaków, reprezentujących część lub całość ekranu CRT.
Dostarczane jest domyślne okno, o nazwie stdscr, którego wymiary
odpowiadają ekranowi terminala. Inne okna można utworzyć przy użyciu
funkcji newwin.
Zauważ, że curses nie obsługuje zachodzących okien - jest to robione
przez bibliotekę panels(3x). Znaczy to, że możesz albo używać stdscr,
albo podzielić ekran na okna i nie używać stdscr w ogóle. Łączenie tych
dwóch spowoduje niepraktyczne i niepożądane efekty.
Do okien można odnosić się poprzez zmienne zadeklarowane jako WINDOW *.
Działań na tych strukturach dokonuje się funkcjami opisanymi na tej
stronie oraz w innych miejscach stron podręcznika ncurses. Najbardziej
podstawowymi funkcjami są move i addch. Ogólniejsze wersje tych funkcji
figurują pod nazwami zaczynającymi się od w i umożliwiają podanie okna.
Funkcje nie zaczynające się od w działają na stdscr.
Po użyciu funkcji działania na oknie, wywoływany jest refresh,
nakazujący curses, by ekran CRT zaczął wyglądać tak jak stdscr. Znaki
okna są właściwie typu chtype (znak i dane atrybutu), więc dane o znaku
można przechowywać w nim samym.
Można też operować szczególnymi oknami, padami. Okna te nie są
ograniczone rozmiarami ekranu, a ich zawartość nie musi być w całości
wyświetlana. Więcej szczegółów znajdziesz w curs_pad(3X).
Oprócz rysowania na ekranie znaków, mogą być obsługiwane atrybuty i
kolory, a więc znaki mogą pokazywać się w trybach takich jak
podkreślenie, inwersja, lub w kolorze, o ile terminal na to pozwala.
Można wyświetlać znaki składające się na linie. Na wejściu, ncurses
potrafi tłumaczyć klawisze strzałek i funkcyjne, które przekazują
sekwencje eskejpowe, na zwykłe wartości. Atrybuty wideo, znaki
rysowania linii i nazwy wartości wejściowych są zdefiniowane w
<curses.h> i mają nazwy typu A_REVERSE, ACS_HLINE, czy KEY_LEFT.
Jeśli ustawiono zmienne środowiskowe LINES i COLUMNS, lub jeśli program
jest uruchomiony w środowisku okienkowym, to informacje o rozmiarze
ekranu przesłonią dane odczytywane z terminfo.
Jeśli zdefiniowana jest zmienna środowiskowa TERMINFO, to każdy program
używający curses będzie szukał najpierw lokalnej definicji terminala, a
dopiero potem zajrzy do standardowego miejsca. Np. Jeśli TERM jest
ustawione na att4424, to wkompilowana definicja terminala jest
znajdywana w
/usr/lib/terminfo/a/att4424.
(a jest kopiowane z pierwszej litery att4424, aby zapobiec tworzeniu
wielkich katalogów.) Jednak jeśli ustawiono TERMINFO, np. na wartość
$HOME/myterms, to curses zajrzy wpierw do
$HOME/myterms/a/att4424,
a jeśli to zawiedzie, do
/usr/lib/terminfo/a/att4424.
Jest to przydatne dla rozwijania eksperymentalnych definicji, lub gdy
nie ma praw zapisu do /usr/lib/terminfo.
Zmienne całkowite LINES i COLS są zdefiniowane w <curses.h> i są
wypełniane przez initscr wartościami, odpowiadającymi rozmiarowi
ekranu. Stałe TRUE i FALSE mają odpowiednio wartości 1 i 0.
Zmienne curses definiują również zmienną WINDOW *curscr, która jest
używana do pewnych niskopoziomowych operacji, jak np. oczyszczanie i
odświeżanie ekranu, zawierającego śmieci. curscr może być użyte tylko w
niektórych funkcjach.
Nazwy funkcji i argumentów
Wiele funkcji curses ma dwie lub więcej wersji. Zmienne, poprzedzone w,
wymagają argumentu okna. Zmienne poprzedzone p wymagają argumentu padu.
Funkcje bez przedrostka odnoszą się w ogólności do stdscr.
Zmienne z przedrostkiem mv wymagają współrzędnych y i x, wskazujących
miejsce ekranu, do którego należy się przenieść przed dokonaniem akcji.
Funkcje te wymuszają wywołanie move przed wywołaniem innej funkcji.
Współrzędna y zawsze odnosi się do wiersza (okna), a x do kolumny.
Górny lewy narożnik ma współrzędne (0,0), nie (1,1).
Funkcje z przedrostkiem mvw pobierają zarówno argument okna, jak i
parametry współrzędnych. Argument okna jest zawsze podawany przed
współrzędnymi.
W każdym wypadku, win jest oknem, a pad padem, na które wpływa funkcja.
win i pad są zawsze wskaźnikami do typu WINDOW.
Funkcje ustawiające opcje wymagają flagi logicznej bf, której wartość
wynosi albo TRUE, albo FALSE; bf jest zawsze typu bool. Zmienne ch i
attrs niżej, są zawsze typu chtype. Typy WINDOW, SCREEN, bool, i
chtype są zdefiniowane w <curses.h>. Typ TERMINAL jest zdefiniowany w
<term.h>. Wszystkie pozostałe argumenty są typu integer.
Indeks nazw funkcji
W poniższej tablicy podano każdą z funkcji curses, wskazując przy
okazji odpowiadającą jej stronę podręcznika man. Funkcje oznaczone `*',
są specyficzne dla ncurses, nieopisane przez XPG4 i SVr4.
Nazwa funkcji Nazwa strony podręcznika
___________________________________________
addch curs_addch(3X)
addchnstr curs_addchstr(3X)
addchstr curs_addchstr(3X)
addnstr curs_addstr(3X)
addstr curs_addstr(3X)
attroff curs_attr(3X)
attron curs_attr(3X)
attrset curs_attr(3X)
baudrate curs_termattrs(3X)
beep curs_beep(3X)
bkgd curs_bkgd(3X)
bkgdset curs_bkgd(3X)
border curs_border(3X)
box curs_border(3X)
can_change_color curs_color(3X)
cbreak curs_inopts(3X)
clear curs_clear(3X)
clearok curs_outopts(3X)
clrtobot curs_clear(3X)
clrtoeol curs_clear(3X)
color_content curs_color(3X)
copywin curs_overlay(3X)
curs_set curs_kernel(3X)
def_prog_mode curs_kernel(3X)
def_shell_mode curs_kernel(3X)
del_curterm curs_terminfo(3X)
delay_output curs_util(3X)
delch curs_delch(3X)
deleteln curs_deleteln(3X)
delscreen curs_initscr(3X)
delwin curs_window(3X)
derwin curs_window(3X)
doupdate curs_refresh(3X)
dupwin curs_window(3X)
echo curs_inopts(3X)
echochar curs_addch(3X)
endwin curs_initscr(3X)
erase curs_clear(3X)
erasechar curs_termattrs(3X)
filter curs_util(3X)
flash curs_beep(3X)
flushinp curs_util(3X)
getbegyx curs_getyx(3X)
getch curs_getch(3X)
getmaxyx curs_getyx(3X)
getmouse curs_mouse(3X)*
getparyx curs_getyx(3X)
getstr curs_getstr(3X)
getsyx curs_kernel(3X)
getwin curs_util(3X)
getyx curs_getyx(3X)
halfdelay curs_inopts(3X)
has_colors curs_color(3X)
has_ic curs_termattrs(3X)
has_il curs_termattrs(3X)
hline curs_border(3X)
idcok curs_outopts(3X)
idlok curs_outopts(3X)
immedok curs_outopts(3X)
inch curs_inch(3X)
inchnstr curs_inchstr(3X)
inchstr curs_inchstr(3X)
init_color curs_color(3X)
init_pair curs_color(3X)
initscr curs_initscr(3X)
innstr curs_instr(3X)
insch curs_insch(3X)
insdelln curs_deleteln(3X)
insertln curs_deleteln(3X)
insnstr curs_insstr(3X)
insstr curs_insstr(3X)
instr curs_instr(3X)
intrflush curs_inopts(3X)
is_linetouched curs_touch(3X)
is_wintouched curs_touch(3X)
isendwin curs_initscr(3X)
keyname curs_util(3X)
keypad curs_inopts(3X)
killchar curs_termattrs(3X)
leaveok curs_outopts(3X)
longname curs_termattrs(3X)
meta curs_inopts(3X)
mouseinterval curs_mouse(3X)*
mousemask curs_mouse(3X)*
move curs_move(3X)
mvaddch curs_addch(3X)
mvaddchnstr curs_addchstr(3X)
mvaddchstr curs_addchstr(3X)
mvaddnstr curs_addstr(3X)
mvaddstr curs_addstr(3X)
mvcur curs_terminfo(3X)
mvdelch curs_delch(3X)
mvderwin curs_window(3X)
mvgetch curs_getch(3X)
mvgetstr curs_getstr(3X)
mvinch curs_inch(3X)
mvinchnstr curs_inchstr(3X)
mvinchstr curs_inchstr(3X)
mvinnstr curs_instr(3X)
mvinsch curs_insch(3X)
mvinsnstr curs_insstr(3X)
mvinsstr curs_insstr(3X)
mvinstr curs_instr(3X)
mvprintw curs_printw(3X)
mvscanw curs_scanw(3X)
mvwaddch curs_addch(3X)
mvwaddchnstr curs_addchstr(3X)
mvwaddchstr curs_addchstr(3X)
mvwaddnstr curs_addstr(3X)
mvwaddstr curs_addstr(3X)
mvwdelch curs_delch(3X)
mvwgetch curs_getch(3X)
mvwgetstr curs_getstr(3X)
mvwin curs_window(3X)
mvwinch curs_inch(3X)
mvwinchnstr curs_inchstr(3X)
mvwinchstr curs_inchstr(3X)
mvwinnstr curs_instr(3X)
mvwinsch curs_insch(3X)
mvwinsnstr curs_insstr(3X)
mvwinsstr curs_insstr(3X)
mvwinstr curs_instr(3X)
mvwprintw curs_printw(3X)
mvwscanw curs_scanw(3X)
napms curs_kernel(3X)
newpad curs_pad(3X)
newterm curs_initscr(3X)
newwin curs_window(3X)
nl curs_outopts(3X)
nocbreak curs_inopts(3X)
nodelay curs_inopts(3X)
noecho curs_inopts(3X)
nonl curs_outopts(3X)
noqiflush curs_inopts(3X)
noraw curs_inopts(3X)
notimeout curs_inopts(3X)
overlay curs_overlay(3X)
overwrite curs_overlay(3X)
pair_content curs_color(3X)
pechochar curs_pad(3X)
pnoutrefresh curs_pad(3X)
prefresh curs_pad(3X)
printw curs_printw(3X)
putp curs_terminfo(3X)
putwin curs_util(3X)
qiflush curs_inopts(3X)
raw curs_inopts(3X)
redrawwin curs_refresh(3X)
refresh curs_refresh(3X)
reset_prog_mode curs_kernel(3X)
reset_shell_mode curs_kernel(3X)
resetty curs_kernel(3X)
restartterm curs_terminfo(3X)
ripoffline curs_kernel(3X)
savetty curs_kernel(3X)
scanw curs_scanw(3X)
scr_dump curs_scr_dump(3X)
scr_init curs_scr_dump(3X)
scr_restore curs_scr_dump(3X)
scr_set curs_scr_dump(3X)
scrl curs_scroll(3X)
scroll curs_scroll(3X)
scrollok curs_outopts(3X)
set_curterm curs_terminfo(3X)
set_term curs_initscr(3X)
setscrreg curs_outopts(3X)
setsyx curs_kernel(3X)
setterm curs_terminfo(3X)
setupterm curs_terminfo(3X)
slk_attroff curs_slk(3X)
slk_attron curs_slk(3X)
slk_attrset curs_slk(3X)
slk_clear curs_slk(3X)
slk_init curs_slk(3X)
slk_label curs_slk(3X)
slk_noutrefresh curs_slk(3X)
slk_refresh curs_slk(3X)
slk_restore curs_slk(3X)
slk_set curs_slk(3X)
slk_touch curs_slk(3X)
standend curs_attr(3X)
standout curs_attr(3X)
start_color curs_color(3X)
subpad curs_pad(3X)
subwin curs_window(3X)
syncok curs_window(3X)
termattrs curs_termattrs(3X)
termname curs_termattrs(3X)
tgetent curs_termcap(3X)
tgetflag curs_termcap(3X)
tgetnum curs_termcap(3X)
tgetstr curs_termcap(3X)
tgoto curs_termcap(3X)
tigetflag curs_terminfo(3X)
tigetnum curs_terminfo(3X)
tigetstr curs_terminfo(3X)
timeout curs_inopts(3X)
touchline curs_touch(3X)
touchwin curs_touch(3X)
tparm curs_terminfo(3X)
tputs curs_termcap(3X)
tputs curs_terminfo(3X)
typeahead curs_inopts(3X)
unctrl curs_util(3X)
ungetch curs_getch(3X)
ungetmouse curs_mouse(3X)*
untouchwin curs_touch(3X)
use_env curs_util(3X)
vidattr curs_terminfo(3X)
vidputs curs_terminfo(3X)
vline curs_border(3X)
vwprintw curs_printw(3X)
vwscanw curs_scanw(3X)
waddch curs_addch(3X)
waddchnstr curs_addchstr(3X)
waddchstr curs_addchstr(3X)
waddnstr curs_addstr(3X)
waddstr curs_addstr(3X)
wattroff curs_attr(3X)
wattron curs_attr(3X)
wattrset curs_attr(3X)
wbkgd curs_bkgd(3X)
wbkgdset curs_bkgd(3X)
wborder curs_border(3X)
wclear curs_clear(3X)
wclrtobot curs_clear(3X)
wclrtoeol curs_clear(3X)
wcursyncup curs_window(3X)
wdelch curs_delch(3X)
wdeleteln curs_deleteln(3X)
wechochar curs_addch(3X)
wenclose curs_mouse(3X)*
werase curs_clear(3X)
wgetch curs_getch(3X)
wgetnstr curs_getstr(3X)
wgetstr curs_getstr(3X)
whline curs_border(3X)
winch curs_inch(3X)
winchnstr curs_inchstr(3X)
winchstr curs_inchstr(3X)
winnstr curs_instr(3X)
winsch curs_insch(3X)
winsdelln curs_deleteln(3X)
winsertln curs_deleteln(3X)
winsnstr curs_insstr(3X)
winsstr curs_insstr(3X)
winstr curs_instr(3X)
wmove curs_move(3X)
wnoutrefresh curs_refresh(3X)
wprintw curs_printw(3X)
wredrawln curs_refresh(3X)
wrefresh curs_refresh(3X)
wresize curs_resize(3x)*
wscanw curs_scanw(3X)
wscrl curs_scroll(3X)
wsetscrreg curs_outopts(3X)
wstandend curs_attr(3X)
wstandout curs_attr(3X)
wsyncdown curs_window(3X)
wsyncup curs_window(3X)
wtimeout curs_inopts(3X)
wtouchln curs_touch(3X)
wvline curs_border(3X)
WARTOŚĆ ZWRACANA
Funkcje, które zwracają integer, zwracają ERR w wypadku błędu, a po
sukcesie dowolny inny integer. (chyba że zaznaczono inaczej w opisie
funkcji).
Wszystkie makra zwracają wartość wersji w, poza setscrreg, wsetscrreg,
getyx, getbegyx, getmaxyx. Wartości zwracane setscrreg, wsetscrreg,
getyx, getbegyx, i getmaxyx są niezdefiniowane (np. nie powinny być
używane jako instrukcje prawej strony przypisań).
Funkcje, które zwracają wskaźniki, po błędzie zwracają NULL.
ZOBACZ TAKŻE
terminfo(5) oraz strony 3X , których nazwa zaczyna się od "curs_".
ROZSZERZENIA
Biblioteka curses może być skompilowana z opcją (-DTERMCAP_FILE), która
powoduje skok wstecz, do starodawnego pliku /etc/termcap, jeśli nie ma
odpowiedniego wpisu w terminfo. Użycie tej właściwości nie jest
zalecane, gdyż w zasadzie włącza ona do kodu startowego curses cały
kompilator termcapa.
Kompilowanie z -DTERMCAP_FILE zmienia sekwencję inicjalizacji
biblioteki, na sposób podobny do 4.4BSD curses. Jeśli nie ma żadnego
terminfo, opowiadającego TERM, to biblioteka zaczyna szukać wpisów
termcap. Robi to w następujących miejscach: (1) jeśli TERMINFO nie jest
zdefiniowane, w pliku o nazwie TERMCAP_FILE; (2) jeśli zdefiniowano
TERMINFO, i nazwa zaczyna się od ukośnika, to jest interpretowane jako
nazwa pliku termcap, w którym należy szukać TERM; (3) gdy TERMINFO ma
napis prowadzący, który wygląda jak lista wpisów nazw terminala i
odpowiada TERM, to zawartość TERMINFO jest interpretowana jako termcap;
(4) jeśli terminfo wygląda jak termcap, lecz nie zawiera TERM, plik
termcap jest przeszukiwany wśród oddzielonych dwukropkami ścieżek
TERMPATHS, o ile jest ono zdefiniowane i w ~/.termcap i ostatecznie w
wartości plikowej TERMCAP_FILE.
Wersje curses, skompilowane na PC, wspierają znaki PC ROM (zawierające
znaki 0-31, których curses z SVr4 nie potrafi wyświetlić). Zobacz
sekcje ROZSZERZENIA w curs_addch(3x) i curs_attr(3x).
PRZENOŚNOŚĆ
Bibliotekę curses zaprojektowano jako zgodną ze standardem XSI Curses
na poziomie podstawowym. Obsługiwane są pewne partie rozszerzonych XSI
Curses (łącznie z obsługą koloru). Nie zaimplementowano jeszcze
następujących wywołań rozszerzonego XSI Curses, związanych z obsługą
szerokich (wielobajtowych) znaków: addnwstr, addwstr, mvaddnwstr,
mvwaddnwstr, mvaddwstr, waddnwstr, waddwstr, add_wch, wadd_wch,
mvadd_wch, mvwadd_wch, add_wchnstr, add_wchstr, wadd_wchnstr,
wadd_wchstr, mvadd_wchnstr, mvadd_wchstr, mvwadd_wchnstr,
mvwadd_wchstr, bkgrndset, bkgrnd, getbkgrnd, wbkgrnd, wbkgrndset,
wgetbkgrnd, border_set, wborder_set, box_set, hline_set, mvhline_set,
mvvline_set, mvwhline_set, mvwvline_set, whline_set, vhline_set,
wvline_set, echo_wchar, wecho_wchar, erasewchar, killwchar, get_wch,
mvget_wch, mvwget_ch, wget_wch, getwchtype, get_wstr, getn_wstr,
wget_wstr, wgetn_wstr, mvget_wstr, mvgetn_wstr, mvwget_wstr,
mvwgetn_wstr, innwstr, inwstr, winnwstr, winwstr, mvinnwstr, mvinwstr,
mvwinnwstr, mvwinwstr, ins_nwstr, ins_wstr, mvins_nwstr, mvins_wstr,
mvwins_nwstr, mvwins_wstr, wins_nwstr, wins_wstr, ins_wch, wins_wch,
mvins_wch, mvwins_wch, in_wch, win_wch, mvin_wch, mvwin_wch, inwchstr,
inwchnstr, winwchstr, winwchnstr, mvinwchstr, mvinwchnstr, mvinwchstr,
mvwinwchnstr.
Niewielka ilość różnic (to jest poszczególnych różnic między XSI
Curses, a wywołaniami curses) jest opisywana w sekcjach PRZENOŚNOŚĆ
konkretnych stron podręcznika man.
Format terminfo, obsługiwany przez curses jest binarnie zgodny z SVr$,
lecz nie jest zgodny z XSI curses. Jest tak, ponieważ ludzie od XSI
Curses, w przypływie uszkodzenia mózgu, zmienili nieudokumentowaną
właściwość SVr4 getm z napisu na wartość logiczną, zmieniając przez to
offsety binarne wszystkich pozostałych właściwości.
Funkcje getmouse, mousemask, ungetmouse, mouseinterval i wenclose,
związane z myszą, nie są częścią XPG4 ani SVr$. Zobacz dla dalszych
szczegółów curs_mouse(3X).
Funkcja wresize nie jest częścią XPG4, i nie jest obecna w SVr4.
Więcej szczegółów znajdziesz w curs_resize(3X).
W historycznych wersjach curses, opóźnienia zawarte we właściwościach
cr, ind, cub1, ff i tab uaktywniały odpowiadające im bity opóźnień w
UNIX-owym sterowniku tty. W tej implementacji wypełnianie jest
dokonywane wysłaniami znaków NUL. Metoda ta jest trochę bardziej
kosztowna, lecz znacząco zawęża interfejs z jądrem UNIX-a i odpowiednio
do tego polepsza przenośność pakietu.
W standardzie XSI i w stronach podręcznika SVr4, wiele wpisów ma
argumenty prototypopwe char *const (lub cchar_t *const, lub wchar_t
*const, lub void *const). Zależnie od interpretacji standardu ANSI C
(zobacz sekcję 3.5.4.1), deklaracje te są (a) bez znaczenia, lub (b)
bez znaczenia i niedozwolone. Deklaracja const char *x to modyfikowalny
wskaźnik do modyfikowalnych danych, lecz char *const x to
niemodyfikowalny wskaźnik do modyfikowalnych danych. Ponieważ C
przekazuje argumenty przez wartość, <typ> *const jako typ formalny jest
co najmniej wątpliwy. Ta więc w tej implementacji zamieniono je
globalnie na const <type> *.
UWAGI
Plik nagłówkowy <curses.h> automatycznie włącza pliki <stdio.h> i
<unctrl.h>.
Jesli standardowe wyjście, programu curses jest przekierowywane do
czegoś, co nie jest tty, odświeżenia ekranu będą kierowane na
standardowe wyjście błędu. Jest to nieudokumentowana właściwość curses
z AT&T SVr3.
AUTORZY
Zeyd M. Ben-Halim, Eric S. Raymond. Zejście z oryginalnych pcurses
zrobił Pavel Curtis.
ncurses(3ncurses)