to get the file
Transkrypt
to get the file
Laboratorium nr 1 Instrukcja laboratoryjna 1 1) 1/3 Programowanie w języku C 2 Temat: Wprowadzenie do NCURSES Przygotował: mgr inż. Maciej Lasota, mgr inż. Mariusz Wiśniewski Wprowadzenie do biblioteki NCURSES Ncurses (ang. New Curses) jest biblioteką umożliwiającą tworzenie programów z tekstowym interfejsem użytkownika (TUI ang. Text User Interface). Ncurses jest kontynuacją biblioteki curses oraz jej portem na system operacyjny Linux. Curses została stworzona w projektach BSD dla systemu 4.4 BSD oraz System V Release 4.0 (Svr4). Początki powstania curses datowane są na lata 1991, 1992 (pierwotna nazwa biblioteki pcurses). Biblioteka ncurses powstałą w roku 1993 i jest w większości kompatybilna z curses. 1.1) Korzystanie z biblioteki W celu wykorzystania biblioteki ncurses w programach, które tworzymy należy dołączyć plik nagłówkowy ncurses.h zawierający zdefiniowane funkcje, stałe, zmienne oraz struktury biblioteki ncurses. #include <ncurses.h> 1.2) Kompilowanie programów wykorzystujących ncurses: gcc -lncurses -o test test.c 2) Podstawowe struktury i stałe Obszar rysowania w bibliotece ncurses jest reprezentowany w postaci dwuwymiarowego układu kartezjańskiego XY. Składa się on z kolumn (oś X) oraz linii (oś Y). Początek układu (0,0) znajduje się w lewym górnym rogu ekranu. Obszar rysowania oraz każde nowo tworzone okno w ncurses opisane i reprezentowane jest przez specjalne struktury zadeklarowane w pliku nagłówkowym ncurses.h o nazwie WINDOW i SCREEN. Laboratorium nr 1 2/3 Struktura WINDOW przechowuje wszystkie informacje na temat danego okna. Zawiera między innymi: początkowe współrzędne rysowania okna, maksymalne współrzędne ekranu, wskaźnik na strukturę rodzica (okna nadrzędnego), współrzędne położenia kursora, atrybuty okna oraz wartości zdefiniowane przez użytkownika. Struktura SCREEN przechowuje wszystkie informacje na temat całego ekranu wraz z oknami znajdującymi się w obszarze rysowania. Więcej informacji na temat struktur WINDOW i SCREEN można znaleźć bezpośrednio w pliku nagłówkowym ncurses.h. • WINDOW *okno; - Wskaźnik na strukturę WINDOW, • LINES, COLS - Informacja o rozmiarze ekranu fizycznego (konsoli), • WINDOW *stdscr; - Reprezentacja całego ekranu (zmienna predefiniowana). 3) Podstawowe funkcje biblioteki • initscr(); - inicjalizacja - funkcję należy uruchomić jako pierwszą, • endwin(); - zakończenie działania biblioteki, • okno = newwin(rozm_y, rozm_x, y, x); - tworzenie okna (zarezerwowanie obszaru w pamięci), • delwin(okno); - zniszczenie okna (usunięcie z pamięci), • wnoutrefresh(okno); - funkcja odwzorowuje obszar pamięci okna na ekranie wirtualnym, • doupdate(); - funkcja wyświetla ekran wirtualny na ekranie fizycznym. 4) Przykładowy program napisany w bibliotece NCURSES Poniższy program należy skompilować i uruchomić. #include <time.h> #include <ncurses.h> int current_getch; int doloop = 1; static WINDOW *mainwnd; static WINDOW *screen; WINDOW *my_win; Laboratorium nr 1 3/3 int now_sec, now_min, now_hour; int now_day, now_wday, now_month, now_year; time_t now; struct tm *now_tm; void screen_init(void) { mainwnd = initscr(); noecho(); cbreak(); nodelay(mainwnd, TRUE); refresh(); wrefresh(mainwnd); screen = newwin(13, 27, 1, 1); box(screen, ACS_VLINE, ACS_HLINE); } static void update_display(void) { curs_set(0); mvwprintw(screen,3,6,"TIME: %d:%d:%d", now_hour, now_min, now_sec); mvwprintw(screen,5,6,"DATE: %d-%d-%d", now_day, now_month, now_year); mvwprintw(screen,7,6,"PRESS q TO END"); wrefresh(screen); refresh(); } void screen_end(void) { endwin(); } void maketime(void) { now = time (NULL); now_tm = localtime(&now); now_sec = now_tm->tm_sec; now_min = now_tm->tm_min; now_hour = now_tm->tm_hour; now_day = now_tm->tm_mday; now_wday = now_tm->tm_wday; now_month = now_tm->tm_mon + 1; now_year = now_tm->tm_year + 1900; } int main(void) { screen_init(); while (doloop) { current_getch = getch(); if (current_getch == 113) doloop = 0; maketime(); update_display(); sleep(1); } screen_end(); return 0; }