ncurses 3

Transkrypt

ncurses 3
Laboratorium nr 3
Instrukcja
laboratoryjna
3
1)
1/4
Programowanie w języku C 2
Temat: Edycja zawartości okna, zarządzanie oknami
Przygotował: mgr inż. Maciej Lasota
Edycja zawartości okna
Kasowanie znaków (znajdujących się w oknie):
•
int delch(void)
•
int wdelch(WINDOW *okno)
•
int mvdelch(int y, int x)
•
int mvwdelch(WINDOW *okno, int y, int x)
Funkcje delch() oraz wdelch() kasują znak w miejscu znajdowania się kursora
przesuwając pozostałe znaki w linii w prawo o jeden łącznie ze znakiem ramki okna. Linia z
lewej strony uzupełniana jest pustym znakiem (spacją). Funkcje mvdelch() oraz mvwdelch()
działają analogicznie z możliwością ustawienia pozycji kursora przed usunięciem znaku.
Wstawianie znaków:
•
int insch(chtype ch)
•
int winsch(WINDOW *okno, chtype ch)
•
int mvinsch(int y, int x, chtype ch)
•
int mvwinsch(WINDOW *okno, int y, int x, chtype ch)
Funkcje insch() oraz winsch() wstawia znak w miejscu znajdowania się kursora
przesuwając pozostałe znaki w linii. Ostatni znak w linii jest kasowany. Funkcje mvinsch()
oraz mvwinsch() działają analogicznie z możliwością ustawienia pozycji kursora przed
wstawianiem znaku.
Laboratorium nr 3
2/4
Kasowanie linii:
•
int deleteln(void)
•
int wdeleteln(WINDOW *okno)
Funkcje deleteln() oraz wdeleteln() usuwa linię w miejscu znajdowania się kursora
przesuwając pozostałe linie znajdujące się poniżej do góry. Ostatnia linia uzupełniana jest
pustą linią.
Wstawianie linii:
•
int insertln(void)
•
int winsertln(WINDOW *win)
Funkcje insertln() oraz winsertln() wstawia pustą linię w miejscu znajdowania się
kursora przesuwając pozostałe linie znajdujące się poniżej w dół. Ostatnia linia jest
kasowana.
2)
Odczyt danych z okna
Biblioteka ncurses oprócz odczytywania danych (parametrów) utworzonego okna
umożliwia również odczytywanie zawartości okna z podanego miejsca (współrzędnych).
Służy do tego rodzina funkcji:
•
chtype inch(void)
•
chtype winch(WINDOW *okno)
•
chtype mvinch(int y, int x)
•
chtype mvwinch(WINDOW *okno, int y, int x)
Funkcje inch() oraz winch() odczytują zawartość okna w miejscu znajdowania się
kursora. Funkcje mvinch() oraz mvwinch() również odczytują zawartość okna z możliwością
podania współrzędnych z których chcemy odczytać dane. Wszystkie przedstawione funkcje
zwracają kod ASCII odczytanego znaku wraz z atrybutami.
Laboratorium nr 3
3)
3/4
Kolory
Przed uruchomieniem trybu obsługi kolorów w ncurses należy wywołać funkcje:
bool has_colors(void);
Jest to bezparametrowa funkcja, która zwraca wartość TRUE lub FALSE. Funkcja ta
sprawdza czy nasz terminal obsługuje kolory i czy można uruchomić tryb obsługi kolorów.
Następnie po poprawnym sprawdzeniu obsługi kolorów możemy wywołać funkcję:
int start_color(void);
Funkcja ta inicjalizuje i uruchamia tryb obsługi kolorów (oczywiście w przypadku gdy
terminal obsługuje kolory). Organizacja oraz używanie kolorów zawsze odbywa się w postaci
tzw. par kolorów. Para kolorów składa się z koloru tła (ang. background) oraz koloru
znaku (ang. foreground). Funkcją służąca do generowania par kolorów jest.
int init_pair(short pair, short f, short b);
Funkcja ta przyjmuje trzy parametry. Pierwszy parametr to identyfikator par kolorów
(numer pary kolorów). Dwa kolejne do kolory (f – kolor znaku, b – kolor tła). Tak
wygenerowaną parę kolorów możemy później używać do ustawiania atrybutów dla tekstu.
Przykład:
int main(int argc, char *argv[])
{
initscr();
if(has_colors() == FALSE)
{
endwin();
printf("Twoj terminal nie obsluguje kolorow ...\n");
exit(1);
}
start_color();
Laboratorium nr 3
4/4
init_pair(1, COLOR_RED, COLOR_BLACK);
init_pair(2, COLOR_GREEN, COLOR_BLACK);
getch();
endwin();
}
Gdy posiadamy już wygenerowane pary kolorów możemy je użyć do ustawiania
atrybutów dla tekstu. Atrybutu tekstu ustawiamy za pomocą funkcji attrset(), wattrset(),
attron(), wattron() oraz specjalnego makra służącego do pobierania pary kolorów
COLOR_PAIR().
Przykład:
init_pair(1, COLOR_RED, COLOR_BLACK);
attron(COLOR_PAIR(1));
printw("Dowolny tekst");
attroff(COLOR_PAIR(1));
Przykład:
wattrset(okno,COLOR_PAIR(1));
wattrset(okno,COLOR_PAIR(1) | A_BOLD);

Podobne dokumenty