Curses är ett terminalhanteringsbibliotek för Unix-liknande operativsystem som låter dig skapa applikationer med ett textanvändargränssnitt .
Namnet på biblioteket kommer från den engelska termen "cursor optimization" ( cursor optimization ) [1] , och betyder också "curses". Biblioteket innehåller funktioner för att arbeta med visningen av en textterminal (till exempel VT100 ) [2] .
Curses API beskrivs i flera olika källor [3] . De flesta implementeringar av förbannelser använder en databas som beskriver kapaciteten hos tusentals olika terminaler. Vissa implementeringar (som PDCurses) använd specialiserade enhetsdrivrutiner istället . De flesta implementeringar använder terminfo ; vissa använder termcap . För applikationer som inte kräver grafisk utdata eller flera typsnitt, kommer det att vara mycket enklare och snabbare att implementera gränssnittet med förbannelser än att använda X Window System .
Med hjälp av förbannelser kan programmerare skapa textbaserade applikationer som är portabla mellan olika typer av terminaler – biblioteket tar själv hand om vilka kontrolltecken som ska användas för varje enskild terminal. Curses ger möjligheten att visa flera fönster på en enda terminal. Varje fönster representeras av en matris av tecken. Programmeraren ställer in position, storlek och innehåll för varje fönster och uppdaterar skärmen. Biblioteket bestämmer den minsta uppsättningen av ändringar för att uppdatera skärmen och tillämpar dem baserat på terminalens möjligheter.
Den första implementeringen av förbannelser skrevs av Ken Arnold och levererades med BSD UNIX, där den användes för flera spel, den mest kända är Rogue [4] [5] [6] .
Det hävdas ibland felaktigt att förbannelser användes i vi -textredigeraren . Faktum är att koden som optimerar markörrörelsen lånades av förbannelser från vi , som kom ut tidigare [5] .
Enligt Goodhart började Ken Arnolds ursprungliga implementering med att utöka funktionerna i termcap-biblioteket [7] . Några år senare flyttade Mark Horton , som hade arbetat med att förbättra vi- och termcap -koden på Berkeley , till AT&T och skapade en annan version baserad på terminfo som blev en del av UNIX System III och UNIX System V. På grund av begränsningarna i licensen för den senare utvecklades BSD- och AT&T-versionerna oberoende av varandra. Förutom termcap/terminfo-förbättringar, lade AT&T-versionen till:
texturval (fet, understruket) BSD-versionen stödde endast det enastående allokeringsläget . teckning BSD-versionen hade svagt stöd för denna funktion. färger BSD-versionen gav inte en sådan möjlighet.Utvecklingen av AT&T-förbannelser stannade i mitten av 1990-talet när X/Open Curses tillkännagavs . [8] Utvecklingen av ncurses och PDCurses fortsätter dock. BSD-versionen av curses fortsätter att stödjas på NetBSD- operativsystemet (brett teckenstöd, migrering från termcap till terminfo, etc.).
Följande implementeringar kan åtminstone betraktas som en utveckling av AT&T-förbannelser: pcurses av Pavel Curtis (1982), PDCurses (Public Domain curses) av Mark Hessling för att stödja hans THE- redaktör (1987), samt Rexx/Curses [9 ] och PC-förbannelser (version 1.4 av Björn Larsson) är baserad på Curtis-biblioteket [10] . [11]
ncurses (nya förbannelser) "var ursprungligen pcurses ... och släpptes på nytt som ncurses 1.8.1 i slutet av 1993" [12] . ncurses är den mest kända implementeringen av curses och har motiverat vidareutveckling av andra modifieringar som BSD curses i NetBSD- projektet . [13] [14]
Även om ncurses-biblioteket ursprungligen utvecklades för Linux, OpenBSD , FreeBSD och NetBSD, har det porterats till många andra ANSI/POSIX UNIX-system, mestadels av Thomas Dickey . PDCurses (inte att förväxla med ncurses) använder samma anrop som ncurses, förutom att PDCurses riktar sig till olika enheter, dvs DOS , Win32 , OS/2 och X11 konsolfönster . Portering mellan dessa två versioner är inte svårt. Till exempel skrevs den roguelike ADOM för Linux och ncurses, och portades senare till DOS och PDCurses [15] [16] .
Nedan är en typisk användning av förbannelser (i ett terminalfönster som stöder färg)
Färggränssnitt för Tin nyhetsläsare
Använder förbannelser i Jacks bränningsprogram
Curses gör det enkelt att skapa GUI-liknande funktionalitet på en textterminal som PC-textläge, ANSI-hårdvaruterminal, Telnet eller SSH- klient .
Program som använder förbannelser har ofta ett användargränssnitt som liknar ett traditionellt grafiskt användargränssnitt , inklusive widgets som rullgardinsmenyer och rullningsbara listor, istället för kommandoradsgränssnittet (CLI) som vanligtvis används på textterminaler. Dessutom är program som använder förbannelser mindre resurskrävande än sina grafiska motsvarigheter och mer portabla mellan system (särskilt mycket gamla, före 1990).
Curses används i implementeringen av FMLI-språket, som användes för att skapa ett vänligt FACE-användargränssnitt i SVR4-system som ger grundläggande funktionalitet för administration. Curses-baserad FMLI användes senare på Solaris -systemet för att tillhandahålla ett högnivågränssnitt för Live Upgrade-kommandona.
Curses förknippas oftast med Unix-liknande operativsystem, även om implementeringar för Microsoft Windows också finns .