curses Umožňuje akce jako:
Knihovna existuje ve starší verzi curses a v novější
ncurses. Celkový počet funkcí přesahuje 300
/* Prelozit: */
/* module add ncurses */
/* gcc testcurses.c -o testcurses -lncurses */
/* Pred spustenim nastavit: export TERM=xterm */
#include <ncurses.h>
#include <unistd.h>
int main()
{ int i,ch;
char text[]="Stiskni nejakou klavesu ";
char usr[10],pwd[10];
WINDOW *ww;
/* inicializace */
initscr(); /* Zacatek prace s curses */
cbreak(); noecho(); keypad(stdscr,1); /* Nastav implicitní režimy */
nodelay(stdscr,0); nl();
clear(); /* Vymaz obrazovku */
/* pis po obrazovce - uhlopricne */
mvaddstr(0,20,"Zkouska psani po obrazovce:"); /* pis text na zadanou pozici */
getmaxyx(stdscr,maxr,maxc);
move(maxr-1,0); /* Presun kurzor */
printw("Okno ma %d radku, %d sloupcu",maxr,maxc); /* od pozice kurzoru pis text */
for(i=0;i<23;i++)
{ mvaddch(i+1,3*i,text[i]); /* od pozice kurzoru pis znak */
napms(300); /* Cekej zadany pocet milisekund */
refresh(); /* Teprve ted se zmeny vykresli! */
}
/* zkouska cteni z klavesnice */
ch=getch(); /* Cti znak z klavesnice */
attrset(A_STANDOUT); /* Dale pis zvyraznene */
mvprintw(2,30,"%s %c","Stiskl jsi: ",ch); /* Jako printf, ale do okna curses na danou pozici */
refresh();
sleep(5u); /* Cekej 5 sekund */
clear();
refresh();
/* zkouska okna */
ww=newwin(5,20,10,30); */ Vytvor podokno */
wborder(ww,'|','I','-','=','.',',','+','*'); /* Oramuj okno */
echo(); /* Vstup vypisuj */
mvwaddstr(ww,1,2,"Login: "); /* Pis do podokna */
wgetstr(ww,usr); /* Cti retez v okne */
noecho(); /* Vstup nevypisuj */
wmove(ww,3,2);waddstr(ww,"Password: ");
wgetstr(ww,pwd);
wrefresh(ww); /* Prekresli jen podokno */
delwin(ww); /* Zrus podokno */
attrset(A_REVERSE); /* Nadale prohod barvu popredi a pozadi (negativ) */
mvprintw(20,10,"Vsichni sem! "
"Uzivatel \"%s\" ma heslo \"%s\"",usr,pwd);
refresh();
sleep(5u);
clear();
/* zkouska barvy */
if(has_colors()) /* Umi terminal zpracovavat barvy? */
{ start_color(); /* Pracuj s barvami */
init_pair(1, COLOR_RED, COLOR_YELLOW); /* Definuj dvojici barev (pozadi, popredi) */
attron(COLOR_PAIR(1)); /* Pouzij definovanou dvojici barev */
mvprintw(4,30,"BAREVNY TEXT");
attroff(COLOR_PAIR(1)); /* Prestan pouzivat dvojici barev */
refresh();
i=getch(); /* Cekej na zadani znaku */
}
endwin(); /* Konec prace s ncurses */
return 0;
}
man curses |
Obecný popis |
man curs_inopts |
Chování terminálu při vstupu z klávesnice |
man curs_outopts |
Chování terminálu při výstupu na obrazovku |
man curs_addch man curs_addstr man curs_addchstr man curs_addwch man curs_addwstr man curs_addwchstr |
Zápis znaků a řetězců na obrazovku |
man curs_getch man curs_getyx man curs_getstr man curs_getwch man curs_getwstr |
Čtení znaku nebo řetězce z klávesnice |
man curs_inch man curs_instr man curs_inwstr man curs_inwchstr |
Sejmutí obsahu části obrazovky |
man curs_insch man curs_insstr man curs_inswstr |
Vložení znaku nebo řetězce |
man curs_move |
Přesun kursoru (lze též spojit s výstupní operací) |
man curs_printw man curs_scanw |
Analogie printf a scanf prováděná v okně |
man curs_attr |
Nastavení atributů textu |
man curs_border |
Vykreslování rámečků a čar |
man curs_bkgd |
Nastavení pozadí okna |
man curs_color |
Manipulace s barvami (vyžaduje terminál
schopný práce s barvami, např. xterm) |
man curs_initscr man curs_window |
Vytváření a rušení oken, manipulace s nimi |
man curs_overlay |
Ovládání překrývání oken |
man curs_clear |
Výmaz okna nebo jeho části |
man curs_delch man curs_delln |
Výmaz znaků a řádků |
man curs_touch |
Indikace, že se změnilo okno nebo jeho část |
man curs_pad |
Práce se strukturami pad (analogie okna, ale nemusí být zobrazeno) |
man curs_scr_dump |
Záznam a obnova obsahu virtuálního okna |
man curs_slk |
Práce s funkčními klávesami |
man curs_beep |
Akustická a optická signalizace |
man curs_refresh |
Znovuvykreslení okna nebo jeho části |
man curs_util |
Různé pomocné funkce |
man curs_termattrs man curs_terminfo man curs_termcap |
Ovládání vlastností terminálu |
man curs_kernel |
Low-level funkce |
Pro použití knihovny ncurses je třeba před překladem
aktivovat modul ncurses, v parametrech pro překladač vynechat
parametr
-pedantic a přidat na konec parametr -lncurses. Před spuštěním
přeloženého programu je na počítači AISA třeba provést příkaz
export TERM=xterm (s terminálem linux-aisa nebudou
ncurses fungovat).
conio Umožňuje podobné akce jako curses, ale je mnohem chudší. Je
podporována běžnými překladači pro platformu DOS/Windows včetně MINGW gcc/g++
gotoxy |
Přesun kursoru na zadanou pozici |
wherex, wherey |
Zjištění vodorovné (svislé) pozice kursoru |
putch |
Vypiš znak na danou pozici |
puttext |
Vypiš řetězec na danou pozici |
textattr |
Zadej atributy textu (barva textu, barva pozadí, blikání) |
textcolor, textbackground |
Zadej barvu textu a pozadí |
lowvideo,
normvideo, hivideo |
Ovládání jasu zobrazeného textu |
clreol, clrscr |
Vymaž zbytek řádku, vymaž obrazovku |
getch, getche |
Přečti znak (bez opsání, s opsáním) |
getpass |
Vypiš výzvu a přečti řetězec bez opsání |
cgets, cputs |
Analogie gets, puts, ale v okně |
cscanf, cprintf |
Analogie scanf, printf, ale v okně |
kbhit |
Test, zda v bufferu klávesnice čeká znak na zpracování |
window |
Vytvoření okna |
Na rozdíl od ncurses není nutno systém
conio inicializovat ani
uzavírat.
Knihovna conio byla portována rovněž pod Unix,
zde je však mnohem lepší používat curses.
Viz online nápovědu k překladačům firmy Borland (Borland C++, Borland C++ Builder) nebo http://conio.sourceforge.net/ (pro verzi MINGW)
Vzhledem k tomu, že jde o grafické prostředí, je nutno používat grafické knihovny. Některé jsou probírány v přednášce z předmětu PB161 - Programování v C++
| Další přednáška | Hlavní stránka |