Curses a neve a szoftver könyvtár , amely lehetővé teszi a fejlesztés a Unix a teljes képernyős környezetben szöveges módban , függetlenül a számítógép terminál használható, és minden típusú alkalmazásokat.
Ez származott a BSD forgalmazás Unix, amelyben azt használják vi szöveg szerkesztő , és a Rogue játék .
Az átkok felhasználásával a programozók szöveges mód alapján tervezhetnek alkalmazásokat, függetlenül az egyes terminálok sajátosságaitól. Az átokkönyvtár gondoskodik a megfelelő vezérlő karakterek küldéséről a monitorra, miközben a program fut, és megpróbálja optimalizálni, amit tud, amikor csak tud.
Ha szöveges módban marad, de így közvetlenül a képernyőn bárhová címez, akkor nem kell aggódnia a grafikus kezelő miatt sem, amelyet a Linux vagy a Unix használhat.
Az 1990-es években több Linux-telepítő teljes képernyős szöveges módot használt, kezdve a híres Slackwareét .
Átokkal bármikor lehet írni a képernyő bármely pontján, ami megkönnyíti a program előrehaladásának követését kevésbé fárasztó körülmények között, mint az írógép típusú áramlási mód. Ezzel a módszerrel bejegyzéseket is készíthet, például szöveges módban létrehozhat egyszerű űrlapokat, vagy akár teljes képernyős terminált, például egy 3270-et is szimulálhat . Változatok léteznek még egy Minitel szimulálására is .
A fő funkciók nagyon egyszerűek:
initscr() inicializálja a teljes képernyős módot.
move(ligne, colonne) gyakorlatilag mozgassa a kurzort
addstr(chaîne) írjon egy karakterláncot, ahol a kurzor található
refresh() igazítja a valós képernyőt és a virtuális képernyőt
endwin() befejezi a teljes képernyős módot, és visszaállítja a képernyőt abba az állapotba, amelyben a belépés előtt volt.
A Curses / ncurses alapértelmezés szerint telepítve van néhány disztribúcióhoz. Más, mint az Ubuntu Studio vagy a Mint esetében , ilyet kell telepíteni a gcc 5-hez egy konzolról sudo apt install libncurses5-dev.
A következő nagyon egyszerű program számít a szavak a Francia szótár / usr / share / dict / french a GNU / Linux által hosszában .
// 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 }Az átokkönyvtár funkcionalitásának Windows rendszeren történő használata a PDcurses könyvtár használatával válik lehetővé, amely ncurses alapú . Ez nem azonos, de lehetővé teszi a legtöbb funkció használatát. Például a Python nyelvvel és annak 3.7 verziója óta ez egyszerűen a windows-curses csomag telepítésével valósítható meg.
A kurzor mozgásparancsainak közvetlen elküldése a terminálra (valamint a karakter színének és hátterének megváltoztatása) a legtöbb karakter képernyőn is lehetséges, ezek általában a VT100- mal kompatibilis CSI ( Control Sequence Introducer) nevű ANSI szekvenciáknak felelnek meg .) A gyakorlatban az átkok használata megkönnyíti a programkarbantartást (a CSI használata elkerülhetetlen marad a szkriptekben). Ezenkívül az a tény, hogy egy új kijelző csak átokkal történik, refresh()és nem minden alkalommal, amikor új bejegyzés történik a terminálon, jobb vizuális élményt nyújthat a felhasználó számára azáltal, hogy a teljes képernyőt egyszer megjeleníti. azt.