minicurses 0.2 : un ncurses pour Minitel

 x0r   2
programmation c minicurses minitel

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

/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