terminfo er et bibliotek og en database , der tillader programmer at bruge terminaldisplayet i en enhedsuafhængig stil. Mark Horton skabte den første version af terminfo-biblioteket i 1981-1982 som en opgraderet version af termcap . [1] Forbedringer inkluderet:
Terminfo-biblioteket blev inkluderet i UNIX System V Release 2 og blev snart den foretrukne form til lagring af terminalbeskrivelser i System V frem for termcap (som BSD fortsatte med at bruge). [2] Denne adfærd blev yderligere implementeret i pcurses i 1982-1984 af Pavel Curtis og var tilgængelig i andre UNIX -implementeringer, inklusive Mark Hortons tilføjelser. [3] Detaljer kan findes i comp.sources.unix nyhedsgruppen , december 1986. [fire]
Terminfo-databasen kan beskrive karakteristika for hundredvis af forskellige terminalskærme. Dette tillader programmer at bruge tekstoutput uafhængigt af terminaltypen.
Eksempler på funktioner:
Termcap-databaserne består af en eller flere terminalbeskrivelser.
Hver beskrivelse skal indeholde det kanoniske navn på terminalen. Det kan også indeholde flere aliaser. Disse navne bruges som søgenøgler i termcap-databasen.
Beskrivelsen indeholder en eller flere egenskaber, der har standardnavne. Egenskaber kan være af følgende typer: Boolean , Numeric og String . Termcap-biblioteket har ikke en foruddefineret type for hver af egenskaberne, så typen bestemmes ud fra syntaksen:
Applikationer, der bruger terminfo, forventer, at egenskaber er af en bestemt type og henter de ønskede værdier fra terminfo-databasen ved hjælp af bibliotekskald, der kun returnerer en værdi, hvis den forventede type matcher den, der findes i databasen.
Som med termcap er nogle strengkarakteristika escape-sekvenser , der kan sendes til værten ved at trykke på specielle taster på tastaturet. De andre egenskaber er strenge, der kan sendes til terminalen fra applikationen. I sidstnævnte tilfælde tjener terminfo-biblioteket (som termcap) til at erstatte applikationsparametre i den sendte streng. Disse funktioner giver en stakbaseret udtryksparser, der oprindeligt blev brugt til at minimere længden af outputstrengen, som kan indeholde forskellige valgfrie parametre (såsom farveescape-sekvenser). I modsætning hertil giver termcap-biblioteket et minimalt sæt nyttige operationer, der er kompatible med de fleste terminaler.
Terminfo-beskrivelser er sammensat ved at flette to definitioner, tilføje, fjerne eller omdefinere egenskaber. Uanset datalagringsmodellen returnerer terminfo-biblioteket den ønskede beskrivelse ved hjælp af data kompileret af et eksternt værktøj (såsom tic ).
Terminfo-dataene gemmes som en binær fil , hvilket gør det sværere at redigere end termcap . Egenskaber gemmes i separate tabeller for booleske, numeriske og strengværdier. Denne ordning blev udviklet af Mark Horton, og bortset fra nogle forskelle i sættet af tilgængelige navne, bruges den i de fleste implementeringer af terminfo. [5] X /Open -specifikationen definerer ikke formatet for en kompileret terminalbeskrivelse og nævner ikke engang tic- eller infocmp -værktøjerne . [6] [7] Fordi kompilerede terminfo-beskrivelser ikke indeholder metadata , der specificerer, hvilket indeks en bestemt egenskab kommer under, er de ikke nødvendigvis kompatible på tværs af implementeringer. Men da de fleste implementeringer bruger den samme generelle tabelstruktur (inklusive header- og datafeltstørrelser), er det muligt automatisk at generere brugerdefinerede terminfo-biblioteker, der kan læse implementeringsspecifikke data. For eksempel er ncurses kompatibel med datalagringsformatet for flere forskellige implementeringer af terminfo. [otte]
Den originale (og mest almindelige) implementering af terminfo-biblioteket læser data fra en træstruktur . I terminfo bruges det første tegn i terminalbeskrivelsesnavnet som stikomponenten, og det fuldt kvalificerede navn bruges som filnavn. Dette hjælper dig med at søge efter den rigtige beskrivelse hurtigere end i termcap.
Nogle terminfo-implementeringer gemmer terminalbeskrivelser i en hashed database (f.eks. Berkeley DB version 1.85). [9] [10] To typer poster gemmes: aliaser, som peger på stien til den kanoniske post, og egentlige kanoniske poster, der indeholder det fulde sæt af egenskaber.
Den åbne gruppe angiver terminfo-grænser (minimum garanterede værdier), der kun gælder for kildefilen. [11] [12] To af disse begrænsninger er af særlig interesse:
Begrænsningen på 14 tegn er for kompatibilitet med meget gamle filsystemer, der ikke kan vise længere filnavne. Selvom sådanne filsystemer normalt er forældede, blev selve grænserne dokumenteret i slutningen af 1980'erne og er endnu ikke blevet revideret.
Den øvre numeriske grænse 32767 er den maksimale 16-bit værdi med positivt fortegn . Terminfo-indgangen kan indeholde negative tal for at repræsentere manglende eller manglende værdier.
I modsætning til termcap har terminfo en rå og kompileret repræsentation. Begrænsninger for den kompilerede visning er ikke angivet i specifikationen. De fleste implementeringer henviser dog til tic (terminal information compiler), hvis kompilerede beskrivelser ikke kan overstige 4.096 bytes.