Terminfo

terminfo är ett bibliotek och en databas som tillåter program att använda terminaldisplayen i en enhetsoberoende stil. Mark Horton skapade den första versionen av terminfo-biblioteket 1981-1982 som en uppgraderad version av termcap . [1] Förbättringar inkluderade:

Terminfo-biblioteket inkluderades i UNIX System V Release 2 och blev snart den föredragna formen för att lagra terminalbeskrivningar i System V framför termcap (som BSD fortsatte att använda). [2] Detta beteende implementerades ytterligare i pcurses 1982-1984 av Pavel Curtis , och var tillgängligt i andra UNIX -implementationer, inklusive Mark Hortons tillägg. [3] Detaljer kan hittas i comp.sources.unix nyhetsgrupp , december 1986. [fyra]

Terminfodatabasen kan beskriva egenskaperna hos hundratals olika terminalskärmar. Detta tillåter program att använda textutmatning oberoende av typen av terminal.

Funktionsexempel:

Datamodell

Termcap-databaserna består av en eller flera terminalbeskrivningar.

Index

Varje beskrivning måste innehålla terminalens kanoniska namn. Den kan också innehålla flera alias. Dessa namn används som söknycklar i termcap-databasen.

Värden

Beskrivningen innehåller en eller flera egenskaper som har standardnamn. Egenskaper kan vara av följande typer: Boolean , Numeric och String . Termcap-biblioteket har inte en fördefinierad typ för var och en av egenskaperna, så typen bestäms utifrån syntaxen:

Applikationer som använder terminfo förväntar sig att egenskaperna är av en viss typ och får de önskade värdena från terminfo-databasen med hjälp av biblioteksanrop som endast framgångsrikt returnerar ett värde om den förväntade typen matchar den som finns i databasen.

Som med termcap är vissa strängegenskaper escape-sekvenser som kan skickas till värden genom att trycka på speciella tangenter på tangentbordet. De andra egenskaperna är strängar som kan skickas till terminalen från applikationen. I det senare fallet tjänar terminfo-biblioteket (som termcap) för att ersätta applikationsparametrar i den skickade strängen. Dessa funktioner tillhandahåller en stackbaserad uttrycksparser som ursprungligen användes för att minimera längden på utdatasträngen, som kan innehålla olika valfria parametrar (såsom färgescape-sekvenser). Däremot tillhandahåller termcap-biblioteket en minimal uppsättning användbara operationer som är kompatibla med de flesta terminaler.

Hierarki

Terminfo-beskrivningar är sammansatta genom att slå samman två definitioner, lägga till, ta bort eller omdefiniera egenskaper. Oavsett datalagringsmodell returnerar terminfo-biblioteket den begärda beskrivningen med hjälp av data som sammanställts av ett externt verktyg (som tic ).

Lagringsmodell

Terminfo-data lagras som en binär fil , vilket gör det svårare att redigera än termcap . Egenskaper lagras i separata tabeller för booleska, numeriska och strängvärden. Detta schema har utvecklats av Mark Horton och, förutom vissa skillnader i uppsättningen av tillgängliga namn, används det i de flesta implementeringar av terminfo. [5] X /Open -specifikationen definierar inte formatet för en kompilerad terminalbeskrivning och nämner inte ens tic- eller infocmp-verktygen . [6] [7] Eftersom kompilerade terminfo-beskrivningar inte innehåller metadata som anger vilket index en viss egenskap hamnar under, är de inte nödvändigtvis kompatibla över implementeringar. Men eftersom de flesta implementeringar använder samma allmänna tabellstruktur (inklusive rubrik- och datafältstorlekar), är det möjligt att automatiskt generera anpassade terminfo-bibliotek som kan läsa implementeringsspecifika data. Till exempel är ncurses kompatibelt med datalagringsformatet för flera olika implementeringar av terminfo. [åtta]

Trädstruktur

Den ursprungliga (och vanligaste) implementeringen av terminfo-biblioteket läser data från en trädstruktur . I terminfo används det första tecknet i terminalbeskrivningsnamnet som sökvägskomponent och det fullständiga namnet används som filnamn. Detta hjälper dig att söka efter rätt beskrivning snabbare än i termcap.

Hashed databas

Vissa terminfo-implementationer lagrar terminalbeskrivningar i en hashad databas (till exempel Berkeley DB version 1.85). [9] [10] Två typer av poster lagras: alias, som pekar på sökvägen till den kanoniska posten, och kanoniska poster, som innehåller hela uppsättningen egenskaper.

Begränsningar och tillägg

Den öppna gruppen anger terminfo-gränser (lägsta garanterade värden) som endast gäller för källfilen. [11] [12] Två av dessa restriktioner är av särskilt intresse:

Begränsningen på 14 tecken är för kompatibilitet med mycket gamla filsystem som inte kan visa längre filnamn. Även om sådana filsystem vanligtvis är föråldrade, dokumenterades själva gränserna i slutet av 1980-talet och har ännu inte reviderats.

Den övre numeriska gränsen 32767 är det maximala 16-bitars värdet med positivt tecken . Terminfo-posten kan innehålla negativa tal för att representera saknade eller saknade värden.

Till skillnad från termcap har terminfo en rå och sammanställd representation. Begränsningar för den kompilerade vyn finns inte i specifikationen. De flesta implementeringar hänvisar dock till tic (terminalinformationskompilator), vars kompilerade beskrivningar inte kan överstiga 4 096 byte.

Se även

Länkar

  1. Horton, Mark. USENIX Konferenshandlingar. — Boston, MA: USENIX. - T. Sommaren 1982 . - S. 79-91 .
  2. fa.info-terms e- postlista kommentarer om termcap/termino 1985 . Hämtad 3 mars 2015. Arkiverad från originalet 18 mars 2015.
  3. pcurses shar-fil från 1986 som visar ändringshistorik (nedlänk) . Arkiverad från originalet den 27 september 2007. 
  4. pcurses fullständigt inlägg .
  5. Thomas E. Dickey. term - format för sammanställd termfil (17 december 2006). Hämtad 3 mars 2015. Arkiverad från originalet 2 april 2015.
  6. X/Open Curses, Issue 4 Version 2 - Referenssidor . Den öppna gruppen (1997). Hämtad 3 mars 2015. Arkiverad från originalet 20 juni 2010.
  7. Kommandon och verktyg Utgåva 5 - Referenssidor . Den öppna gruppen (1997). Hämtad 3 mars 2015. Arkiverad från originalet 20 juni 2010.
  8. Thomas E. Dickey. Tillkännage ncurses 5.3 (12 oktober 2002). Hämtad 3 mars 2015. Arkiverad från originalet 11 november 2014.
  9. Todd C. Miller. OpenBSD read_bsd_terminfo.c-modul (1999).
  10. Thomas E. Dickey. Tillkännage ncurses 5.6 (17 december 2006). Hämtad 3 mars 2015. Arkiverad från originalet 8 mars 2015.
  11. De flesta av dessa restriktioner fanns på plats innan X/Open och Open Software Foundation slogs samman till The Open Group , så många källor hänvisar till X/Open .
  12. Terminfo Källformat (FÖRBÄTTADE FÖRBÅNGAR) - Minsta garanterade gränser . Den öppna gruppen (1997). Hämtad 3 mars 2015. Arkiverad från originalet 17 december 2009.

Externa länkar