[ViewData(Prestel)] Terminfo/Termcap pour Linux ...

Cette catégorie traite de développements récents destinés à nos vieilles machines, applications, jeux ou démos... Amis programmeurs, c'est ici que vous pourrez enfin devenir célèbres!

Modérateurs : Papy.G, fneck, Carl

canal
Messages : 67
Inscription : 17 juil. 2015 00:15
Localisation : Paris
Contact :

[ViewData(Prestel)] Terminfo/Termcap pour Linux ...

Message par canal »

Bon voila... tout est dans le titre ...

en ce jour férié du 11/11 c'est le moment de se faire un terminfo pour viewdata !

Pour rappel: Viewdata c le Minitel anglais ... et terminfo (ex-termcap) c le fichier de description des terminaux sous Linux (unix).

Le problème ?

1/ Bah, c'est que visiblement les terminaux viewdata n'ont pas de séquence pour positionner le curseur où l'on veut (sur minitel: "US B D" va en ligne 2 colonne 4). Sur viewdata il faut aller en haut et faire des curseurs bas et droit ...

2/ Vu le 1/, personne visiblement n'en a jamais fait - rien depuis les années 80-90 !!!!! (Défi ? Challenge ?)

3/ Dans terminfo/termcap il est possible d'intégrer des "if-then-else" et des variables mais pas de boucles ... néanmoins ça ouvre la porte a un petit dev. quand même...

4/ Bien que (n)curses devrait pouvoir fonctionner sans cup ... bah la sans: vi, Emacs, xemacs... ne fonctionnent pas ! Que dale !

Bref, je sais pas trop si je vais dans la bonne direction, mais,
j'ai maintenant une (première) solution ici : http://canal.chez.com/mntl.ti

Code : Tout sélectionner

viewdata|prestel/viewdata terminals,
	cols#40, lines#24, am, bw,
	bel=^G, cr=^M,
	civis=^T, cnorm=^Q,
	cub1=^H, cuf1=^I, cud1=^J, cuu1=^K, home=^^, nel=^M^J,
	clear=^L, .el=^X, .ind=^J, .ri=^K,
	.rep=%p1%c^R%p2%'?'%+%c, eslok, hz,
# viewdata lacks a true cup capabilitie,
# so I achieved it with home and cud1/cuf1 sequences only !
	cup=^^%?%p1%{07}%>%t^J^J^J^J^J^J^J^J%;%?%p1%{15}%>%t^J^J^J^J^J^J^J^J%;%?%p1%{4}%&%t^J^J^J^J%;%?%p1%{2}%&%t^J^J%;%?%p1%{1}%&%t^J%;%?%p2%{07}%>%t^I^I^I^I^I^I^I^I%;%?%p2%{15}%>%t^I^I^I^I^I^I^I^I%;%?%p2%{23}%>%t^I^I^I^I^I^I^I^I%;%?%p2%{31}%>%t^I^I^I^I^I^I^I^I%;%?%p2%{4}%&%t^I^I^I^I%;%?%p2%{2}%&%t^I^I%;%?%p2%{1}%&%t^I%;,
viewdata-rv|prestel/viewdata terminals with reverse capabilitie (as green),
	xmc#1, smso=\EB, rmso=\EG, use=viewdata,
# viewdata-rv do works with some applications (e.g. emacs, xemacs) but fails with vim.
Pour info,
sur minitel: cup=^_%p1%'A'%+%c%p2%'A'%+%c,
et sur VT100: cup=\E[%i%p1%d;%p2%dH,
ici c'est beaucoup plus long (une entrée terminfo doit pouvoir faire jusqu'à 4Ko maximum)
mais on peux surement faire mieux (j'ai déjà quelques idées).

Des questions ? :-D
Alex. - http://canal.chez.com/mntl.ti
Related post : http://forum.system-cfg.com/viewtopic.php?t=6708
CP/M (Z80)
__sam__
Messages : 7981
Inscription : 18 sept. 2010 12:08
Localisation : Brest et parfois les Flandres

Re: [ViewData(Prestel)] Terminfo/Termcap pour Linux ...

Message par __sam__ »

Comment ca marche ? Tu compares la position courante avec celle demandée et tu envoies des ctrl-i et des ctrl-j (déplacement curseur d'une position) pour arriver au bon endroit? J'imagine que tu a pris une approche dichotomique: test puis déplacement horiz de 40 char, test puis déplacement de 20 char, test puis déplacement de 10, test puis depl 5, test puis depl 3, test puis depl 2, test puis depl 1. Soit un max de 7 tests pour se déplacere horizontalement sur 80 colonnes. En y, il y a 24 positions donc log(24)/log(2) soit 5 tests maxi.
Samuel.
A500 Vampire V2+ ^8^, A1200 (030@50mhz/fpu/64mb/cf 8go),
A500 GVP530(MMU/FPU) h.s., R-Pi, TO9, TO8D, TO8.Démos
canal
Messages : 67
Inscription : 17 juil. 2015 00:15
Localisation : Paris
Contact :

Re: [ViewData(Prestel)] Terminfo/Termcap pour Linux ...

Message par canal »

__sam__ a écrit :Comment ca marche ? Tu compares la position courante avec celle demandée et tu envoies des ctrl-i et des ctrl-j (déplacement curseur d'une position) pour arriver au bon endroit?
1/ Oui mais je suis obligé de repartir de home (1,1) car je ne sais jamais où est déjà le curseur...
__sam__ a écrit :J'imagine que tu a pris une approche dichotomique: test puis déplacement horiz de 40 char, test puis déplacement de 20 char, test puis déplacement de 10, test puis depl 5, test puis depl 3, test puis depl 2, test puis depl 1. Soit un max de 7 tests pour se déplacere horizontalement sur 80 colonnes. En y, il y a 24 positions donc log(24)/log(2) soit 5 tests maxi.
2/ Yes! J'ai effectivement 5 tests pour les 24 lignes et 7 tests pour les 40 colonnes (car c'est seulement sur 40 colonnes ouf!) :
On pouvais faire moins de tests mais ca augmente les caractères dans le "code" !

Heu et sinon pour faire les tests que tu dis tu as besoin d'une variable non ? Moi j'ai fait avec des masques de bits (and 1, and 2, and 4) et le reste avec des test sup(>) !

Je détail, c'est plus clair comme ça :

Code : Tout sélectionner

%?%p1%{07}%>%t^J^J^J^J^J^J^J^J%;
%?%p1%{15}%>%t^J^J^J^J^J^J^J^J%;
%?%p1%{4}%&%t^J^J^J^J%;
%?%p1%{2}%&%t^J^J%;
%?%p1%{1}%&%t^J%;
%?%p2%{07}%>%t^I^I^I^I^I^I^I^I%;
%?%p2%{15}%>%t^I^I^I^I^I^I^I^I%;
%?%p2%{23}%>%t^I^I^I^I^I^I^I^I%;
%?%p2%{31}%>%t^I^I^I^I^I^I^I^I%;
%?%p2%{4}%&%t^I^I^I^I%;
%?%p2%{2}%&%t^I^I%;
%?%p2%{1}%&%t^I%;
En gros, ca marche bien. On sent quand même que lorsqu'il écrit dans le bas de l'écran c'est plus lent qu'en haut ... c risible mais ça marche !
L'idée d'après, c'est que d'après ce que j'ai compris, Viewdata a un cas particulier : il n'y a pas de scrolling ! Du coup, je devrais y arriver aussi avec des curseurs haut et gauche en plus de droite et bas ! Et pouvoir atteindre n'importe quel position en un maximum de 33 (=1+12+20) caractères ! Le pire étant au centre de l'écran ligne 13, colonne 21 !

Pas de scrolling donc : home puis curseur haut et hop je me retrouve en ligne 24 puis 23, 22 ...etc... Ca complique un peu le code mais ca optimise les caractères envoyé (surtout a 1200 bauds).

Alex.
CP/M (Z80)
Daniel
Messages : 17417
Inscription : 01 mai 2007 18:30
Localisation : Vaucluse
Contact :

Re: [ViewData(Prestel)] Terminfo/Termcap pour Linux ...

Message par Daniel »

Pour information :

Il y a le même problème avec le PROTEUS III B : pas de commande directe pour positionner le curseur.
Le moniteur système utilise une zone de deux octets en RAM pour stocker la position courante, et la met à jour à chaque commande d'affichage. Pour positionner le curseur, il envoie des déplacements relatifs par rapport à la position courante.

Avantage : pas de repositionnement à l'origine et statistiquement moins de déplacements relatifs.

Inconvénient : il ne faut pas se tromper dans les calculs, s'il y a un décalage il ne se rattrape pas.
Daniel
L'obstacle augmente mon ardeur.
canal
Messages : 67
Inscription : 17 juil. 2015 00:15
Localisation : Paris
Contact :

Re: [ViewData(Prestel)] Terminfo/Termcap pour Linux ...

Message par canal »

Daniel a écrit :Il y a le même problème avec le PROTEUS III B : pas de commande directe pour positionner le curseur.
Et aussi les minuscules n'ont pas l'air d'être au bon endroit dans la table ASCII ...

Cela n'empeche pas de lui faire son terminfo (même dumb) puisqu'il a un port série. Il y a même les filets et au pire Linux accepte aussi un terminal qui n'a que des majuscules !

Code : Tout sélectionner

viewdata-o|optimized version of viewdata prestel/viewdata terminals,
	cup=^^
	%p1%?%p2%{20}%>%t%?%p1%{23}%=%t%Pa%{1}%e%{1}%+%;%;%Pa

	%?%ga%{13}%<%t
	%?%ga%{07}%>%t^J^J^J^J^J^J^J^J%;
	%?%ga%{4}%&%t^J^J^J^J%;
	%?%ga%{2}%&%t^J^J%;
	%?%ga%{1}%&%t^J%;
	%e
	%{24}%ga%-%Pa
	%?%ga%{07}%>%t^K^K^K^K^K^K^K^K%;
	%?%ga%{4}%&%t^K^K^K^K%;
	%?%ga%{2}%&%t^K^K%;
	%?%ga%{1}%&%t^K%;
	%;

	%?%p2%{21}%<%t
	%?%p2%{07}%>%t^I^I^I^I^I^I^I^I%;
	%?%p2%{15}%>%t^I^I^I^I^I^I^I^I%;
	%?%p2%{4}%&%t^I^I^I^I%;
	%?%p2%{2}%&%t^I^I%;
	%?%p2%{1}%&%t^I%;
	%e
	%{40}%p2%-%Pa
	%?%ga%{07}%>%t^H^H^H^H^H^H^H^H%;
	%?%ga%{15}%>%t^H^H^H^H^H^H^H^H%;
	%?%ga%{4}%&%t^H^H^H^H%;
	%?%ga%{2}%&%t^H^H%;
	%?%ga%{1}%&%t^H%;
	%?%p1%{23}%=%t^K%;
	%;,
	use=viewdata,
# Samples with TERM=viewdata and TERM=viewdata-rv: http://canal.chez.com/blog/
Et sinon j'ai donc avancé sur ce terminfo viewdata ^^^ version optimisée ...... en profitant du fait qu'il n'y pas de mode rouleau :
33 caractères maxi (17 en moyenne).

J'en profite aussi pour parler de ce site de compétition "rétro" en anglais:
http://www.wickensonline.co.uk/retrocha ... ants-list/
descendre jusqu'à CANAL puisque c la que je suis ... huhu...

Alex. - http://canal.chez.com/blog/
CP/M (Z80)
Répondre