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:
Termcap-databaserna består av en eller flera terminalbeskrivningar.
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.
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.
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 ).
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]
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.
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.
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.