Terminfo

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:

Datamodel

Termcap-databaserne består af en eller flere terminalbeskrivelser.

Indeks

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.

Værdier

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.

Hierarki

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

Lagermodel

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]

Træstruktur

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.

Hashed database

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.

Begrænsninger og udvidelser

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.

Se også

Links

  1. Horton, Mark. USENIX Conference Proceedings. — Boston, MA: USENIX. - T. Sommer 1982 . - S. 79-91 .
  2. fa.info-terms mailingliste kommentarer til termcap/terminfo i 1985 . Hentet 3. marts 2015. Arkiveret fra originalen 18. marts 2015.
  3. pcurses shar-fil fra 1986, der viser ændringshistorik (downlink) . Arkiveret fra originalen den 27. september 2007. 
  4. pcurses komplet udstationering .
  5. Thomas E. Dickey. term - format af kompileret termfil (17. december 2006). Hentet 3. marts 2015. Arkiveret fra originalen 2. april 2015.
  6. X/Open Curses, Issue 4 Version 2 - Referencesider . Den åbne gruppe (1997). Hentet 3. marts 2015. Arkiveret fra originalen 20. juni 2010.
  7. Kommandoer og hjælpeprogrammer udgave 5 - Referencesider . Den åbne gruppe (1997). Hentet 3. marts 2015. Arkiveret fra originalen 20. juni 2010.
  8. Thomas E. Dickey. Annoncering af ncurses 5.3 (12. oktober 2002). Hentet 3. marts 2015. Arkiveret fra originalen 11. november 2014.
  9. Todd C. Miller. OpenBSD read_bsd_terminfo.c modul (1999).
  10. Thomas E. Dickey. Annoncering af ncurses 5.6 (17. december 2006). Hentet 3. marts 2015. Arkiveret fra originalen 8. marts 2015.
  11. De fleste af disse restriktioner var på plads før X/Open og Open Software Foundation fusionerede til The Open Group , så mange kilder henviser til X/Open .
  12. Terminfo Kildeformat (FORBEDREDE FORBINDELSER) - garanterede minimumsgrænser . Den åbne gruppe (1997). Hentet 3. marts 2015. Arkiveret fra originalen 17. december 2009.

Eksterne links