table of contents
| term(5) | Formate de fișiere | term(5) |
NUME¶
term - descrierea terminalului compilată terminfo
DESCRIERE¶
tic(1) compilează o descriere de tip terminal terminfo, iar setupterm(3NCURSES) o citește. O descriere compilată poate fi stocată într-un fișier sau într-o bază de date care poate conține numeroase astfel de descrieri. În plus, o descriere compilată poate fi într-unul dintre cele două formate: unul similar cu cel utilizat de System V și un format mai nou, extensibil, utilizat exclusiv de ncurses.
Locația de stocare¶
Descrierile terminfo compilate sunt plasate în directorul /usr/share/terminfo. La compilarea bibliotecilor ncurses se selectează una dintre cele două configurații.
- directory tree
- Se utilizează o schemă pe două niveluri pentru a evita căutarea liniară într-un director de sistem Unix de mari dimensiuni: /usr/share/terminfo/c/nume, unde nume este numele terminalului, iar c este primul caracter al lui nume. Astfel, descrierea compilată a tipului de terminal „act4” se găsește în fișierul /usr/share/terminfo/a/act4. Sinonimele pentru același terminal sunt implementate prin legături multiple către același fișier compilat.
- hashed database
- Folosind API-ul bazei de date Berkeley, sunt stocate două tipuri de înregistrări: datele terminfo în același format cu cel stocat într-o structură arborescentă de directoare, având ca cheie numele tipului principal al terminalului, precum și înregistrări care conțin doar alias care fac trimitere la numele principal.
- Deși este conceput pentru a scrie în baze de date cu structură hash, ncurses poate totuși citi baze de date terminfo organizate sub forma unui arbore de directoare, dar nu poate scrie intrări în acest arbore. Poate scrie (sau rescrie) intrări în baza de date cu structură hash.
- ncurses face distincția între cele două cazuri din variabilele de mediu TERMINFO și TERMINFO_DIRS, presupunând existența unui arbore de directoare pentru intrările care corespund unui director existent și, în caz contrar, a unei baze de date cu tabele hash.
Formatul de stocare vechi¶
Formatul a fost ales astfel încât să fie identic pe toate dispozitivele. Se presupune că un octet are o lățime de cel puțin opt biți, dar nu se fac presupuneri cu privire la ordinea biților sau la extinderea semnului.
Fișierul este împărțit în șase părți:
- (a)
- antet,
- (b)
- numele terminalelor,
- (c)
- fanioane booleene,
- (d)
- numere,
- (e)
- șiruri, și
- (f)
- un tabel de șiruri.
Secțiunea antet începe fișierul. Această secțiune conține șase numere întregi scurte în formatul descris mai jos. Aceste numere întregi sunt
- (1) numărul magic
- (octal 0432);
- (2) dimensiunea,
- în octeți, a secțiunii numele terminalelor;
- (3) numărul de octeți din secțiunea fanioane booleene;
- (4) numărul de numere întregi scurte din secțiunea numere;
- (5) numărul de decalaje(poziții)
- (numere întregi scurte) din secțiunea șiruri;
- (6) dimensinea,
- în octeți, a tabelului de șiruri.
Funcționalitățile din secțiunile fanioane booleene, numere și șiruri sunt prezentate în aceeași ordine ca în fișierul de antet term.h.
Numerele întregi scurte au semn, se încadrează în intervalul de la -32768 la 32767 și sunt stocate în format little-endian.
Numerele dintr-o descriere de terminal, indiferent dacă sunt intrări în tabelul numere sau șiruri, sunt numere întregi pozitive. Fanioanele booleene sunt tratate ca numere întregi pozitive de un octet. În fiecare caz, aceste numere întregi pozitive reprezintă o capacitate a terminalului. Compilatorul de terminale tic utilizează numere întregi negative pentru a gestiona situațiile în care o capacitate nu este disponibilă:
- •
- Dacă o capacitate este absentă din acest terminal, tic stochează valoarea -1 în tabelul corespunzător.
- Valoarea numărului întreg -1 este reprezentată de doi
octeți: 0377, 0377.
Valorile booleene absente sunt reprezentate de octetul 0 (fals).
- •
- Dacă o capacitate a fost anulată din acest terminal, tic stochează valoarea -2 în tabelul corespunzător.
- Valoarea numărului întreg -2 este reprezentată de doi
octeți: 0377, 0376.
Valoarea booleană -2 este reprezentată de octetul 0376.
- •
- Alte valori negative nu sunt permise.
Secțiunea numele terminalelor urmează după antet. Aceasta conține prima linie a descrierii terminfo, enumerând diversele denumiri ale terminalului, separate prin caracterul „|”. Secțiunea numele terminalelor se încheie cu un caracter ASCII NUL.
Secțiunea fanioane booleene are un octet pentru fiecare fanion. Valorile booleene sunt fie 1, fie 0 (adevărat sau fals), în funcție de faptul dacă terminalul acceptă sau nu capacitatea dată.
Între secțiunea fanioane booleene și secțiunea numere se va insera un octet nul, dacă este necesar, pentru a se asigura că secțiunea numere începe cu un octet par. Aceasta este o rămășiță a arhitecturii cu adresare pe cuvinte a PDP-11, concepută inițial pentru a evita erorile provocate de adresarea unui cuvânt la o graniță de octet impar. Toate numerele întregi de tip short sunt aliniate la o graniță de cuvânt de tip short.
Secțiunea numere este similară cu secțiunea fanioane booleene . Fiecare capacitate ocupă doi octeți și este stocată sub forma unui număr întreg scurt în format little-endian.
Secțiunea șiruri este, de asemenea, similară. Fiecare capacitate este stocată sub forma unui număr întreg scurt. Valoarea capacității reprezintă un index în tabelul de șiruri.
tabelul de șiruri este ultima secțiune. Aceasta conține toate valorile capacităților șirurilor menționate în secțiunea șiruri. Fiecare șir este terminat cu caracterul nul. Caracterele speciale din notația ^X sau \c sunt stocate în forma lor interpretată, nu în reprezentarea de afișare. Informațiile de completare $<nn> și informațiile despre parametri %x sunt stocate intacte, în formă neinterpretată.
Formatul de stocare extins¶
Secțiunea anterioară descrie formatul binar convențional terminfo. Cu câteva variații minore ale pozițiilor de alocare (vezi PORTABILITATE), același format binar este utilizat în toate sistemele Unix moderne. Fiecare sistem utilizează un set standard de tipuri de date booleene, numerice sau de tip șir de caractere.
Bibliotecile și aplicațiile ncurses acceptă formatul binar extins terminfo, permițând utilizatorilor să definească capacități care sunt încărcate în timpul rulării. Această extensie este posibilă datorită faptului că celelalte implementări încetează să mai citească datele terminfo atunci când ajung la capătul dimensiunii specificate în antet. ncurses verifică dimensiunea și, dacă aceasta depășește cea specificată în antet, continuă să analizeze conform propriei sale scheme.
Mai întâi, citește antetul extins (5 numere întregi scurte):
- (1)
- numărul de capacități booleene extinse
- (2)
- numărul de capacități numerice extinse
- (3)
- numărul de capacități de șiruri extinse
- (4)
- numărul de elemente din tabelul de șiruri extins
- (5)
- dimensiunea tabelului de șiruri extins, exprimată în octeți
Valorile de numărare și dimensiune pentru tabelul extins de șiruri includ atât capacitatea extinsă nume, cât și capacitatea extinsă valoare.
Pe baza numerelor și dimensiunilor, ncurses alocă tabele și citește datele pentru capacitățile extinse în aceeași ordine ca și informațiile din antet.
Tabelul de șiruri extins conține valori pentru capacitățile șirurilor. După aceste valori, tabelul conține, în ordine, denumirile fiecărei capacități extinse: booleană, numerică și de șir.
Prin stocarea descrierilor terminalelor în acest mod, ncurses poate oferi o bază de date utilă pentru aplicațiile vechi, precum și date pentru aplicațiile care necesită mai multe informații despre un tip de terminal decât se anticipase în X/Open Curses. Consultați user_caps(5) pentru o prezentare generală a modului în care ncurses utilizează aceste informații extinse.
Aplicațiile care manipulează date de terminal pot utiliza definițiile descrise în term_variables(3NCURSES)), asociind numele lungi ale capacităților cu elementele structurii TERMTYPE.
Formatul extins pentru numere¶
Uneori, numerele întregi cu semn de 16 biți nu sunt suficient de mari. ncurses 6.1 a introdus un nou format prin efectuarea unor modificări în formatul vechi:
- un număr magic diferit (octal 01036)
- schimbarea tipului pentru tabelul de numere de la întregi pe 16 biți cu semn la întregi pe 32 de biți cu semn.
Pentru a asigura compatibilitatea, biblioteca pune la dispoziția utilizatorilor direcți ai structurii TERMTYPE aceleași structuri de date ca și în formatele anterioare. Cu toate acestea, aceasta nu poate furniza apelanților numerele extinse. Biblioteca utilizează o structură de date similară, dar ascunsă, TERMTYPE2, pentru a furniza date funcțiilor terminfo.
FIȘIERE¶
- /usr/share/terminfo
- baza de date cu descrierea terminalului compilat
PORTABILITATE¶
setupterm¶
Rețineți că este posibil ca setupterm să aștepte un set de capacități diferit de cel prezent efectiv în fișier. Fie baza de date a fost actualizată de la recompilarea lui setupterm (ceea ce duce la apariția unor intrări suplimentare nerecunoscute în fișier), fie programul a fost recompilat mai recent decât a fost actualizată baza de date (ceea ce duce la lipsa unor intrări). Rutina setupterm trebuie să fie pregătită pentru ambele posibilități - de aceea sunt incluse numerele și dimensiunile. De asemenea, noile capacități trebuie adăugate întotdeauna la sfârșitul listelor de capacități booleene, numerice și de tip șir.
Formatul binar¶
X/Open Curses nu specifică un format pentru baza de date terminfo. System V curses folosea o structură ierarhică de fișiere binare, câte unul pentru fiecare descriere de terminal.
În ciuda utilizării consecvente a numerelor în format little-endian și a formatului altfel intuitiv, nu este recomandabil să te bazezi pe portabilitatea intrărilor binare terminfo între versiunile comerciale de Unix. Problema este că există cel puțin trei versiuni de terminfo (sub HP-UX, AIX și OSF/1), fiecare dintre ele divergând de System V terminfo după SVr1 și adăugând capacități de extensie la tabelul de șiruri care (în format binar) intră în conflict cu extensiile System V și X/Open Curses. Consultați terminfo(5) pentru o discuție detaliată a problemelor de compatibilitate a sursei terminfo.
Această implementare este, în mod implicit, compatibilă cu formatul binar terminfo utilizat de Solaris curses, cu excepția câtorva detalii mai puțin utilizate în care s-a constatat că acesta din urmă nu corespundea cu X/Open Curses. Formatul utilizat de celelalte versiuni Unix poate fi adaptat prin compilarea ncurses cu diferite opțiuni de configurare.
Coduri magice¶
Numărul magic dintr-un fișier binar terminfo este reprezentat de primii 16 biți (doi octeți). Pe lângă faptul că sporește fiabilitatea verificării de către bibliotecă a faptului că un fișier este de tip terminfo, instrumente precum file(1) îl utilizează și pentru a identifica formatul fișierului. System V a definit mai multe numere magice, cu 0433, 0435 ca capturi de ecran (vezi scr_dump(5)). Această implementare folosește 01036 ca o continuare a acelei secvențe, dar cu un octet de ordin superior diferit pentru a evita confuzia.
Structura TERMTYPE¶
Pentru aplicațiile vechi se oferă acces direct la structura TERMTYPE. Aplicațiile portabile ar trebui să utilizeze tigetflag(3NCURSES) și funcțiile conexe pentru a citi capacitățile terminalului.
Nume de terminale cu majuscule și minuscule amestecate¶
Un număr redus de descrieri ale terminalelor utilizează caractere majuscule în denumirile lor. Dacă sistemul de fișiere subiacent nu face diferența între majuscule și minuscule, ncurses reprezintă „primul caracter” al denumirii terminalului utilizat ca nivel intermediar al unui arbore de directoare în format hexazecimal (cu două caractere)
Limite¶
ncurses stochează descrierile terminalelor compilate în trei formate conexe, descrise în subsecțiunile
- Formatul de stocare vechi,
- Formatul de stocare extins și
- Formatul extins pentru numere.
Formatul de stocare vechi și formatul numeric extins se deosebesc prin tipurile de valori numerice pe care le pot stoca (de exemplu, numere întregi pe 16 biți față de cele pe 32 de biți). Formatul de stocare extins introdus de ncurses 5.0 adaugă date la oricare dintre aceste formate.
Există câteva restricții:
- numărul total de intrări compilate nu poate depăși 4096 de octeți în formatul vechi.
- numărul total de intrări compilate nu poate depăși 32768 de octeți în formatul extins.
- câmpul „nume” nu poate depăși 128 de octeți.
Intrările compilate sunt limitate la 32768 de octeți, deoarece decalajele din tabelul de șiruri utilizează numere întregi de doi octeți. Formatul vechi ar fi putut admite intrări de 32768 de octeți, dar era limitat la cei 4096 de octeți ai unei pagini de memorie virtuală.
EXEMPLE¶
Iată o scurtă descriere a modelului Lear-Siegler ADM-3, un terminal vechi, popular, deși destul de rudimentar.
adm3a|lsi adm3a,
am,
cols#80, lines#24,
bel=^G, clear=\032$<1>, cr=^M, cub1=^H, cud1=^J,
cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K,
home=^^, ind=^J,
Urmează o captură hexazecimală a descrierii sale de terminal compilate (în formatul vechi).
| 0000 1a 01 10 00 02 00 03 00 82 00 31 00 61 64 6d 33 ........ ..1.adm3 |
| 0010 61 7c 6c 73 69 20 61 64 6d 33 61 00 00 01 50 00 a|lsi ad m3a...P. |
| 0020 ff ff 18 00 ff ff 00 00 02 00 ff ff ff ff 04 00 ........ ........ |
| 0030 ff ff ff ff ff ff ff ff 0a 00 25 00 27 00 ff ff ........ ..%.'... |
| 0040 29 00 ff ff ff ff 2b 00 ff ff 2d 00 ff ff ff ff ).....+. ..-..... |
| 0050 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ |
| 0060 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ |
| 0070 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ |
| 0080 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ |
| 0090 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ |
| 00a0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ |
| 00b0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ |
| 00c0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ |
| 00d0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ |
| 00e0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ |
| 00f0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ |
| 0100 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ |
| 0110 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ........ ........ |
| 0120 ff ff ff ff ff ff 2f 00 07 00 0d 00 1a 24 3c 31 ....../. .....$<1 |
| 0130 3e 00 1b 3d 25 70 31 25 7b 33 32 7d 25 2b 25 63 >..=%p1% {32}%+%c |
| 0140 25 70 32 25 7b 33 32 7d 25 2b 25 63 00 0a 00 1e %p2%{32} %+%c.... |
| 0150 00 08 00 0c 00 0b 00 0a 00 ........ . |
AUTORI¶
Thomas E. Dickey
formatul extins terminfo pentru ncurses 5.0
suport pentru baze de date cu tabele hash pentru ncurses 5.6
suport pentru numere extinse pentru ncurses 6.1
Eric S. Raymond
formatul vechi documentat terminfo (cel utilizat de
pcurses).
CONSULTAȚI ȘI¶
ncurses(3NCURSES), terminfo(3NCURSES), terminfo(5), user_caps(5)
TRADUCERE¶
Traducerea în limba română a acestui manual a fost făcută de Remus-Gabriel Chelu <remusgabriel.chelu@disroot.org>
Această traducere este documentație gratuită; citiți Licența publică generală GNU Versiunea 3 sau o versiune ulterioară cu privire la condiții privind drepturile de autor. NU se asumă NICIO RESPONSABILITATE.
Dacă găsiți erori în traducerea acestui manual, vă rugăm să trimiteți un e-mail la translation-team-ro@lists.sourceforge.net.
| 16 august 2025 | ncurses 6.6 |