Peut-être est-il bon de rappeler que vous pouvez connaître le terminal utilisé
par votre système en affichant la valeur de la variable d'environnement TERM
. Pour cela, sous le shell validez la commande :
echo $TERM
Sous un système Linux en mode console vous obtiendrez sans doute la réponse
linux
, en mode graphique sous X Window, la réponse xterm
.
setupterm
La première idée qui vient à l'esprit quand on veut se familiariser avec la gestion des terminaux, c'est d'avoir la possibilité de décider du terminal actif, et de savoir s'il existe une base de données terminfo décrivant les capacités de tel terminal. Pour cela il existe une fonction dont le prototype est le suivant :
int setupterm(const char * term, int fildes, int errret);
Fin connaisseur de votre système, vous vous précipitez sur les pages du manuel d'aide, pour connaître le cahier des charges de cette fonction en tapant :
man setupterm
... et vous obtenez la réponse décevante suivante :
No manual entry for setupterm
En effet, cette fonction est incluse dans la bibliothèque ncurses et vous
devrez procéder en deux temps pour accéder au manuel d'aide de la fonction
setupterm. D'abord invoquer l'aide général de ncurses :
man ncurses
Ensuite, repérer dans cette aide la fonction setupterm et le sous-ensemble
dans lequel elle est située. Il s'agit de curs_terminfo. Donc en utilisant
la commande
man curs_terminfo,
vous obtiendrez les renseignements voulus sur la fonction setupterm.
setupterm
Je me contenterai de fournir une traduction du passage de la page du manuel qui
décrit la fonction setupterm
.
int setupterm(const char * term, int fildes, int errret);
La fonction setupterm
lit dans la base de données terminfo
,
les structures terminfo
sont ainsi initialisées...Le type de terminal
est la chaîne de caractères term ; si term vaut NULL, la
variable d'environnement TERM
est utilisée.Toutes les sorties sont
envoyées sur le descripteur de fichier fildes qui doit être initialisé
en écriture. Si errret ne vaut pas NULL, la fonction setupterm
renvoie OK
ou ERR
et charge la valeur du statut
d'erreur dans l'entier pointé par errret. Les valeurs possibles de
errret sont :
terminfo
n'a pas été trouvée.setupterm
affiche un message d'erreur
correspondant à l'erreur décelée et interrompt le programme.Ainsi l'appel le
plus simple est :
setupterm((char *)0,1,(int *)0);
qui utilise toutes les valeurs par défaut et envoie les sorties sur stdout
.
setupterm
Vous pourriez tester et mettre en oeuvre un programme qui ressemblerait à celui-ci :
#include <stdio.h>#include <term.h>
#include <ncurses.h>
int main(int argc, char * argv[])
{
int r;
int erreur;
if (argc>2)
r=setupterm(NULL, fileno(stdout),&erreur);
else
r=setupterm(argv[1], fileno(stdout),&erreur);
if (r==OK)
printf("Traitement correct\n");
else
switch(erreur){
case 0 :
printf("Le terminal %s est inconnu.\n",argv[1]);
break;
case -1 :
printf("Aucune base de données pour le terminal %s.\n",argv[1]);
break;
}
return 0;
}
J'espère ne vexer personne par l'édition d'un programme aussi trivial. Il n'est là que pour rappeler :
gcc prog.c -o prog -lncurses
Cette dernière ligne n'a pas d'autres ambitions que de permettre à l'éditeur de
liens de retrouver la bibliothèque ncurses
dont il a besoin pour le
code de certaines fonctions : d'où -lncurses
.