IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques, systèmes et outils C Discussion :

termcap lecture affichage


Sujet :

Bibliothèques, systèmes et outils C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 38
    Points : 15
    Points
    15
    Par défaut termcap lecture affichage
    Bonsoir les gens,

    Je developpe un programme fonctionnant en mode RAW grace au termcap. Je cherche a recupere un caractere a un endroit precis a l'ecran.
    Je m'explique:
    Imaginon que j'ecrive '0' a la position (x,y) 10,10 de mon ecran grace a tputs et tgoto.
    Je deplace ensuite mon curseur grace au touche directionel a la position 10,10.
    J'aimerai pouvoir recuperer (a l'appuie d'une touche) le caractere a la position de mon cuseur (ici mon '0').
    Les termcap offre il cette possibilite?
    Merci d'avance

    ps: si j'ecris "\033[32m A \033[0m" possibilite de determiner la couleur?

  2. #2
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut
    Si ton terminal est en mode RAW, ça veut dire que tu contrôles normalement complètement ton curseur et donc que tu connais sa position à tout moment sur ton écran. Après, à toi de bien gérer ça. Le plus simple reste de stocker quel caractère a été écrit à quel endroit.

    Normalement oui, tu peux savoir quelle couleur a été écrite (je présume que tu connais le man console_codes).

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 38
    Points : 15
    Points
    15
    Par défaut
    Effectivement sa reste une solution. Mais si j'ai mon terminal rempli de caracteres j'ai peur que cela soit un peu lourd de tout stocker.
    Y aurait-il une solution sans devoir stocker les caracteres afficher?

    Merci d'avance

  4. #4
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut
    Mouais... A part si ton terminal peut stocker plusieurs centaines de millions de caractères à l'écran, je vois pas où est le souci. Sinon pour répondre à ta question : non, je ne connais pas de moyen permettant de récupérer un caractère affiché à l'écran.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 38
    Points : 15
    Points
    15
    Par défaut
    Merci pour ton avis
    si jamais quelqu'un d'autre connait une autre solution que stocker dans un tableau je suis peneur
    Sinon tant pis, je ferais avec tableaux.

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 617
    Points
    23 617
    Par défaut
    C'est une fonction qui existait effectivement sur les BASIC des années 1980 et 1990, aussi bien sur PC que sur les huit bits, d'ailleurs. Par contre, je ne l'ai jamais connue sur un terminal. J'ai brièvement consulté ECMA-48 pour essayer de trouver une référence quelconque à cela, sans succès (aujourd'hui, ça poserait des problèmes de sécurité).

    ps: si j'ecris "\033[32m A \033[0m" possibilite de determiner la couleur?
    Oui, mais si tu essaies cela avec echo depuis le shell, il faudra lui passer l'option « -e » pour qu'il prenne en charge les caractères d'échappement.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 38
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    C'est une fonction qui existait effectivement sur les BASIC des années 1980 et 1990, aussi bien sur PC que sur les huit bits, d'ailleurs.
    Te souvient tu du nom de cette fonction?

  8. #8
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 188
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 188
    Points : 17 139
    Points
    17 139
    Par défaut
    Les premières phrases de man termcap:
    The termcap database is an obsolete facility for describing the capa-
    bilities of character-cell terminals and printers. It is retained only
    for capability with old programs; new ones should use the terminfo(5)
    database and associated libraries.
    Termcap est obsolète, essaie si possible d'utiliser terminfo
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  9. #9
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 617
    Points
    23 617
    Par défaut
    Citation Envoyé par punkydev Voir le message
    Te souvient tu du nom de cette fonction?
    C'était SCREEN(x,y) en tant que fonction, mais cela n'a rien à voir avec le langage C, ni la programmation système, ni le pilotage des terminaux. Ça ne fonctionnait qu'en local, parce que le Basic émulait lui-même son propre environnement de travail (même s'il lisait effectivement directement l'écran). Je n'ai pas connaissance d'un terminal qui le fasse sur demande, même s'il peuvent être quand même interrogés sur d'autres paramètres (par exemple la position du curseur).

  10. #10
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 38
    Points : 15
    Points
    15
    Par défaut
    Termcap est obsolète, essaie si possible d'utiliser terminfo
    oui (petite erreur de ma part), j'utilise terminfo qui compile avec la lib termcap.

  11. #11
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 38
    Points : 15
    Points
    15
    Par défaut
    Desole pour le double post.

    Mais je viens d'avoir une idee affin de resoudre mon probleme, le principe et simple, il consisterais a "simuler" un copier du caractere en question.
    Avez-vous une idee de comment faire du copier/coller en terminal? (vim le fais donc c'est techniquement possible).

  12. #12
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 617
    Points
    23 617
    Par défaut
    Citation Envoyé par punkydev Voir le message
    Mais je viens d'avoir une idee affin de resoudre mon probleme, le principe et simple, il consisterais a "simuler" un copier du caractere en question.
    Avez-vous une idee de comment faire du copier/coller en terminal? (vim le fais donc c'est techniquement possible).
    Ce n'est pas idiot. Pour vim lui-même, il n'y a rien à espérer de ce côté puisque l'éditeur maintient tout le texte en mémoire de son côté (ne serait-ce que parce qu'il doit mettre à jour le fichier correspondant) et actualise l'affichage quand il a besoin de le faire. Et heureusement d'ailleurs car dans le cas contraire, on ne pourrait bénéficier ni des différents buffers, ni du déroulement des lignes au delà des marges, ni même éditer un texte plus long que le contenu de l'écran.

    Par contre : GPM, lui, permet de faire des copier-coller à la souris depuis une console virtuelle Linux (même en texte) et les xterm graphiques émulent également cette possibilité. Par contre, il s'agit d'une extension qui te permet de piloter ton terminal comme une application et qui ne fait pas du tout partie du standard original. Tu ne pourras pas le faire à travers une connexion ssh non plus, par exemple. L'utilisateur, lui, aura la possibilité de le faire en local mais une fois les caractères émis vers ton application, celle-ci ne saura jamais s'il s'agit d'un authentique copier-coller ou si l'utilisateur les a saisis à la main.

    Il faut bien se souvenir qu'un « terminal » est un appareil qui se place « au bout d'une ligne ». C'est pour cela qu'on donne le même nom aux téléphones mobiles, par exemple. À l'origine, avant que les ordinateurs personnels se démocratisent, les serveurs étaient centralisés dans des salles machines et les utilisateurs s'y connectaient à l'aide de terminaux physiques, qui y étaient directement reliés par des lignes série. Il n'y avait pas de souris sur ces terminaux et de toutes façons, les lignes auraient été trop lentes pour transmettre les événements efficacement. On trouve parfois des trackballs sur certains vieux équipements spécialisés ou haut de gamme mais là encore, la gestion ne faisait qu'en local.

  13. #13
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut
    Si tu parles du copié/collé avec le clic de la molette de la souris, rien de bien compliqué : il te suffit de lire une nouvelle fois sur l'entrée standard.

  14. #14
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 617
    Points
    23 617
    Par défaut
    Citation Envoyé par imperio Voir le message
    Si tu parles du copié/collé avec le clic de la molette de la souris, rien de bien compliqué : il te suffit de lire une nouvelle fois sur l'entrée standard.
    Non, ce n'est pas de cela qu'il parle exactement. Relis bien.

  15. #15
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut
    @Obsidian: Hum... J'ai beau relire, je comprends toujours "faire un copié-collé". Et le seul moyen que je connaisse pour le faire avec un terminal c'est en cliquant sur la molette. S'il parle d'un copié-collé avec CTRL-C/CTRL-V, c'est possible mais il lui faudra passer par des fonctions systèmes pour récupérer le contenu du presse-papier (si c'est bien le bon nom, j'arrive plus à le retrouver).

    Si j'ai encore faux, je veux bien un éclaircissement !

  16. #16
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 617
    Points
    23 617
    Par défaut
    Citation Envoyé par imperio Voir le message
    Si j'ai encore faux, je veux bien un éclaircissement !
    Dans ce cas, il faut relire le fil en entier.

    Initialement, le primo-postant cherche à récupérer un caractère déjà à l'écran, en passant au terminal la position concernée (ou éventuellement celle du curseur) et en espérant que ce terminal lui indique ce qui s'y trouve. On lui a répondu qu'effectivement, ça existait du temps du BASIC mais qu'à ma connaissance, les terminaux n'ont jamais permis de faire cela.

    Il a alors pensé au copier-coller, puisque vim permet de le faire sur demande, en se disant que si copier-coller il y a, alors les données de l'écran doivent forcément être lues d'une manière ou d'une autre. On lui a répondu que le copier-coller de vim et celui des applications en général ne fonctionnaient pas du tout en lisant l'écran mais en retrouvant les infos originales, ou éventuellement à partir de ce qui a été transmis à X-Window si c'est sous la forme de chaînes. Par contre, GPM permet d'utiliser la souris dans les consoles virtuelles de Linux même en mode texte (et donc en dehors de X-Window) et d'émuler le même copier-coller avec le bouton milieu de la souris. C'est en fait possible grâce à une extension particulière de Linux qui permet d'interroger les consoles virtuelles. Donc ça ne marche qu'en local, et dans tous les cas, ça ne fonctionnera pas au travers des entrées et sorties standard, qui sont le moyen normal (et parfois unique) de communiquer avec le terminal.

    Il n'est toutefois pas impossible que ça existe quand même mais, jusqu'à présent, je n'ai pas encore réussi à retrouver la séquence de code qui permettrait de faire cela. Il reste peut-être éventuellement une option : certains terminaux sont faits pour « dumper » tout le contenu de l'écran vers un canal donné, ce afin de pouvoir imprimer la page. En général, il s'agit d'une mini-imprimante directement connectée au terminal mais il s'agissait aussi souvent d'une bonne vieille matricielle située dans un local dédié. La touche « Imp. Écran » (ou « Print Screen ») de nos PC servait d'ailleurs initialement à ça et était en fait directement héritée de celle des 3270 ou 5250. Sur certaines versions de DOS, qui fonctionnait en mode texte quand une application n'était pas en fonctionnement, on voyait même le curseur balayer rapidement l'écran pour dire où il en était au fur et à mesure qu'il balançait ce qu'il voyait directement sur le port parallèle.

    Le Minitel proposait également une séquence pour envoyer le tout vers une mini-imprimante. Le terminal lui-même n'avait pas de touche dédiée mais la séquence pouvait être envoyée soit à l'initiative de l'imprimante elle-même (qui, elle, disposait d'une touche pour le faire), soit à celle du serveur.

  17. #17
    Membre émérite
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2010
    Messages : 852
    Points : 2 298
    Points
    2 298
    Par défaut
    Ah ça y est ! Je crois que j'ai compris. Merci Obisidian !

    Le fait de copier en surlignant dépend clairement du terminal. A voir s'il y a une API qui permet d'interagir avec, mais comme l'a dit Obsidian, ce n'est pas forcément accessible.

  18. #18
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 38
    Points : 15
    Points
    15
    Par défaut
    GPM, lui, permet de faire des copier-coller à la souris depuis une console virtuelle Linux (même en texte) et les xterm graphiques émulent également cette possibilité. Par contre, il s'agit d'une extension qui te permet de piloter ton terminal comme une application et qui ne fait pas du tout partie du standard original.
    Mon programme fonctionne entierement au clavier.

    Il reste peut-être éventuellement une option : certains terminaux sont faits pour « dumper » tout le contenu de l'écran vers un canal donné, ce afin de pouvoir imprimer la page.
    Je vais me renseigner de ce cote la.


    Sinon ecce compliquer de coder un terminal afin d'y integrer certaine fonctionnalite comme celle-ci?




    Question a part:
    Dans tout les cas, ça m'interesserais de recoder un terminal pour bien comprendre comment ils fonctionnent, vers ou chercher afin de pouvoir recoder un terminal? (pas un emulateur).

  19. #19
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 617
    Points
    23 617
    Par défaut
    Citation Envoyé par punkydev Voir le message
    Question a part:Dans tout les cas, ça m'interesserais de recoder un terminal pour bien comprendre comment ils fonctionnent, vers ou chercher afin de pouvoir recoder un terminal? (pas un emulateur).
    Comme on l'a dit au-dessus, un « terminal » est un équipement de communication qui vient prendre place au bout d'une ligne. C'est donc à la base un appareil physique. Si tu souhaites « coder » un terminal, ce sera forcément un émulateur. C'est aussi pour cela que les consoles de Linux s'appellent « consoles virtuelles ». Dès lors que tu as un écran et un clavier associé (ceux de ton PC) et qu'il te permettent de communiquer avec l'unité centrale, tu as une console. Si le système permet de faire semblant d'en avoir plusieurs (avec Alt-F1, F2, F3…), il s'agit de consoles virtuelles, mappées à tour de rôle sur les mêmes périphériques de saisie.

    Reste à savoir quel genre de terminal tu veux émuler. Si tu veux émuler un Minitel (qui est l'archétype du terminal), regarde du côté du Vidéotex. Si tu veux émuler un terminal DEC, regarde ECMA-48, puis les spécifications des VT-100, VT-220, ainsi que « man console_codes », etc. Ce n'est pas forcément très difficile mais c'est très long.

    Sinon ecce compliquer de coder un terminal afin d'y integrer certaine fonctionnalite comme celle-ci?
    Coder un terminal depuis zéro quand on en est encore à l'entrée et à la sortie standard, tu peux tabler sur un an en t'investissant.
    C'est moins difficile si tu pars des sources d'un terminal existant (ce qui est le plus intelligent à faire). Si travailles sous Linux, essaie « apt-get source » ou « yumdownloader --source » avec le nom du package correspondant à ton terminal et essaie de te plonger dedans.

  20. #20
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 38
    Points : 15
    Points
    15
    Par défaut
    Merci pour tous ces conseils
    Sa ne resout pas mon probleme de base mais grace a vous j'en apprend un peu plus sur les terminaux.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Lecture/affichage d'un fichier contenant des string
    Par Khaoula.85 dans le forum Visual C++
    Réponses: 4
    Dernier message: 02/12/2009, 11h13
  2. [PHP 5.3] [Mail] Envoi confirmation de lecture/affichage d'un mail
    Par cd090580 dans le forum Langage
    Réponses: 1
    Dernier message: 02/03/2009, 13h01
  3. [FIchier image Lab] lecture affichage ecriture
    Par airod dans le forum Calcul scientifique
    Réponses: 4
    Dernier message: 08/05/2006, 19h13
  4. Réponses: 4
    Dernier message: 12/10/2005, 21h22
  5. Réponses: 4
    Dernier message: 18/04/2004, 13h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo