Bonjour,

Je cale actuellement sur un petit problème lié à l'utilisation de la bibliothèque <ncurses.h>.

Pour simplifier l'explication, je travaille sur une implémentation de RSA qui nécessite à un moment la saisie d'un mot de passe que je ne veux pas afficher dans la console.

J'utilise pour cela une fonction enterPassword décrite ci-dessous

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
 
int enterPassword(mot08 * passwString)
{
	initscr(); 		/* Initialize the ncurses library	*/
	cbreak(); 		/* option to disable buffering	*/
	noecho(); 		/* disable the echoing of keystrokes	*/
	printw("Veuillez saisir la clé secrète Ksym à utiliser pour le chiffrement/déchiffrement de la clé privée\n(Max 8 caractères)\n");
	refresh(); 				/* update the screen, so the text is displayed	*/
	getnstr(passwString, 8); 		/* get text until newline or carriage return	*/		
 
	endwin(); 			/* close ncurses library	*/
 
 
	return 0;
}
J'utilise cette fonction à plusieurs reprises dans mon programme et elle fait ce que je lui demande.
Mon problème se situe plus précisément au niveau de l'affichage en sortie de cette fonction. En effet, dans le cas ou mon programme se poursuit avec une interaction avec l'utilisateur via la console (getc, scanf, ...), les différents messages gérés simplement par des printf ne sont pas affichés dans la console. Je me retrouve donc en "aveugle" même si les saisies demandées fonctionnent.

A la fin de mon programme seulement, la console me rends la main et les différents messages des appels à printf sont affichés...

J'ai donc l'impression qu'il y a un problème lors du basculement du mode curses au retour au mode console. J'ai essayé pas mal de choses comme forcer le retour au mode console avec les fonctions def_shell_mode et res_shell_mode qui sont normalement utilisés aux appels respectifs de initscr() et endwin() mais rien n'y fait.

Même si le code ne sera pas aussi logique, je peux éventuellement modifier mon programme principal afin d'appeler cette fonction après toute interaction avec l'utilisateur mais j'aimerai tout de même bien comprendre ce qu'il se passe.

Pour info, je développe sur Mac OS X avec gcc 4.2.1 et la version 5.7.1 de ncurses.

Edit: J'ai également fait le test obtenant le même résultat sur une Fedora 14

Merci d'avance pour votre éclairage.