                                  XTel 3.2

                         Emulateur Minitel sous X11

                     Pierre Ficheux (pierre@alienor.fr)

                               Septembre 1998

----------------------------------------------------------------------------

   * 0 - Préambule
   * 1 -Présentation
        o 1.1 - But
        o 1.2 - Description des répertoires
        o 1.3 - Méthode de simulation des couleurs en monochrome
   * 2 - Génération
   * 3 - Installation et configuration
        o 3.1 - Introduction
        o 3.2 - Installation du démon xteld
        o 3.2 - Détection/configuration des modems
        o 3.3 - Installation du client xtel
        o 3.4 - Utilisation de xteld avec HyperTerminal® sous Window$
   * 4 - Remarque sur l'utilisation
   * 5 - Bugs et limitations

0. Préambule

Par PITIE, lisez ce fichier avant de vous poser (ou de ME poser) des
question sur l'installation !

Merci à ceux qui m'ont transmis leurs remarques et problèmes sur les
versions 2.2/2.3/2.4/3.0/3.1 et/ou contribué à l'évolution et la diffusion
de XTEL avec entre-autres :

   * Michel Fingerhut (Michel.Fingerhut@ircam.fr)
   * Laurent.Ghys (Laurent.Ghys@ircam.fr)
   * Christophe De Traversay
   * Christophe Wolfhugel (wolf@pasteur.fr)
   * René Cougnenc +
   * Remy Card (card@ibp.fr)
   * Eric Dumas (dumas@freenix.fr)
   * Daniel Roche (dan@rd.lectra.fr), conseiller artistique pour les icônes
     :-)

Je tiens a remercier particulièrement :

   * Bernard Fouche (CPIO S.A.) et Florent Pillet (ex CPIO S.A.) pour les
     multiples corrections de bugs concernant le décodage Vidéotex.
   * Pierre Beyssac pour:
        o l'amélioration du demon xteld
        o l'intégration du code pour utiliser le Minitel 2 comme
        o le code d'utilisation du démon syslogd
   * Bertrand Petit pour son floppy de pages d'exemples DRCS.
   * Sylvain Meunier pour:
        o les bases du code d'émulation télé-informatique
        o les bases des macros de conversion des fontes BDF en OpenWindows

Une pensée spéciale pour René Cougnenc, R.I.P ;-(

Pour connaitre les différences entre les versions, voir le fichier HISTOIRE.

Pour voir ce que donne un écran XTEL, vous pouvez visualiser le fichier
xtel.gif.

1. Présentation

1.1 But

XTEL permet d'émuler un Minitel 1B, 2 ou TVR (Télétel Vitesse Rapide) sur un
terminal X, ou une station de travail couleur, monochrome ou à niveaux de
gris.

Il est utilisable en réseau, c'est a dire qu'une des machines du réseau
commande les MODEMS et dialogue avec les services Télétel, les utilisateurs
de XTEL dialoguent avec cette machine "serveur" par socket internet
(utilisation d'un service TCP et du super-démon "inetd").

La version 2.4 et > permet également une utilisation en "local". Cela permet
d'utiliser XTEL sur des machines autonomes sur lequel aucun package TCP/IP
n'est installé. XTEL utilise alors des sockets "unix" (AF_UNIX).

On peut générer XTEL avec 2 toolkits (interfaces graphiques) possibles :

   * Toolkit Athena (gratuit, livré avec X11)
   * Toolkit OSF-Motif (produit commercial)

L'émulation "Télétel Vitesse Rapide" nécessite de modifier le fichier
"Config.tmpl" pour commenter la ligne:

        #define NO_TVR

L'émulation n'est pas disponible par défaut car elle est très peu utilisée
vu que les serveurs TVR (3623) sont assez peu nombreux et que la modulation
est spécifique à FT... A ma connaissance, les seuls modems supportant cette
modulation sont les Djinn Flash vendus par FT et fabriqués par la société
bordelaise COM1.

Cette émulation nécessite également la "libjpeg" (du JPEG independent
group). Cette librairie est disponible sur ftp.uu.net:/graphics/jpeg.

Elle normalement présente sur la majorité des distributions LINUX.

J'utilise XTEL sur Linux (xtel et xteld), SunOS 4.1.3, System V 3.2, SVR4...

J'ai personnellement testé la partie xtel sur:

   * Linux 1.0, 1.2, 2.0
   * Lectra LS/UX SVR4.0
   * SunOS 4.1.1 et +
   * Solaris 2.3 et +
   * SGI Irix 5.3

Pour la partie xteld (en particulier la gestion des lignes séries), je n'ai
*vraiment* testé que sur System V 3.2, SVR4, Solaris et Linux.

1.2 Description des répertoires

 ./        le source de XTEL + des exemples de fichiers de configuration
           (xtel.lignes, xtel.services)
 ./Videotexle widget de décodage Vidéotex
 ./Widgets les autres widgets spéciaux utilisées par XTEL

 ./Xsra    le sélecteur de fichier pour Athena (venant de SRA, Tokyo,
           Japon, et déja utilisé dans GhostView, Pixmap, etc...)
 ./fonts   les fontes
 ./bitmaps bitmaps particuliers à XTEL
 ./pixmaps pixmaps (.xpm) particuliers à XTEL
 ./exemplesquelques pages vidéotex, DRCS et TVR

1.3 Méthode de simulation des couleurs en monochrome

Sur un écran monochrome (1 plan mémoire), on simule les 8 couleurs du
MINITEL en utilisant des "pixmaps" et en les affectant au "stipple"
d'écriture (XSetStipple). On passe ainsi la couleur standard d'écriture (le
blanc) au travers d'une "passoire" ce qui simule des niveaux de gris (si on
utilise la version "petit écran" de XTEL, option -p, certains affichages, de
caractères en particulier, ne sont pas tres lisibles).

2 Génération

La génération de XTEL utilise le système des "Imakefile". Les options de
configurations sont dans le fichier "Config.tmpl".

A partir du fichier "Imakefile" fourni sur la distribution, vous pouvez
alors générer un "Makefile" par :

                xmkmf

Puis pour générer la disribution XTEL :

                make Xtel

Si tout se passe bien (!!!), vous devez avoir après le "make all" :

   * xtel, client XTEL
   * xteld, démon lance sur la machine "serveur"
   * les fontes, fonts/*.snf si X11R4, fonts/*.pcf si X11R5 ou +

3 Installation et configuration

Cette partie décrit point par point l'installation de Xtel. Si vous utilisez
une archive binaire au format RPM de RedHat Software, vous n'avez
normalement qu'à installer l'archive par la commande:

               rpm -ivh nom_archive_RPM_xtel

3.1 Introduction

La configuration de XTEL se décompose en :

   * installation et configuration du démon "xteld" sur la machine serveur
     (ou bien sur la machine locale dans le cas de la version sans réseau)
   * installation du client "xtel" sur toutes les machines du réseau
     désirant l'utiliser
   * dans le cas d'une installation avec réseau :

       1. ajouter la ligne :


                  xtel    1313/tcp

          dans le fichier "/etc/services" (ajout d'un nouveau service TCP).
       2. ajouter la ligne :

                  xtel stream tcp nowait root /usr/X11R6/bin/xteld xteld

          dans le fichier "/usr/etc/inetd.conf" (ou "/etc/inetd.conf"), pour
          informer le super-démon "inetd" que l'on a créé un nouveau demon
          "xteld" (ATTENTION, sur certains systèmes, les champs doivent être
          séparés par des TAB et non des blancs). Le chemin d'accès absolu à
          "xteld" varie bien évidemment suivant les systèmes.
       3. forcer "inetd" à relire le fichier "inetd.conf" par :

                  kill -1 le_pid_de_inetd

   * Dans le cas d'une installation sans réseau :

       1. ajouter le lancement automatique du démon "xteld" dans le(s)
          fichier(s) de démarrage de votre système (/etc/rc, ou autre, ça
          dépend du système)
       2. le premier coup, vous pouvez lancer le démon à la main en faisant:

                  xteld

          en tant que root. ATTENTION, ne *jamais* lancer "xteld" à la main
          dans le cas d'une installation avec réseau !

3.2 Installation du démon xteld

Cette installation s'effectue sur la machine serveur (supportant le(s)
Modem(s)) . Si la machine serveur est également celle sur laquelle vous
générez XTEL, vous pouvez créer la règle d'installation par :

        #define INSTALLDEMON

dans le fichier "Config.tmpl", puis un:

        make install

L'installation du démon xteld se décompose en

  1. copier le programme "xteld" sur le répertoire $(BINDIR) (/usr/X11R6/bin
     sous XFree86-3.1.x).
  2. copier les fichier "xtel.lignes" et "xtel.services" sur le répertoire
     $(LIBDIR)/xtel (/usr/X11R6/lib/X11/xtel sous XFree86-3.1.x).

Le fichier "xtel.lignes" définit les lignes "tty" utilisables par "xteld".
Une ligne du fichier définit une ligne "tty" :

 [device,]nom_tty[:rtscts],[vitesse,][nb de bits,][parité,]chat_script,délai_connexion
 [device,]nom_tty[:rtscts],[vitesse,][nb de bits,][parite,]chat_script,délai_connexion

            device              nom symbolique du device associé à cette
                                configuration de la ligne physique. Ce nom est
                                choisi par l'utilisateur (par exemple v23, tvr)
                                et sera utilisé dans le fichier "xtel.services"

            nom_tty             nom du tty (/dev/cuax sur Linux), avec
                                éventuellement le flag "rtscts" de contrôle de
                                flux hardware (pour TVR par exemple)

            vitesse             vitesse en bauds de la lignes. Les valeurs
                                supportées sont: 50, 75 110, 134, 150, 200,
                                300, 600, 1200, 1800, 2400, 4800, 9600,
                                19200, 38400.

            nb de bits          nombre de bits. Les valeurs supportées sont:
                                5, 6, 7, 8.

            parite              parité. Les valeurs supportées sont E (pair),
                                O (impair), N (sans parite).

            chat_script         Description du chat-script entre xteld et le
                                modem. La syntaxe du chat-script est similaire
                                à celle utilisée par UUCP. L'intérêt du
                                chat-script est de permettre une phase
                                d'initialisation du modem avant la composition
                                du numéro (par exemple, passer le modem en
                                modem V.23 - et non pas en automode - avant de
                                composer ==> augmentation de la vitesse de
                                connexion). Si le chat-script est
                                remplacé par la chaîne:

                                        minitel2

                                la ligne utilisera un Minitel 2 comme modem
                                (idem pour un minitel1, mais il faudra alors
                                composer les numéros a la main...)

                Les séquences reconnues par le chat-script sont :

                        \n      émet un LF
                        \r              CR
                        \t              VT
                        \d      tempo de 1 s
                        \a      bip (^G)
                        \T      remplace par le numéro de téléphone courant
                        \xyz    émet le caractère code en DECIMAL par xyz
                                (3 digits OBLIGATOIRES)
                        \xab    émet le caractère en HEXADECIMAL (2 digits)


            délai_connexion     délai maxi d'attente de la chaîne ci-dessus
                                en secondes

L'ancienne syntaxe (sans la notion de device) est toujours supportées (elle
est détectée par la présence d'un '/' en debut de ligne)

    exemples:

        le_v23,/dev/cua0,1200,7,E,\dat\r OK atdt\T\r CONNECT,30

        - nom du device = le_v23

        - ligne /dev/cua1, 1200 bauds, 7 bits, parité paire

        - le chat-script décrit la conversation suivante (to chat =
          converser)

                xteld émet                      Modem doit répondre

                \d                              Delai de 1s pour
                                                attendre le démarrage
                                                du soft du modem
                                                (SOUVENT NECESSAIRE)
                at + CR                         OK
                atdt + numéro téléphone + CR    CONNECT


        - délai maxi = 30 s

        le_tvr,/dev/cua2:rtscts,9600,8,N,\dat\r OK at+xm3\r OK atdt\T\r CONNECT,30

        - config en Télétel Vitesse Rapide (avec contrôle de flux hard  RTS/CTS
        sur la ligne)

        /dev/cua1,minitel2,30

        - ligne /dev/cua1

        - on utilise un Minitel 2 comme modem, délai maxi = 30s

Le fichier "xtel.services" définit les services accessibles aux utilisateurs
de XTEL. Une ligne du fichier définit un service :

  [Device,]Nom_du_service,numéro_de_téléphone[liste_d_utilisateurs]

                Device                  Device utilise (doit être défini dans
                                        "xtel.lignes")

                Nom_du_service          Chaine de caractères affichée dans le
                                        menu "Services" de "xtel"

                numéro_de_téléphone[:nom]     numéro du service

                liste_d_utilisateurs    liste des utilisateurs autorisés
                                        et des temps maxis de connexion pour
                                        un service donné (optionnel, syntaxe
                                        "user=delai")

             exemples :

                le_v23,Annuaire electronique,3611,=180
                le_v23,Teletel 1,3613,pierre=120:olivier
                le_v23,Méteo,3615:METEO
                le_tvr,Teletel TVR,3623
                le_v23,Direct,0,pierre@pcpf:@pcwin

Dans cet exemple le service d'\fIAnnuaire\fP est autorisé à tous pendant 180
secondes (=180). Le \fITélétel1\fP est accessible à l'utilisateurs pierre
pendant 120 secondes (pierre=120), il n'y a pas de limite d'accès pour
l'utilisateur olivier. L'accès au 3615 est limité au service METEO. Le
service Direct n'est accessible qu'à l'utiisateur 'pierre' sur la machine
'pcpf', et à tous les utilisateurs de la machine de nom 'pcwin'.

La dernière ligne "Direct,0" permet de fournir aux utilisateurs l'accès à la
composition directe des numéros (dangereux car certains services Télétel
sont hors de prix ! ==> à protéger).

La configuration de ces 2 fichiers est de sous responsabilité de
l'administrateur système suivant le budget téléphonique alloué !

3.3 Détection/configuration des modems

Si vous utilisez l'installation sous LINUX par RPM (voir
http://www.alienor.fr/~pierre/xtel/tele.html), la procédure doit détecter
automatiquement le modem (si celui-ci fait partie de la liste bien sûr). La
liste (modem.list) est localisée dans le répertoire /usr/X11R6/lib/X11/xtel
ou bien par Internet (dernière version à jour) sur l'URL
http://www.alienor.fr/~pierre/xtel/modem.list.

Si vous êtes sous LINUX, vous pouvez les modems détecter après
l'installation et générer du coup un fichier xtel.lignes. Pour cela taper:

    make_xtel_lignes

Si vous n'êtes pas sous LINUX, vous pouvez toujours utiliser le programme
mdmdetect pour tenter de détecter le type de modem présent sur une ligne
série donnée (vous pouvez aussi adapter le script make_xtel_lignes à votre
système).

pierre@pcpf % mdmdetect -h
Usage: mdmdetect [-d] [-l modem_list] [-b builder] [-q] tty_device

Voici quelques exemples d'utilisation:

   * Récupération de la liste des constructeurs connus:

     pierre@pcpf % mdmdetect -q
     Hayes
     COM1
     Olitec
     USR
     Kortex

   * Détection sur la ligne cua1 en utilisation la liste locale et sachant
     que le modem est de marque COM1

     root@pcpf # mdmdetect -b COM1 cua1
     .

     PC-Card-MC218 , 38400 \dat&fm1e0&k3f3\r-OK

     Le programme renvoit alors 4 paramètres:

       1. le nom du modem
       2. le séparateur à utiliser dans le fichier xtel.lignes (souvent la
          virgule)
       3. la vitesse à utiliser dans le fichier xtel.lignes
       4. la chaine d'initialisation du modem

     Notez que les blancs sont systématiquement remplacés par le caractère -
     (moins). La ligne correspondante dans xtel.lignes est:

     # COM1 PC Card MC218
     modem0,/dev/cua1,38400,7,E,\dat&fm1e0&k3f3\r OK atdt\T\r CONNECT,30

   * Même détection en utilisant une liste sur Internet:

     root@pcpf # mdmdetect -l http://www.alienor.fr/~pierre/xtel/modem.list -b COM1 cua1
     Appel de pcpf...OK
     .

     PC-MCIA-MC218 , 38400 \dat&fm1e0&k3f3\r-OK

     Notez que mdmdetect ne fonctionne PAS (pour l'instant) à travers un
     proxy.

3.3 Installation du client xtel

Cette installation doit être effectuée sur chaque machine du réseau désirant
utiliser XTEL. Elle se decompose en :

   * configuration du fichier de ressources, qui permet de définir l'aspect
     et le comportement de "xtel" :
        o nom du serveur (ressource "serveur")

                  ! localhost ==> serveur local
                  *serveur:       localhost

        o format de la commande d'impression de page (ressource
          "commandeImpression")

                  *commandeImpression: xwdtopnm %s | pnmflip -r90 | pnmtops | lpr

          On utilise le package PBMPLUS pour convertir la fenêtre
          d'émulation du format XWD --> POSTSCRIPT (voir fichier
          "imprime.c").
        o nom du service (ressource "nomService")

                  *nomService:    xtel

          à priori, pas de raison de changer ...
        o taille de la fenêtre d'émulation (ressource "petiteFonte")

                  *petiteFonte: False

          par défaut, on utilise la grande fonte (émulation sur 640x500
          pixels).
   * installation, qui est effectuée par :

             make install

     qui installe :
        o xtel sur $(BINDIR) (et xteld si INSTALLDEMON est defini)
        o XTel (ou XTelm si version Motif) sur $(LIBDIR)/app-defaults
        o les fontes sur $(LIBDIR)/fonts/xtel
        o xtel.lignes et xtel.services si INSTALLDEMON est defini
   * ajout du nom du service "xtel", par ajout de la ligne:

             xtel    1313/tcp

     dans le fichier "/etc/services" (ajout d'un nouveau service TCP). Ceci
     n'est vrai que dans la version reseau.
   * information au serveur X de la présence de nouvelles fontes sur

             $(LIBDIR)/fonts/xtel

     par exemple avec :

             xset +fp /usr/X11R6/lib/X11/fonts/xtel

     A T T E N T I O N !

     Si vous installez XTEL sur XFree-86 (version 2 ou 3), vous pouvez (et
     même devez) indiquer au serveur le répertoire des fontes XTEL.

     Pour XFree86-2.1: ajouter le path des fontes XTEL dans le "FontPath" :

             FontPath        "/usr/X386/lib/X11/fonts/misc/,/usr/X386/lib/X11/fonts/75dpi/,/usr/X386/lib/X11/fonts/xtel/"

     Pour XFree86-3.1: ajouter une ligne du type :

             FontPath    "/usr/X11R6/lib/X11/fonts/xtel/"

     bien sûr, il faut relancer le serveur...
   * installation du manuel par :

             make install.man

                  L'INSTALLATION DE XTEL EST TERMINEE !!!

Remarques :

   * Si vous disposez d'un écran couleur, et d'un window-manager supportant
     les icônes au format XPM (fvwm par exemple), vous pouvez utiliser le
     fichier "xtel.xpm" comme icône. Pour celà, il faut ajouter les lignes
     suivantes dans le .fvwm :

             Style "xtel"       Icon xtel.xpm

     Pour tvtwm :

             # indispensable pour inhiber l'icone initial de XTEL
             ForceIcons

             Icons {
                     "xtel"  "xtel.xpm"
             }

   * Si vous utilisez AIX (pauvre de vous !), il semble qu'il faille définir
     NO_TERMIO dans le fichier "Config.tmpl"

Utilisation de xteld avec HyperTerminal® sous Window$

Il est possible d'utiliser le démon xteld comme serveur de modem comme pour
le programme HyperTerminal® Private Edition développé par Hilgraeve. Pour
installer ce système il faut:

   * Coté UNIX ajouter un service xtelw (par exemple) sur un port différent
     de celui du client xtel standard (utiliser par exemple le port 1314 à
     la place du 1313). La différence avec l'installation du paragraphe 3.1
     est l'option -H à ajouter à l'appel de xteld dans le fichier
     /etc/inetd.conf:

             xtelw stream tcp nowait root /usr/X11R6/bin/xteld xteld -H

     La modif du fichier /etc/services sera du type:

             xtelw    1314/tcp

   * Coté HyperTerminal, définir une connexion nommé "xtel" (par exemple) et
     utilisant une connexion de type 'TCP/IP (Winsock)' sur l'adresse du
     serveur UNIX et le port 1314. Une explication détaillé de
     l'installation est disponible sur
     http://www.alienor.fr/~pierre/xtel/hyper.html.

Cette méthode permet d'utiliser le serveur UNIX à la fois pour des clients
xtel UNIX et pour des clients HyperTerminal® Windows.

4 Remarque sur l'utilisation

Lorsqu'un utilisateur est connecté a un service, "xteld" crée un fichier
".xtel-nom_utilisateur" sur le répertoire /tmp. Ce fichier contient des
infos sur la connexion (pid du démon, nom de ligne, nom de service).

Les caractéristiques de la connexion (heure, durée, service, ...) sont
sauvées sur un fichier de "log" (par défaut $(LIBDIR)/xtel/xtel.log).

5 Bugs et limitations

   * Les séquence CSI ne sont pas entièrement traitées (XTEL ne traite que
     les positionnements et les débuts/fins d'insertion...)
   * Le décodage VIDEOTEX est relativement complexe et il reste certainement
     des bugs de decodage. Si vous en trouvez un, merci de m'envoyer un mail
     explicitant le bug (service Télétel, moyen de parvenir à la page et
     surtout la page incriminée en pièce jointe).
   * Le TVR n'est certainement pas géré complètement...mais ce n'est pas
     grave car le TVR est d'ores et déja enterré ! (le flag de compilation
     NO_TVR est actif par défaut et les versions binaires sont compilées
     ainsi)

Je suis bien entendu à l'écoute de toutes les remarques constructives.

Ave feune,

Pierre Ficheux
E-mail: pierre@alienor.fr
WWW : http://www.alienor.fr/~pierre
