Förbannelser

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 24 mars 2021; kontroller kräver 5 redigeringar .

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] .

Översikt

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.

Historik

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.).

pcurses och PDCurses

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

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]

Portabilitet

Ä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] .

Skärmdumpar

Nedan är en typisk användning av förbannelser (i ett terminalfönster som stöder färg)

Programvara som använder förbannelser

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 .

Se även

Anteckningar

  1. Thomas E. Dickey. NCURSES - Vanliga frågor . Hämtad 25 februari 2015. Arkiverad från originalet 21 augusti 2018.
  2. Thomas E. Dickey. NCURSES - Vanliga frågor . Hämtad 25 februari 2015. Arkiverad från originalet 21 augusti 2018.
  3. John Strang, Programming with curses , O'Reilly, ISBN 0-937175-02-1
  4. Peter H. Salus. Unix historia handlar lika mycket om samarbete som om teknik . Byte (oktober 1994). Hämtad 25 februari 2015. Arkiverad från originalet 25 februari 2015.
  5. 1 2 Arnold, KCRC Skärmuppdatering och markörrörelseoptimering: A Library Package  (eng.)  : journal. — University of California, Berkeley, 1977.
  6. Kenneth CRC Arnold. Skärmuppdatering och markörrörelseoptimering: ett bibliotekspaket (december 1992). Datum för åtkomst: 25 februari 2015. Arkiverad från originalet den 28 september 2007.
  7. Goodheart, Bernie. UNIX-förbannelser förklarade  (neopr.) . - Prentice Hall , 1991. - S. xi. — ISBN 0-13-931957-3 .
  8. X/Open Curses, Issue 4 Version 2, Referenssidor . Den öppna gruppen (1997). Hämtad 25 december 2016. Arkiverad från originalet 26 december 2016.
  9. Mark Hessling. Rexx/Curses . SourceForge -projektet rexxcurses (2008). Datum för åtkomst: 10 februari 2014. Arkiverad från originalet den 15 december 2013.
  10. F. Ellermann. CURSES.NEW i pccurses.zip (26 juli 1993). - "baserat på PC-förbannelser (version 1.4) skriven av Björn Larsson". Hämtad: 10 februari 2014.  (inte tillgänglig länk)
  11. Björn Larsson. README.NOW i pccurs14.zip (nedlänk) (14 januari 1990). - "PCcurses är en port/omskrivning av Pavel Curtis [paket]". Hämtad 10 februari 2014. Arkiverad från originalet 23 februari 2014. 
  12. Thomas E. Dickey. NCURSES - New Curses (december 1996). Hämtad 5 mars 2013. Arkiverad från originalet 8 maj 2019.
  13. NetBSD-projekt. CURSES_SCREEN(3), NetBSD Library Functions Manual (februari 2004). Hämtad 25 februari 2015. Arkiverad från originalet 25 februari 2015.
  14. Ruibiao Qiu. NetBSD-SoC: Wide Character Support i NetBSD curses Library (september 2005). Hämtad 25 februari 2015. Arkiverad från originalet 13 mars 2015.
  15. Thomas Biskup. ADOM - The Past (inte tillgänglig länk) (1994–2007). Hämtad 16 november 2007. Arkiverad från originalet 10 oktober 2007. 
  16. Thomas Biskup (15 mars 1996). " Nytt spel: ADOM (endast MS-DOS, MS-Windows och Linux) ". rec.games.roguelike.announce . (Google-grupper) . Hämtad 16 november 2007. Arkiverad 4 juni 2011 på Wayback Machine

Länkar