Encore merci, c’est vraiment bien foutu mais j’ai quelque probleme.
[s]Le prompt en bas doit toujours garder le curseur sur lui quoi qu’il arrive et ma fonction affichage_message appelée par un thread prend le curseur pour lui (normal).
Y a t’il un moyen d’avoir 2 curseurs ? pour quand je tape un message en bas je ne sois pas coupé par l’autre thread.[/s]
Je poste si ca peut interesser quelqu’un.
[code]#include <ncurses.h> /* ncurses.h includes stdio.h */
#include <string.h>
#include <stdlib.h>
#include <pthread.h>
/* gcc -lncurses -lpthread ncurses.c */
//row l
//col h
void disp_prompt();
void disp_line();
void ajouter_message(char* mess);
void init_tab_message(int r,int c);
void * afficher_message(void *arg);
int nb_message = 0;
char **tab_message;
int col;
int row;
int main(){
/-------------------- INIT ---------------------------/
char prompt[]="?: "; /* message du prompt /
char str[80];
int temp_row,temp_col,i;
initscr(); / demarre curses mode */
getmaxyx(stdscr,temp_row,temp_col);
row=temp_row;
col=temp_col;
init_tab_message(row-2,col-16);
/*-------------------- MESSAGE ---------------------------*/
int n;
pthread_t tid;
if(( n = pthread_create(&tid, NULL, afficher_message, NULL))!=0){
perror ("pthread_create");
exit(1);
}
/*---------------------INTERFACE-----------------------------*/
disp_line(row,col);
/*---------------------PROMPT-----------------------------*/
while(1){
disp_prompt(row,col);
getstr(str);
ajouter_message(str);
}
/*---------------------LISTE UTILISATEUR---------------------*/
//getch();
//endwin();
return 0;
}
void disp_prompt(){
char prompt[]="?: "; /* message devant le prompt /
move(row-1,0);
clrtoeol();
printw("%s",prompt); / affiche prompt */
}
void disp_line(){
move(row -2 ,0);
hline(ACS_HLINE,col);
move(0,col-16);
vline(ACS_VLINE,row-2);
}
void ajouter_message(char* mess){
mvprintw(0, col - 15, “mess:%d row:%d”,nb_message,row);
if(nb_message<row-3){
strcpy(tab_message[nb_message],mess);
nb_message++;
}else{
/* on decale tout /
int i;
for(i=0;i<nb_message-1;i++){
strcpy(tab_message[i],tab_message[i+1]);
}
strcpy(tab_message[nb_message-1],mess);
}
}
void init_tab_message(int r,int c){
int i;
tab_message = malloc(rsizeof(char*));
for(i=0;i<=r;i++){
tab_message[i] = malloc(c*sizeof(char));
}
}
void * afficher_message(void *arg){
int i;
WINDOW *messwin;
messwin = newwin(row-2, col-16 , 0, 0);
char clear[] = " ";
while(1){
wrefresh(messwin);
for(i=0;i<nb_message;i++){
mvwprintw(messwin,i, 0,clear);
mvwprintw(messwin,i, 0,tab_message[i]);
}
}
}[/code]