[C con Clase] [ANSI C + NCURSES + FORM] Extracción de las cadenas almacenadas en los fields de un formulario

bameda bameda en gmail.com
Mar Jun 3 04:03:59 CEST 2008


Hola listeros,

Estoy programando un juego (mastermind) en C y para diseñar la
interfaz gráfica he utilizado ncurses + form (para los formularios).
Mi problema viene a la hora de leer desde los formularios: al hacer
field_buffer(...) y, por ejemplo, imprimirla por pantalla no me
muestra lo que "teoricamente" contenía el campo del formulario.
¿Alguien sabe como puedo solucionar mi problema?. A continuación os
adjunto el código de la función que maneja mi formulario.

Gracias de antemano.

SALUDOS

====== CODIGO =====

char * obtener_fichero_guardar(WINDOW * main){
	WINDOW *wformulario;
	FIELD *campo[2];
	FORM  *formulario;
	char * texto;
	int caracter, ro, co;

	int icol = 2 , ilin = total_lineas/2 - 3, lar =  total_columnas - 4, anch = 7;
	
	werase(main);
	curs_set(1);
	
	// Dibyjar ventana
	wformulario = subwin(main, anch, lar, ilin, icol);
	wbkgd(wformulario, COLOR_PAIR(COLORES_SECUNDARIOS));
	box(wformulario, 0 , 0);
	
	// Rellenar ventana
	mvwprintw(wformulario, 0 , (lar - 22)/2 ,"|  GUARDAR  PARTIDA  |");
	wattron(wformulario, COLOR_PAIR(COLORES_ACEPTAR));
	mvwprintw(wformulario, 4 , lar - 38," GUARDAR (ENTER) ");
	wattroff(wformulario, COLOR_PAIR(COLORES_ACEPTAR));
	wattron(wformulario, COLOR_PAIR(COLORES_CANCELAR));
	mvwprintw(wformulario, 4 , lar - 18," CANCELAR (ESC) ");
	wattroff(wformulario, COLOR_PAIR(COLORES_CANCELAR));
	
	// Crear formulario
	campo[1] = NULL;
	campo[0] = new_field(1, lar - 24, 1, 21, 0, 0);
	set_field_fore(campo[0], COLOR_PAIR(COLORES_CAMPO_FORMULARIO));
	set_field_back(campo[0], COLOR_PAIR(COLORES_CAMPO_FORMULARIO));
	field_opts_off(campo[0], O_AUTOSKIP);
	field_opts_off(campo[0], O_STATIC);
	field_opts_on(campo[0], O_EDIT);
	
	formulario = new_form(campo);
	scale_form(formulario, &ro, &co);
	set_form_win(formulario, wformulario);
	set_form_sub(formulario, derwin(wformulario, ro, co, 1, 1));
	post_form(formulario);	
	form_opts_on(formulario, O_BS_OVERLOAD);
	set_current_field(formulario, campo[0]);
    	
	mvwprintw(wformulario, 2 , 2 ,"Ruta de la partida");
		
	wrefresh(wformulario);
	
	do {
		caracter = getch();
		
		if(caracter == TECLA_ACEPTAR){
			form_driver(formulario, REQ_VALIDATION);
			texto = field_buffer(campo[0], 0);
		}
		if(caracter == TECLA_CANCELAR){
			texto = NULL;
		}
		else if (caracter == TECLA_BORRAR){
			form_driver(formulario, REQ_DEL_PREV);
		}
		else{
			form_driver(formulario, caracter);			
		}
	}while (caracter != TECLA_ACEPTAR && caracter != TECLA_CANCELAR);
	
	unpost_form(formulario);
	free_form(formulario);
	free_field(campo[0]);
	delwin(wformulario);
	
	werase(main);
	curs_set(0);
	
	return texto;
}

===================
-- 
____________________________________________
|
| David Barragán Merino
| E-mail: bameda en ARROBA@gmail.com
| Ingeniería Informática
| Universidad Carlos III Madrid
|____________________________________________


Más información sobre la lista de distribución Cconclase