Page suivante Page précédente Table des matières

3. Première approche des capacités d'un terminal

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.

3.1 Définir le terminal actif : la fonction 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);

3.2 Le manuel d'aide

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.

3.3 Fonctionnement de 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 :

Si errret vaut NULL, 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.

3.4 Mise en oeuvre de la fonction 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 :

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.


Page suivante Page précédente Table des matières