Curses je knihovna pro správu terminálů pro operační systémy typu Unix , která umožňuje vytvářet aplikace s textovým uživatelským rozhraním .
Název knihovny pochází z anglického výrazu „cursor optimization“ ( optimalizace kurzoru ) [1] a znamená také „prokletí“. Knihovna obsahuje funkce pro práci se zobrazením textového terminálu (například VT100 ) [2] .
Curses API je popsáno v několika různých zdrojích [3] . Většina implementací kleteb používá databázi , která popisuje schopnosti tisíců různých terminálů. Některé implementace (například PDCurses) místo toho použijte specializované ovladače zařízení . Většina implementací používá terminfo ; někteří používají termcap . Pro aplikace, které nevyžadují grafický výstup nebo více písem, bude implementace rozhraní s curses mnohem jednodušší a rychlejší než použití X Window System .
Pomocí kleteb mohou programátoři vytvářet textové aplikace, které jsou přenosné mezi různými typy terminálů – knihovna se sama stará o to, jaké řídicí znaky mají být použity pro každý konkrétní terminál. Curses poskytuje možnost zobrazení více oken na jednom terminálu. Každé okno je reprezentováno maticí znaků. Programátor nastaví polohu, velikost a obsah každého okna a aktualizuje obrazovku. Knihovna určí minimální sadu změn pro aktualizaci obrazovky a aplikuje je na základě schopností terminálu.
První implementace kleteb byla napsána Kenem Arnoldem a dodávána s BSD UNIX, kde byla použita pro několik her, z nichž nejznámější je Rogue [4] [5] [6] .
Někdy se mylně tvrdí, že kletby byly použity v textovém editoru vi . Ve skutečnosti byl kód, který optimalizuje pohyb kurzoru, vypůjčen curses z vi , který vyšel dříve [5] .
Podle Goodharta začala původní implementace Kena Arnolda rozšířením funkcí knihovny termcap [7] . O několik let později se Mark Horton , který pracoval na vylepšení kódu vi a termcap v Berkeley , přestěhoval do AT&T a vytvořil další verzi založenou na terminfo , která se stala součástí UNIX System III a UNIX System V. Kvůli omezením licence posledně jmenovaného byly verze BSD a AT&T vyvinuty nezávisle. Kromě vylepšení termcap/terminfo přidala verze AT&T:
výběr textu (tučné, podtržené) verze BSD podporovala pouze režim standout alokace . perokresba verze BSD měla pro tuto funkci slabou podporu. barvy verze BSD takovou možnost neposkytovala.Vývoj kleteb AT&T se zastavil v polovině 90. let, kdy bylo oznámeno X/Open Curses . [8] Vývoj ncurses a PDCurses však pokračuje. BSD verze curses je nadále podporována v operačním systému NetBSD (široká podpora znaků, migrace z termcap na terminfo atd.).
Za evoluci kleteb AT&T lze považovat minimálně následující implementace: pcurses od Pavla Curtise (1982), PDCurses (Public Domain curses) od Marka Hesslinga na podporu jeho editoru THE (1987), stejně jako Rexx/Curses [9 ] a PC curses (verze 1.4 od Bjorna Larssona) je založena na knihovně Curtis [10] . [11]
ncurses (nové kletby) "původně byly pcurses ... a byly znovu vydány jako ncurses 1.8.1 na konci roku 1993" [12] . ncurses je nejznámější implementací kleteb a motivoval k dalšímu vývoji dalších modifikací, jako jsou BSD kletby v projektu NetBSD . [13] [14]
Ačkoli byla knihovna ncurses původně vyvinuta pro Linux, OpenBSD , FreeBSD a NetBSD, byla portována na mnoho dalších ANSI/POSIX UNIXových systémů, většinou Thomasem Dickeyem . PDCurses (nezaměňovat s ncurses) používá stejná volání jako ncurses, kromě toho, že PDCurses cílí na různá zařízení, tj. DOS , Win32 , OS/2 a okna konzoly X11 . Přenesení mezi těmito dvěma verzemi není obtížné. Například roguelike ADOM byl napsán pro Linux a ncurses a později byl portován na DOS a PDCurses [15] [16] .
Níže je typické použití kleteb (v okně terminálu, které podporuje barvu)
Barevné rozhraní programu Tin newsreader
Použití kleteb v Jackově vypalovacím softwaru
Curses usnadňuje vytváření funkcí podobných GUI na textovém terminálu, jako je textový režim PC, hardwarový terminál ANSI, Telnet nebo SSH klient .
Programy používající kletby mají často uživatelské rozhraní, které se podobá tradičnímu grafickému uživatelskému rozhraní , včetně widgetů , jako jsou rozevírací nabídky a rolovací seznamy, namísto rozhraní příkazového řádku (CLI), běžně používaného na textových terminálech. Kromě toho jsou programy využívající kletby méně náročné na zdroje než jejich grafické protějšky a jsou lépe přenositelné mezi systémy (zejména velmi staré, před rokem 1990).
Curses je použit v implementaci jazyka FMLI, který byl použit k vytvoření přívětivého uživatelského rozhraní FACE v systémech SVR4, které poskytuje základní funkcionalitu pro administraci. FMLI založené na Curses bylo později použito v systému Solaris k poskytnutí rozhraní na vysoké úrovni pro příkazy Live Upgrade.
Curses je nejčastěji spojován s operačními systémy podobnými Unixu, ačkoli existují implementace pro Microsoft Windows .