Curses je název softwarové knihovny umožňující v Unixu vývoj prostředí na celou obrazovku v textovém režimu bez ohledu na použitý počítačový terminál a pro všechny typy aplikací.
Pochází z distribuce BSD systému Unix, ve které byl použit pro textový editor vi a hru Rogue .
Pomocí kleteb mohou programátoři navrhovat aplikace založené na textovém režimu, bez ohledu na specifika každého terminálu. Knihovna nadávek se stará o odesílání příslušných řídicích znaků na monitor, zatímco je program spuštěn, a snaží se optimalizovat, co může, když je to možné.
Pokud zůstanete v textovém režimu, ale použijete jej k přímému adresování na jakékoli místo na obrazovce, odpadá vám také potřeba starat se o správce grafiky, který používá mnoho z Linuxu nebo Unixu.
Několik instalátorů Linuxu v 90. letech používalo textový režim na celou obrazovku, počínaje slavným Slackwarem .
S kletbami je možné psát kdykoli v libovolné poloze na obrazovce, což usnadňuje sledování průběhu programu za méně únavných podmínek než v režimu toku typu psacího stroje. Tímto způsobem můžete také provádět zadávání, například vytvářet jednoduché formuláře v textovém režimu nebo dokonce úplně simulovat terminál na celou obrazovku, například 3270 . Varianty dokonce existují pro simulaci Minitelu .
Hlavní funkce jsou velmi jednoduché:
initscr() inicializuje režim celé obrazovky.
move(ligne, colonne) prakticky posuňte kurzor
addstr(chaîne) napište řetězec, kde je kurzor
refresh() zarovná skutečnou obrazovku a virtuální zobrazení
endwin() ukončí režim celé obrazovky a obnoví obrazovku do stavu, ve kterém byla před zadáním.
Curses / ncurses je v některých distribucích nainstalován standardně. Na jiných, jako je Ubuntu Studio nebo Mint , je třeba nainstalovat takhle pro gcc 5 z konzoly sudo apt install libncurses5-dev.
Následující velmi jednoduchý program počítá se slova francouzského slovníku / usr / share / dict / francouzský z GNU / Linux podélným .
// Se compile par exemple avec gcc cursef.c -lcurses && ./a.out #include <curses.h> #include <string.h> int c; // colonne ((0,0) en haut à gauche) int count[128], total; // à 0; comptage des mots de chaque longueur int main() { WINDOW* win; FILE* infile; char d, xxx[128], out[128]; infile = fopen("/usr/share/dict/french", "r"); // Dictionnaire win = initscr(); // Initialisation cbreak(); // Ne pas exiger ENTER noecho(); // Pas d'écho demandé clear(); // Fenêtre à blanc refresh(); // Exécution de ce qui a été préparé dans la fenêtre int octets, glyphes; // En unicode, quelques glyphes sont multi-octets while (!feof(infile)) { fgets(xxx, 100,infile); // Bidouillage pour unicode (car glyphes multioctets) octets=0; glyphes=0; while (xxx[octets]) { if ((xxx[octets] & 0xC0) != 0x80 ) ++glyphes; ++octets; } --glyphes; ++count[glyphes]; // négliger retour ligne // Fin du bidouillage sprintf(out, "%7d %s", count[glyphes], xxx); move(glyphes-1,0); addstr(out); // préparer la ligne dans la fenêtre refresh(); // afficher la fenêtre ++total; } sprintf(out, "%7d mots au total", total); move (26,0); addstr(out); refresh(); d=getch(); // Attente d'un caractère pour effacer fenêtre et sortir endwin(); // curses call to restore the original window and leave }Využití funkcí knihovny curses ve Windows je možné díky použití knihovny PDcurses, která je založena na ncurses . To není identické, ale umožňuje vám používat většinu funkcí. Například s jazykem Python a od jeho verze 3.7 to lze provést jednoduše instalací balíčku windows-curses.
Přímé odesílání příkazů pro pohyb kurzoru do terminálu (stejně jako změna barvy a pozadí znaků) je také možné na většině obrazovek znaků, které obecně respektují sekvence ANSI zvané CSI ( Control Sequence Introducer). ), Kompatibilní s VT100 . V praxi používání kurzů usnadňuje údržbu programu (použití CSI zůstává ve skriptech nevyhnutelné). Navíc skutečnost, že nový displej probíhá s prokletími pokaždé refresh()a ne pokaždé, když je na terminálu proveden nový záznam, může uživateli poskytnout lepší vizuální zážitek tím, že se jednou zobrazí celá obrazovka. to.