Infos Terme - Terminfo

Termapi.svg

Terminfo est une bibliothèque et une base de données qui permettent aux programmes d'utiliser des terminaux d' affichage de manière indépendante du périphérique. Mary Ann Horton (créditée sous le nom de Mark Horton) a mis en œuvre la première bibliothèque terminfo en 1981-1982 comme une amélioration par rapport à termcap . Les améliorations comprennent

  • accès plus rapide aux descriptions de terminaux stockées,
  • des noms plus longs et plus compréhensibles pour les capacités du terminal et
  • évaluation d'expression générale pour les chaînes envoyées au terminal.

Terminfo a été inclus avec UNIX System V Release 2 et est rapidement devenu la forme préférée de descriptions de terminaux dans System V, plutôt que termcap (que BSD a continué à utiliser). Cela a été imité dans pcurses en 1982-1984 par Pavel Curtis et était disponible sur d'autres implémentations UNIX , adaptant ou incorporant des correctifs de Mark Horton. Pour plus d'informations, reportez-vous à la publication sur le groupe de discussion comp.sources.unix de décembre 1986.

Une base de données terminfo peut décrire les capacités de centaines de terminaux d'affichage différents. Cela permet aux programmes externes d'avoir une sortie d' affichage basée sur des caractères, indépendamment du type de terminal.

Certaines configurations sont :

  • Nombre de lignes à l'écran
  • Mode mono ; supprimer la couleur
  • Utiliser une cloche visible au lieu d'un bip

Modèle de données

Les bases de données Terminfo se composent d'une ou plusieurs descriptions de terminaux.

Indices

Chaque description doit contenir le nom canonique du terminal. Il peut également contenir un ou plusieurs alias pour le nom du terminal. Le nom canonique ou les alias sont les clés par lesquelles la bibliothèque recherche la base de données terminfo.

Valeurs de données

La description contient une ou plusieurs capacités, qui ont des noms conventionnels. Les capacités sont typées : boolean , numeric et string . La bibliothèque terminfo a des types prédéterminés pour chaque nom de capacité. Il vérifie les types de chaque capacité par la syntaxe :

  • les capacités de chaîne ont un "=" entre le nom de la capacité et sa valeur,
  • les capacités numériques ont un "#" entre le nom de la capacité et sa valeur, et
  • les capacités booléennes n'ont pas de valeur associée (elles sont toujours vraies si elles sont spécifiées).

Les applications qui utilisent terminfo connaissent les types des capacités respectives et obtiennent les valeurs des capacités de la base de données terminfo à l'aide d'appels de bibliothèque qui ne sont renvoyés avec succès que lorsque le nom de capacité correspond à l'une des capacités typées prédéfinies.

Comme termcap , certaines des capacités de chaîne représentent des séquences d'échappement qui peuvent être envoyées à l'hôte en appuyant sur des touches spéciales du clavier. D'autres capacités représentent des chaînes qui peuvent être envoyées par une application au terminal. Dans ce dernier cas, la bibliothèque terminfo fonctionne (comme une bibliothèque termcap) pour substituer des paramètres d' application dans la chaîne qui est envoyée. Ces fonctions fournissent un analyseur d'expression basé sur la pile , qui est principalement utilisé pour aider à minimiser le nombre de caractères envoyés pour les séquences de contrôle qui ont des paramètres facultatifs tels que SGR (Select Graphic Rendition) . En revanche, les bibliothèques termcap fournissent un ensemble limité d'opérations qui sont utiles pour la plupart des terminaux.

Hiérarchie

Les descriptions Terminfo peuvent être construites en incluant le contenu d'une description dans une autre, en supprimant des capacités de la description incluse ou en remplaçant ou en ajoutant des capacités. Quel que soit le modèle de stockage utilisé, la bibliothèque terminfo renvoie la description du terminal à partir de la description demandée, en utilisant des données qui sont compilées à l'aide d'un outil autonome (par exemple, tic ).

Modèle de stockage

Les données Terminfo sont stockées sous forme de fichier binaire , ce qui les rend moins simples à modifier que termcap . Les données peuvent être récupérées par la bibliothèque terminfo à partir des fichiers où elles sont stockées. Les données elles-mêmes sont organisées sous forme de tableaux pour les capacités booléennes, numériques et de chaîne, respectivement. C'est le schéma conçu par Mark Horton, et à l'exception de quelques différences concernant les noms disponibles, il est utilisé dans la plupart des implémentations terminfo. X/Open ne spécifie pas le format de la description de terminal compilée. En fait, il ne mentionne même pas les utilitaires courants tic ou infocmp . Étant donné que les entrées terminfo compilées ne contiennent pas de métadonnées identifiant les indices dans les tables auxquelles chaque capacité est attribuée, elles ne sont pas nécessairement compatibles entre les implémentations. Cependant, étant donné que la plupart des implémentations utilisent la même structure de table globale (y compris les tailles d'en- tête et d'éléments de données), il est possible de construire automatiquement des bibliothèques terminfo personnalisées qui peuvent lire les données pour une implémentation donnée. Par exemple, ncurses peut être construit pour correspondre aux données terminfo de plusieurs autres implémentations.

Arborescence des répertoires

L'implémentation originale (et la plus courante) de la bibliothèque terminfo récupère les données d'une hiérarchie de répertoires . En utilisant le premier caractère du nom de la description du terminal comme composant du chemin d'accès et le nom de la description du terminal comme nom du fichier à récupérer, la bibliothèque terminfo surpasse généralement la recherche d'un gros fichier termcap.

Base de données hachée

Certaines implémentations de terminfo stockent la description du terminal dans une base de données hachée (par exemple, quelque chose comme Berkeley DB version 1.85). Ceux-ci stockent deux types d'enregistrements : les alias qui pointent vers l'entrée canonique et l'entrée canonique elle-même, qui contient les données pour les capacités du terminal.

Limitations et extensions

L'Open Group documente les limites de terminfo (valeurs minimales garanties), qui s'appliquent uniquement au fichier source. Deux d'entre eux présentent un intérêt particulier :

  • 14 caractères maximum pour les alias de terminaux
  • 32 767 maximum pour les quantités numériques

La limite de 14 caractères concerne les systèmes de fichiers très anciens qui pourraient représenter des noms de fichiers pas plus longs. Bien que ces systèmes de fichiers soient généralement obsolètes, ces limites étaient telles que documentées à partir de la fin des années 1980 et n'ont pas été révisées depuis lors.

La limite de 32 767 est pour les valeurs positives dans une valeur de 16 bits en complément à deux signé . Une entrée terminfo peut utiliser des nombres négatifs pour représenter des valeurs annulées ou absentes.

Contrairement à termcap , terminfo a à la fois une représentation source et compilée. Les limites de la représentation compilée ne sont pas spécifiées. Cependant, la plupart des implémentations notent dans leur documentation pour tic (compilateur d'informations terminales) que les entrées compilées ne peuvent pas dépasser la taille de 4 096 octets.

Voir également

Les références

Liens externes