#1 Le 30/12/2007, à 19:20
- MéPHiST
[resolu]placer un caractere sur l'ecran (position précise)
Bonjour,
Je suis en train de developper un petit programme en C sous linux (gcc4.2) et je cherche à placer un caractere à une position presice de mon 'ecran'/terminal.
est-ce que vous savez comment faire?
(j'ai essayé des gotxy, des mvprintw, des locatxy mais tout ceci est pour windows )
merci d'avance!
Dernière modification par MéPHiST (Le 31/12/2007, à 12:07)
Le monde ne sera pas détruit par ceux qui font le mal, mais par ceux qui les regardent sans rien faire. A.Einstein
Hors ligne
#2 Le 30/12/2007, à 20:01
- Link31
Re : [resolu]placer un caractere sur l'ecran (position précise)
On fait normalement ça avec la bibliothèque ncurses. Mais une implémentation du conio.h de windows (en utilisant ncurses) existe aussi.
Hors ligne
#3 Le 31/12/2007, à 10:42
- all
Re : [resolu]placer un caractere sur l'ecran (position précise)
petite technique à l'ancienne :
en ligne de commande la commande tput cup x y permet de placer le curseur à l'emplacement x y du terminal. (ou y x, j'avoue que je ne me rapelle plus trop)
Faire une redirection de cette commande dans un fichier.
tput cup 15 10 > temp
Aller voir à la main dans le fichier la syntaxe du "blob" correspondant
vim temp
^[[16;11H
par contre là faut voir quand meme avec votre shell, parceque là je fais ça sous cygwin donc c'est un peu bizarre.
puis dans le code c, faire simplement un printf avec les bons parametres
int x = 5;
int y =6;
printf("\[%d,%dH",x,y);
je garantie pas que le code fonctionne, ça fait longtemps que j'ai plus fait de C.
Cordialement,
all
Hors ligne
#4 Le 31/12/2007, à 11:10
- Sysko le prospecteur
Re : [resolu]placer un caractere sur l'ecran (position précise)
Sinon je confirme qu'avec la libncurses ( ncurses.h ) tu devrais pouvoir le faire , je viens de devel une appli entière en utilisant que ncurses et les bibli rattaché ( menu.h / form.h et tout leur amis ^^)
donc pour mettre une chaine sur le terminal , c'est bel et bien mvprintw ( int y , int x , char* ma_chaine )
d'ailleurs c'est la qu'il faut faire attention c'est que toute les fonctions de ncurses prennent d'abord la valeur y et ensuite la valeur x et non le contraire comme on a l'habitude en mathematique
voila sinon si tu recontre d'autre problème avec ncurses n'hésite je viens de passer deux semaines non stop dessus donc j'ai eu le temps de faire toute les erreurs possibles et imaginables
cordialelement
sinon all de toute mainère ncurses ne fait que utiliser les codes d'échappement comme
^[[16;11H
il permet juste à l'utilisateur de ne pas avoir à les connaitres
Projet tatoeba : projet collaboratif visant à créer un corpus de phrases d'exemples traduites dans le plus de langues possibles
Hors ligne
#5 Le 31/12/2007, à 11:27
- all
Re : [resolu]placer un caractere sur l'ecran (position précise)
Surement, je me suis jamais penché sur ncurses,
l'avantage que peux avoir mon hint, c'est que si il veut simplement placer un ou deux truc à l'écran, ça lui évite une library. Je sais qu'il faut eviter de réinventer la roue mais bon, parfois, pour des petits trucs simple...
Hors ligne
#6 Le 31/12/2007, à 11:28
- MéPHiST
Re : [resolu]placer un caractere sur l'ecran (position précise)
Merci pour votre aide mais j'avoue que je n'ai pas tout saisi...
mon niveau en C en reste au µc donc passer à un language aussi evolué...
j'ai essayé d'utiliser un mwprintf comme ceci:
mvprintw ( 5 , 8 , "test" );
mais mon pc me retourne:
essai.c: In function «main":
essai.c:65: attention : passing argument 3 of «mvprintw" makes pointer from integer without a cast
/tmp/cc2nTlhM.o: In function `main':
essai.c:(.text+0x1ff): undefined reference to `mvprintw'
essai.c:(.text+0x246): undefined reference to `mvprintw'
collect2: ld a retourné 1 code d'état d'exécution
(en fait concretement je dois faire un programme qui reçoit/emet des données depuis des sondes rs232 et places (après traitement) ces information dans une case de l'ecran reservé à la sonde (près de 70) donc si vous voyez comment faire...)
merci beaucoup de votre aide!
Le monde ne sera pas détruit par ceux qui font le mal, mais par ceux qui les regardent sans rien faire. A.Einstein
Hors ligne
#7 Le 31/12/2007, à 11:37
- Sysko le prospecteur
Re : [resolu]placer un caractere sur l'ecran (position précise)
hum tu iniatilise correctement ncurses dans ton main
int main()
{
// on initialise ncurses
initscr();
cbreak();
noecho();
keypad(stdscr, TRUE);
// ton code
// on ferme ncurses
endwin();
return 0 ;
}
et est ce que link bien avec la bibliothèque ncurses car si tu a une "undefined reference to" c'est surement que tu a oublié de linker , après je ne sais pas si tu passe par un makefile ou un ide
Dernière modification par Sysko le prospecteur (Le 31/12/2007, à 11:39)
Projet tatoeba : projet collaboratif visant à créer un corpus de phrases d'exemples traduites dans le plus de langues possibles
Hors ligne
#8 Le 31/12/2007, à 11:48
- MéPHiST
Re : [resolu]placer un caractere sur l'ecran (position précise)
euh....
là je dois avouer que je suis completement perdu!
pour compiler je fais tout simplement gcc nom_du_fichier.c -o nom_du_prog.
maintenant j'ai encore plus d'erreurs!
mephisto@mephisto:~/Desktop/prog temperature$ gcc essai.c -o essai
essai.c: In function «main":
essai.c:74: attention : passing argument 3 of «mvprintw" makes pointer from integer without a cast
/tmp/ccLuUZlt.o: In function `main':
essai.c:(.text+0x44): undefined reference to `initscr'
essai.c:(.text+0x49): undefined reference to `cbreak'
essai.c:(.text+0x4e): undefined reference to `noecho'
essai.c:(.text+0x53): undefined reference to `stdscr'
essai.c:(.text+0x63): undefined reference to `keypad'
essai.c:(.text+0x223): undefined reference to `mvprintw'
essai.c:(.text+0x26a): undefined reference to `mvprintw'
essai.c:(.text+0x28a): undefined reference to `endwin'
collect2: ld a retourné 1 code d'état d'exécution
Le monde ne sera pas détruit par ceux qui font le mal, mais par ceux qui les regardent sans rien faire. A.Einstein
Hors ligne
#9 Le 31/12/2007, à 11:49
- Sysko le prospecteur
Re : [resolu]placer un caractere sur l'ecran (position précise)
ok c'est normal
rajoute -lncurses à la ligne de gcc
sa devrait aller mieux
car en fait rajouter -lncurses va dire au compilateur de lier aussi avec la bibli lincurses.so
sinon sans cela ton compilateur ne connaitra pas toutes les fonctions marqué en undefinied, vu qu'elle sont defini dans libncurses
Dernière modification par Sysko le prospecteur (Le 31/12/2007, à 11:51)
Projet tatoeba : projet collaboratif visant à créer un corpus de phrases d'exemples traduites dans le plus de langues possibles
Hors ligne
#10 Le 31/12/2007, à 11:56
- MéPHiST
Re : [resolu]placer un caractere sur l'ecran (position précise)
La compilation se passe beaucoup mieu (pas d'erreurs de compilation) mais rien n'apparait à l'ecran...
mephisto@mephisto:~/Desktop/prog temperature$ ./essai
mephisto@mephisto:~/Desktop/prog temperature$
pourtant j'ai bien mvprintw ( 5 , 8 , "test" ); dans mon code...
Le monde ne sera pas détruit par ceux qui font le mal, mais par ceux qui les regardent sans rien faire. A.Einstein
Hors ligne
#11 Le 31/12/2007, à 12:00
- Sysko le prospecteur
Re : [resolu]placer un caractere sur l'ecran (position précise)
ah oui erreur frequente aussi
en fait ce qu'il se passe ,
pour ncurses ecrit sur des WINDOW , et pas directement sur l'écran de ton terminal ,cela te permet de gerer plusieurs ecran , des sous ecrans etc.... ce qui permet de faire des truc plutot beau et ordonné meme pour du terminal
mais ne t'inquiète pas si aucune fenetre n'es spécifié ncurses écrira sur la fentre standard ,
sauf qu'ensuite cette fenetre il faut l'afficher
et on l'affiche avec la fonction
refresh() ;
et on rajoute un
getch () ;
pour laisser le programme tourné jusqu'à ce qu'on appui sur une touche
voili à présent cela devrait être mieux
Dernière modification par Sysko le prospecteur (Le 31/12/2007, à 12:02)
Projet tatoeba : projet collaboratif visant à créer un corpus de phrases d'exemples traduites dans le plus de langues possibles
Hors ligne
#12 Le 31/12/2007, à 12:06
- MéPHiST
Re : [resolu]placer un caractere sur l'ecran (position précise)
magnifique!
résumé pour quelqu'un d'autre qui aurait le même pbm:
pour afficher à un endroit precis de l'ecran dans une 'fenetre' voici le code:
#include <ncurses.h>
main (void)
{
//initialisations ncurses
initscr();
cbreak();
noecho();
keypad(stdscr, TRUE);
//code
mvprintw ( 5 , 8 , "test" );
//rafraichisement de la fenetre
refresh() ;
//fermeture ncurses
endwin();
}
ne pas oublier de mettre -lncurses dans la ligne de gcc (pour la compilation)
ex: nom_fichier_c -o nom_du_prog -lncurses
Merci beaucoup pour votre patience Sysko le prospecteur!
Dernière modification par MéPHiST (Le 31/12/2007, à 12:09)
Le monde ne sera pas détruit par ceux qui font le mal, mais par ceux qui les regardent sans rien faire. A.Einstein
Hors ligne
#13 Le 31/12/2007, à 12:12
- Sysko le prospecteur
Re : [resolu]placer un caractere sur l'ecran (position précise)
de rien on es toujours content de pouvoir faire profiter aux autres ce que l'on sait
ensuite si tu veux faire des truc un peu plus beau n'hesite pas à demander , c'es avec joie que je te dirais comment faire
Projet tatoeba : projet collaboratif visant à créer un corpus de phrases d'exemples traduites dans le plus de langues possibles
Hors ligne