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

C Discussion :

Problème sur l'affichage d'un programme en terminal


Sujet :

C

  1. #1
    Membre du Club Avatar de Waether
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 44
    Points : 69
    Points
    69
    Par défaut Problème sur l'affichage d'un programme en terminal
    Bonjour,

    Je travaille en ce moment sur un programme qui pourrait "parler" à un autre et recevoir des messages de celui-ci.
    L'envoie de messages par signaux se fait très bien mais j'ai un problème quant à l'affichage.
    Je tiens à garder mon programme dans un terminal ce qui fait que quand on recoit un message pendant que l'on en écrit un c'est pas jolie à voir, le message se collant à la suite de ce que l'on est en train d'écrire.
    Je peux créer deux programmes, un receptionnant les messages et l'autre les envoyant mais ça veux dire qu'il faudrait deux terminals, ce qui n'est pas top.
    Y a t-il un moyen en executant un programme d'avoir un endroit où s'écrive les les messages reçus et un où on peux les écrire ?

    Le top serait d'avoir quelque hose comme cela qui s'affiche :
    Un message arrivant se placant à la suite des messages reçus et l'invité restant en bas du terminal.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    [heure][pseudo] - message
    [heure][pseudo] - message
     
    > partie où l'on écrit une chaîne de caractère qui sera traitée par le programme
    Merci d'avance.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2014
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2014
    Messages : 17
    Points : 18
    Points
    18
    Par défaut
    regarde du côté de ncruses

  3. #3
    Membre éclairé
    Inscrit en
    Juillet 2012
    Messages
    231
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 231
    Points : 870
    Points
    870
    Par défaut
    Citation Envoyé par Aurel-R
    regarde du côté de ncruses
    Je suppose que tu voulais dire ncurses.

  4. #4
    Membre du Club Avatar de Waether
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 44
    Points : 69
    Points
    69
    Par défaut
    Et moi qui pensais y échapper x)
    Je vais aller man de ce coté là et je reviens si j'ai d'autres questions merci !

  5. #5
    Membre du Club Avatar de Waether
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 44
    Points : 69
    Points
    69
    Par défaut
    Bon après un peu de boulot ça donne ce truc immonde dont je ne suis pas fier mais qui marche ^^

    Merci pour l'aide !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    #include "test.h"
    #include <sys/ioctl.h>
     
    int     hist = 0;
    int     invite;
    int     o = 0;
     
    int     main()
    {
      int   stop = 0;
      char  *buff;
      int   i = 0;
      char  ch = 0;
     
      struct winsize w;
      ioctl(0, TIOCGWINSZ, &w);
      invite = w.ws_row - 2;
     
      initscr();
     
      signal(10, simul_message);
     
      while (stop == 0)
        {
          if ((buff = malloc(sizeof(char) * BUFF_SIZE)) == NULL)
            return (merror(ERROR_MALLOC, ERROR_MALLOC_MSG));
          move(invite, 0);
          addstr("> ");
          while (i < BUFF_SIZE) {
            addstr(" ");
    	i++;
          }
          i = 0;
          move(invite, 2);
          refresh();
     
          while (ch != '\n') {
    	ch = getch();
    	buff[o] = ch;
    	o++;
    	refresh();
          }
          buff[o - 1] = '\0';
          ch = 0;
          o = 0;
          !my_strcmp(buff, "stop") ? stop = 1 : 0 ;
          /* do_com(buff) */
          free(buff);
        }
      endwin();
      return (EXIT_SUCCESS);
    }
     
    void    simul_message(int sig)
    {
      (void)sig;
     
      move(hist, 0);
      hist++;
      hist == (invite - 1) ? hist = (invite - 2) : 0 ;
      addstr("From [pseudo][date] NOPE\n");
      move(invite, 2 + o);
      refresh();
    }
    Le .h pour ceux que ça interesserait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #ifndef         TEST_H
    # define        TEST_H
     
    # include       <stdlib.h>
    # include       <stdio.h>
    # include       <signal.h>
    # include       <time.h>
    # include       <unistd.h>
    # include       <sys/types.h>
    # include       <curses.h>
    # include       "libmy.h"
     
    # define        BUFF_SIZE               2048
    # define        ERROR_MALLOC            -2
    # define        ERROR_MALLOC_MSG        "ERROR : A malloc failed\nExiting\n"
    # define	EXIT_SUCCESS		0
     
    void            put_message(int sig);
     
    #endif

  6. #6
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 125
    Points : 568
    Points
    568
    Par défaut
    Ce serai dommage de s’embêter avec ncurses pour ca ; si j'ai bien compris ton problème tu peux presque y échapper si t'as pas besoin de ligne entre la liste des messages et l'endroit où l'user écrit son message.

    Tu peux faire ceci pour effacer la ligne et insérer le message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    printf("\r                                                ");
    printf("\rTon message\n");

  7. #7
    Membre du Club Avatar de Waether
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2015
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2015
    Messages : 44
    Points : 69
    Points
    69
    Par défaut
    Yep j'aurais pu mais il fallait aussi séparer le term en deux avec une partie réception des messages et l'autre invité de commande, faire en sorte que le pointeur retourne bien où il était avant l'affichage du message et pouvoir afficher les messages pendant une entrée clavier sans en perdre l'info.
    Me reste dailleurs l'historique à gèrer je viens de le voir ^^'

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/02/2014, 10h24
  2. Problème sur un affichage dans les logs
    Par franck31 dans le forum Apache
    Réponses: 1
    Dernier message: 07/10/2012, 20h15
  3. Problème sur l'affichage d'un a4j:include
    Par spaw3003 dans le forum JSF
    Réponses: 1
    Dernier message: 12/09/2012, 18h48
  4. gros doute sur l'affichage d'un programme
    Par realthunderbolt dans le forum C++
    Réponses: 2
    Dernier message: 09/02/2007, 02h29

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