Mais, les choses ne sont pas aussi simples lorsque l'on veut mettre en oeuvre les bases données existant. Il n'est pas rare que certaines capacités ne soient pas définies dans la base de données du terminal que vous utilisez ou que votre système émule.
La première solution qui vient à l'esprit est tout simplement de réécrire un
fichier source et de le faire compiler par le programme tic
. Pour
cela, partez d'un fichier existant pour la famille du terminal que vous
utilisez et ajoutez-y les capacités manquantes qui vous semblent importantes,
en les retrouvant dans d'autres bases de données dans lesquelles elles sont
présentes.
Ainsi vous avez pu constater, dans les chapitres précédents que les capacités
de gestion de la visibilté du curseur, étaient absentes de la bases de données
du terminal xterm
. Reprenez le fichier source terminfo
,
recopiez la base de données de xterm
, renommez la monxterm
,
ajoutez les capacités civis
,cnorm
,cvvis
, telles que
vous pouvez les trouver dans la base de données du terminal linux
.
Recompilez le fichier source à l'aide du programme tic
.
Vous trouverez dans le manuel d'aide de votre distribution tous les
renseignements nécessaires pour mettre en oeuvre cette compilation à l'aide du
programme tic
. Entrez la commande :
man tic
ncurses
?
Certains penseront qu'il serait plus simple d'utiliser les fonctions
disponibles dans la bibliothèque ncurses
. Il existe certes une
fonction de la bibliothèque ncurses. Il existe bien entendu une fonction,
curs_set
qui gère la visibilité du curseur. Mais cette fonction teste
les capacités du terminal utilisé et ne fonctionne pas si la capacité civis
n'est pas définies pour le terminal utilisé. Donc,... retour à la
case départ.
Encore un qui réinvente la roue ! penseront certains. Peut-être. Mais c'est une
question qui revient souvent chez certains jeunes programmeurs qui ont commencé
avec des outils sous DOS, dont le portage des outils GNU. On y trouve des
fonctions rassemblées dans le fichier d'en-tête conio.h
qui efface
l'écran ou rendent le curseur invisible etc...
On pourra ainsi, sans problème récupérer un ensemble de valeurs de capacités à l'aide des fonctions de lecture que nous avons vues précédemment. L'on pourra alors définir une liste de valeurs de capacités. Nous pourrons créer,par exemple les constantes suivantes :
const char * sansCurseur = "\033[?25l\E[?1c";
const char * deplace Curseur = "\033[%i%p1%d;%p2%dH";
const char * effaceEcran="\033[H\E[2J";
Il suffit ensuite de faire produire la séquence de code d'échappement par la
fonction tparm