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;
}

Podobne dokumenty