se a qualcuno può interessare, sono riuscito a produrre un codice funzionante che stampa caratteri accentati ecc. usando ncursesw:
codice:
#include <cstdlib>
#include <string>
#include <ncursesw/ncurses.h>
#include <ncursesw/form.h>
using namespace std;
int main( int argc , char **argv ) {
WINDOW * main_window;
string test;
setlocale(LC_ALL, "it_IT.UTF-8");
if( ( main_window = initscr() ) == NULL ) {
fprintf( stderr , "impossibile inizializzare ncurses" );
return EXIT_FAILURE;
} else {
FIELD *fields[4];
FORM *my_form;
int ch;
int i;
cbreak();
noecho();
keypad( stdscr , TRUE );
fields[0] = new_field( 1 , 12 , 3 , 20 , 0 , 0 );
fields[1] = NULL;
set_field_back( fields[0] , A_UNDERLINE );
field_opts_off( fields[0] , O_AUTOSKIP );
set_field_buffer( fields[0] , 0 , test.c_str() );
curs_set( 2 );
my_form = new_form( fields );
post_form( my_form );
mvprintw( 3 , 10 , "test:" );
form_driver( my_form , REQ_FIRST_FIELD );
refresh();
while( ( ch = getch() ) != KEY_F(1) ) {
switch( ch ) {
case KEY_DOWN:
case KEY_RIGHT:
case '\t':
case '\n':
form_driver( my_form , REQ_NEXT_FIELD );
form_driver( my_form , REQ_END_LINE );
break;
case KEY_UP:
case KEY_LEFT:
form_driver( my_form , REQ_PREV_FIELD );
form_driver( my_form , REQ_END_LINE );
break;
case KEY_BACKSPACE:
form_driver( my_form , REQ_PREV_CHAR );
form_driver( my_form , REQ_DEL_CHAR );
break;
default:
form_driver( my_form , ch );
break;
}
}
form_driver( my_form , REQ_NEXT_FIELD );
form_driver( my_form , REQ_END_LINE );
i = 0;
test = field_buffer( fields[0] , 0 );
unpost_form( my_form );
free_form( my_form );
while( fields[i] ) {
free_field( fields[i++] );
}
mvprintw( 10 , 10 , "hai inserito: %s " , test.c_str() );
getch();
delwin( main_window );
endwin();
refresh();
return EXIT_SUCCESS;
}
}