Ce week-end, je me suis mis en tête de programmer minicurses, une bibliothèque à la ncurses(3) qui serait parfaitement adapté au Minitel.
On pourrait évidemment se demander pourquoi vouloir réinventer la roue, mais en lisant le man de terminfo(5), je me suis rendu compte que certains attributs, comme par exemple la double hauteur ou la double taille, ne sont pas pris en charge par terminfo et donc par ncurses. C'est pourquoi j'ai décidé de faire ma propre bibliothèque. C'est aussi un bel exercice intellectuel qui amène à réfléchir, notamment sur l'algorithme de la fonction refresh(3).
Le but de cette bibliothèque est d'avoir le plus souvent possible le même manuel que ncurses, sauf que j'ajouterai certaines fonctions pour gérer certains attributs gérés par le Minitel. Je cherche aussi le juste milieu entre des algorithmes simples et des optimisations féroces. Le fait que minicurses soit indépendant de terminfo en fait une bibliothèque plutôt légère, même si elle est plutôt destinée à être utilisée sur une plate-forme UNIX.
Téléchargements
Pour le moment, la bibliothèque en est à sa version 0.2. Les téléchargements sont par ici :
ou, pour ceux qui souhaitent récupérer la toute dernière version de développement :
% hg clone https://bitbucket.org/xtab/minicurses
Exemples
Une fois minicurses installé avec make install
, et si vous voulez regarder
un peu les exemples, tapez :
% cd minicurses/examples
% make
% LD_LIBRARY_PATH="/usr/local/lib" ./test1 > /dev/ttyS0
où /dev/ttyS0
est à remplacer avec le bon port série. Il se peut que vous ayiez
besoin de changer les paramètres du port série, auquel cas vous devrez taper cette
longue commande pour que ça marche :
% stty -F /dev/ttyS0 1200 istrip cs7 parenb -parodd brkint \
ignpar icrnl ixon ixany opost onlcr cread hupcl isig icanon \
echo echoe echok
Fonctions prises en charge
- initscr(), endwin() ;
- addch(), mvaddch(), addstr, mvaddstr() ;
- attron(), attroff() ;
- erase(), clear(), clearok() ;
- refresh(), beep().
La gestion de l'entrée standard, ainsi que l'affichage d'images en mode semi-graphique, sont en projet pour des futures versions.
Si vous pensez avoir affaire à un bug, n'hésitez pas à jeter un œil au bugtracker du projet pour le signaler.
Commentaires
Poster un commentaire
Alexandre MONTARON
Il manque effectivement pas mal d'attributs au curses d'unix (ou de Linux) pour fonctionner avec le minitel même un M1 ! Les doubles hauteurs, la gestion spécifique des délimiteurs pour les couleurs de fond, les semi-graphiques (G1), les G2...etc...
Cependant, j'ai réussi a coder les filets du vt100 sur M1B (pas M2 donc) a partir de caractères semi-graphique 40 colonnes et sans DRCS dans le terminfo traditionnel. Les filets sont un peu plus gros : http://canal.chez.com/Linux_mc.gif mais c pas si mal.
Le nouveau terminfo est la : http://canal.chez.com/mntl.ti Notamment grace a : acsc=`>a9f!j%k4l<m-n=p#q\,rpt=u5v-w<x5yvzy|l~$, smacs=^N, rmacs=^O, - on pourrait même coder tout le jeu G1 !
Alex. - http://canal.chez.com/videotex.htm
Alexandre MONTARON
Cependant, depuis ce message j'ai réussi a coder les G2 (c-a-d en gros les lettres accentuées et quelques autres caractères) dans les terminfos (ex: TERM=m1b-nb ... ) Pour cela il faut utiliser screen(1) et ajouter 6 lignes a .screenrc : http://canal.chez.com/mntl.ti
Alex. - http://canal.chez.com/terminfo.htm (repérer le mot pr<b>é</b>c<b>é</b>dent dans l'image !)
Poster un commentaire