A terminfo egy olyan könyvtár és adatbázis , amely lehetővé teszi a programok számára, hogy a terminál megjelenítését eszközfüggetlen stílusban használják. Mark Horton 1981-1982 között készítette el a terminfo könyvtár első verzióját a termcap továbbfejlesztett változataként . [1] Fejlesztések a következők:
A terminfo könyvtár bekerült a UNIX System V 2. kiadásába, és hamarosan a terminálleírások System V-ben a termcap felett (amelyet a BSD továbbra is használt) előnyben részesített formává vált. [2] Ezt a viselkedést Pavel Curtis 1982-1984 -ben tovább implementálta a pcurses -ben , és elérhető volt más UNIX -megvalósításokban, beleértve Mark Horton kiegészítéseit is. [3] A részletek a comp.sources.unix hírcsoportban találhatók , 1986. december. [négy]
A terminfo adatbázis több száz különböző terminálkijelző jellemzőit tudja leírni. Ez lehetővé teszi a programok számára, hogy a terminál típusától függetlenül használják a szövegkimenetet.
Példák a funkciókra:
A termcap adatbázisok egy vagy több terminálleírásból állnak.
Minden leírásnak tartalmaznia kell a terminál kanonikus nevét. Több álnevet is tartalmazhat. Ezek a nevek keresési kulcsként használatosak a termcap adatbázisban.
A leírás egy vagy több olyan tulajdonságot tartalmaz, amelyek szabványos névvel rendelkeznek. A tulajdonságok a következő típusúak lehetnek: Boolean , Numeric és String . A termcap könyvtárnak nincs előre meghatározott típusa az egyes tulajdonságokhoz, ezért a típus a szintaxis alapján kerül meghatározásra:
A terminfo-t használó alkalmazások elvárják, hogy a tulajdonságok egy bizonyos típusúak legyenek, és a kívánt értékeket a terminfo adatbázisból olyan könyvtárhívások segítségével kapják meg, amelyek csak akkor adnak vissza értéket, ha a várt típus megegyezik az adatbázisban találhatóval.
A termcaphez hasonlóan néhány karakterlánc karakterisztikája escape szekvencia , amelyet a billentyűzet speciális billentyűinek megnyomásával lehet elküldeni a gazdagépnek. A többi tulajdonság az alkalmazásból a terminálra küldhető karakterláncok. Az utóbbi esetben a terminfo könyvtár (mint a termcap) arra szolgál, hogy az alkalmazás paramétereit behelyettesítse az elküldött karakterláncba. Ezek a függvények egy verem alapú kifejezéselemzőt biztosítanak, amelyet eredetileg a kimeneti karakterlánc hosszának minimalizálására használtak, és amely különféle opcionális paramétereket (például színkilépési szekvenciákat) tartalmazhat. Ezzel szemben a termcap könyvtár minimális hasznos műveletsort biztosít, amely kompatibilis a legtöbb terminállal.
A terminfoleírások két definíció egyesítésével, tulajdonságok hozzáadásával, eltávolításával vagy újradefiniálásával állnak össze. Az adattárolási modelltől függetlenül a terminfo könyvtár külső eszköz (például tic ) által összeállított adatok felhasználásával adja vissza a kért leírást.
A terminfo adatok bináris fájlként vannak tárolva , ami megnehezíti a szerkesztését, mint a termcap . A tulajdonságok külön táblázatokban vannak tárolva a logikai, numerikus és karakterlánc-értékekhez. Ezt a sémát Mark Horton fejlesztette ki, és a rendelkezésre álló nevek készletében lévő néhány eltéréstől eltekintve a terminfo legtöbb megvalósításában használatos. [5] Az X/Open specifikáció nem határozza meg a lefordított terminálleírás formátumát, és még csak nem is említi a tic vagy infocmp segédprogramokat . [6] [7] Mivel a lefordított terminfo leírások nem tartalmaznak metaadatokat , amelyek meghatároznák, hogy egy adott tulajdonság melyik index alá tartozik, nem feltétlenül kompatibilisek az implementációk között. Mivel azonban a legtöbb megvalósítás ugyanazt az általános táblaszerkezetet használja (beleértve a fejléc- és adatmezőméreteket), lehetőség van automatikusan egyedi terminfo-könyvtárak létrehozására, amelyek képesek a megvalósítás-specifikus adatokat olvasni. Például az ncurses kompatibilis a terminfo számos különböző megvalósításának adattárolási formátumával. [nyolc]
A terminfo könyvtár eredeti (és legelterjedtebb) megvalósítása fastruktúrából olvas adatokat . A terminfo-ban a terminálleírás nevének első karaktere az elérési út összetevője, a teljes képzésű név pedig a fájlnév. Ez segít gyorsabban keresni a megfelelő leírást, mint a termcapben.
Egyes terminfo-megvalósítások a terminálleírásokat kivonatolt adatbázisban tárolják (például a Berkeley DB 1.85-ös verziója). [9] [10] Kétféle rekordot tárolnak: az álneveket, amelyek a kanonikus rekord elérési útjára mutatnak, és a tulajdonképpeni kanonikus rekordokat, amelyek a tulajdonságok teljes készletét tartalmazzák.
Az Open Group terminfo korlátokat (minimum garantált értékeket) állít be, amelyek csak a forrásfájlra vonatkoznak. [11] [12] E korlátozások közül kettő különösen érdekes:
A 14 karakteres korlát a nagyon régi fájlrendszerekkel való kompatibilitásra vonatkozik, amelyek nem képesek hosszabb fájlneveket megjeleníteni. Míg az ilyen fájlrendszerek általában elavultak, magukat a korlátokat az 1980-as évek végén dokumentálták, és még nem vizsgálták felül.
A felső numerikus határ 32767 a maximális pozitív előjelű 16 bites érték. A terminfo bejegyzés tartalmazhat negatív számokat a hiányzó vagy hiányzó értékek jelzésére.
A termcap -től eltérően a terminfo nyers és lefordított ábrázolással rendelkezik. A lefordított nézetre vonatkozó megkötéseket a specifikáció nem tartalmazza. A legtöbb megvalósítás azonban a tic -re (terminálinformációs fordító) hivatkozik, amelynek lefordított leírása nem haladhatja meg a 4096 bájtot.