# Termcap

Termcap (terminal capability) est à la fois une bibliothèque logicielle et une base de données destinée aux systèmes d'exploitation de type Unix qui permet aux programmes d'afficher leurs résultats en mode texte sur toutes sortes d'écrans de terminaux semi-graphiques au moyen de commandes universelles. Elle simplifie énormément le processus de portage de ces programmes sur différentes plates-formes. La première version de termcap a été écrite par Bill Joy en 1978$^,$ pour le système d'exploitation Unix Berkeley ; il a depuis été porté sur la plupart des environnements Unix et assimilés. Joy aurait été inspiré en cela par l'architecture mémoire de l'Incompatible Timesharing System.
Termcap a été supplantée par la commande terminfo, adoptée par l'Open Group en 1996 pour la norme POSIX. Elle est maintenue dans Linux pour des raisons de portabilité d'anciens programmes : les éditeurs de texte plein-écran comme vi ou emacs utilisent termcap.
Une base de données de termcap contient les fonctionnalités d'affichage graphique de centaines de terminaux semi-graphiques. Grâce à ces données, les programmes peuvent afficher des résultats ou des messages en mode texte plein-écran indépendamment du type du terminal.
Parmi les caractéristiques d'affichage de terminal stockées dans la base de données, on trouve notamment:
* le nombre de colonnes de l'écran
* quel caractère de contrôle (ou séquence de caractères ASCII) permet de placer le curseur en un point donné de l'écran (et comment le n° de ligne et le n° de colonne doivent être encodés pour cela) ;
* comment faire défiler l'écran d'une ou plusieurs lignes à la fois ;
* combien de tabulations sont nécessaires pour cette opération de défilement.

## Le modèle descriptif des caractéristiques d'écran

La base de données de Termcap contient les caractéristiques d'affichage d'un ou plusieurs terminaux.

### Clefs de recherche

Chaque ligne de la base doit comporter le nom de référence d'un terminal (avec éventuellement quelques synonymes). Ces noms sont les clefs de recherche utilisés par le moteur termcap.

### Valeurs caractéristiques

Chaque entrée de la base comporte une liste d'actions graphiques possibles, désignées par des codes génériques. Elles sont typées en booléen, numérique et chaîne de caractères, mais le typage d'une caractéristique n'est pas prédéterminé.
* Les caractéristiques de type chaîne de caractères sont décrites par un signe "=" séparant le nom et la valeur,
* les caractéristiques de type numérique, par un "#" suivi d'un nombre entier et
* les caractéristiques de type booléennes sont simplement nommées lorsqu'elles existent.
En effet, les programmes semi-graphiques utilisant termcap recherchent les caractéristiques d'affichage disponibles selon l'un de ces trois types exclusivement.

### Hiérarchisation

On peut décrire certaines caractéristiques de terminal en renvoyant à celles d'un terminal déjà décrit, lorsque celles-ci sont, même partiellement, identiques. L'API termcap reconstruit lui-même la description du terminal demandé, supprimant ou corrigeant lui-même les caractéristiques au cours de l'exécution.

## Structure du fichier des caractéristiques graphiques

Les caractéristiques sont stockées dans un simple fichier texte, ce qui permet de les modifier facilement. On peut retrouver ce fichier grâce aux variables environnement du système d'exploitation.

### Variables d'environnement de termcap

La variable d'environnement TERM contient le nom du type de terminal sur lequel la session Linux est active.
La variable d'environnement TERMCAP contient la ligne active puisée dans la base de données utilisée par TERMCAP. Elle ne contient le plus souvent que les caractéristiques d'un seul terminal, choisies par l’émulateur de terminal pour permettre au shell et aux commandes LINUX d'afficher la sortie standard.
La variable d'environnementTERMPATH a été introduite sur les OS Linux pour definir l'arborescence de recherche des fichiers de travail de termcap.

### Fichier plat

Sous sa forme originale (encore aujourd'hui la plus courante) la bibliothèque termcap lit les caractéristiques graphiques dans un fichier au format texte (« fichier plat ») ; lorsqu'il y a un grand nombre de terminaux stockés (plus de 0,5 Mo), cela peut ralentir l'affichage ; aussi, pour améliorer les performances, on a recours à des utilitaires comme reorder, qui place en début de fichier les types de terminaux les plus courants.

### Intégration d'une table de hachage à la base de données descriptive

Les implémentations type BSD-4.4 de termcap accèdent aux caractéristiques des terminaux grâce à une table de hachage (par ex., celle de Berkeley DB version 1.85). La base de données contient pour cela deux types d'enregistrements : l'adresse des types de terminaux, et pour chaque adresse, la liste des caractéristiques d'affichage. Les données sont stockées de façon formatée.