http://gluc.unicauca.edu.co/index.php?title=Programaci%C3%B3n_con_Ncurses&feed=atom&action=historyProgramación con Ncurses - Historial de revisiones2024-03-28T08:59:16ZHistorial de revisiones para esta página en el wikiMediaWiki 1.21.3http://gluc.unicauca.edu.co/index.php?title=Programaci%C3%B3n_con_Ncurses&diff=50&oldid=prevLibardoPantoja: Página creada con «'''Febrero 14 de 2.005.''' ''Por Wilson Libardo Pantoja Y.'' Las ncurses son librerías que permiten trabajar funciones similares a las contenidas en...»2013-12-04T10:02:18Z<p>Página creada con «'''Febrero 14 de 2.005.''' ''Por <a href="/index.php/Usuario:Wpantoja" title="Usuario:Wpantoja">Wilson Libardo Pantoja Y</a>.'' Las ncurses son librerías que permiten trabajar funciones similares a las contenidas en...»</p>
<p><b>Página nueva</b></p><div>'''Febrero 14 de 2.005.'''<br />
<br />
''Por [[Usuario:Wpantoja|Wilson Libardo Pantoja Y]].''<br />
<br />
Las ncurses son librerías que permiten trabajar funciones similares a las contenidas en la librería conio.h del viejo turboC de Borland, entre las cuales están: gotoxy(), clrscr(), textcolor(), getch(), etc. Con ncurses se pueden hacer aplicaciones gráficas elegantes en modo texto y de forma muy fácil.<br />
<br />
En Internet he encontrado mucha documentación sobre ncurses, sin embargo, para un principiante, la información es tan profunda que resulta complicado su entendimiento. Mi intención es brindar un documento sencillo e introductorio sobre esta librería.<br />
<br />
<br />
Un Programa sencillo: “Hola linux..”<br />
<br />
<br />
Utiliza un editor de texto cualquiera y copia (o digita) este programa y grábalo con el nombre programa.c:<br />
<br />
<br />
#include <ncurses.h><br />
int main() {<br />
initscr();<br />
printw("Hola linux!");<br />
refresh();<br />
getch();<br />
endwin();<br />
return 0;<br />
}<br />
<br />
<br />
Nótese que en este programa se ha incluído: #include <ncurses.h> , con lo cual se tiene acceso al uso de las siguientes funciones:<br />
<br />
<br />
* initscr(): se la utiliza para inicializar un ventana en modo ncurses.<br />
<br />
<br />
* printw(): es para imprimir texto en la ventana. Es importante usar printw y scanfw en lugar de printf, scanf, porque se tendrían salidas erróneas debido a los buffers intermedios de linux.<br />
<br />
<br />
<br />
* refresh(): sirve para refrescar la pantalla, todos los printw se muestran efectivamente al hacer refresh.<br />
<br />
<br />
<br />
* getch(): espera una sola pulsación de una sola tecla (sin tener que presionar “Enter”), devolviendo el código ASCII de la tecla pulsada como un entero.<br />
<br />
<br />
<br />
* endwin(): finaliza el modo de ncurses. Es importante colocar esta instrucción, de lo contrario el terminal queda desconfigurado, obligando a cerrar la consola.<br />
<br />
<br />
<br />
Compilar el programa “Hola Linux”<br />
<br />
Para compilar desde consola este programa se debe utilizar el parámetro –lncurses, que indica al compilador que el programa está utilizando curses; el comando completo es:<br />
<br />
<br />
<br />
gcc -lncurses programa.c<br />
<br />
<br />
Ejemplos<br />
<br />
A continuación he elaborado algunos ejemplos sencillos y prácticos que ilustran como trabajar curses.<br />
<br />
<br />
/*dibujar_cuadro.c<br />
ESTE PROGRAMA DIBUJA UN CUADRO. UTILIZA LA LIBRERIA curses.h QUE SUSTITUYE DE ALGUNA FORMAA LA CONIO.H DEL VIEJO TURBO C<br />
COMPILE ESTE PROGRAMA CON LA INSTRUCCION: gcc dibujar_cuadro.c -o ejecutable -lncurses*/<br />
#include <curses.h> //Incluiremos una librería a nuestro sistemas<br />
#include <stdio.h><br />
void salir (void); //Esta funcion hará que nuestro programa se cierre<br />
int main(void)<br />
{<br />
int i;char c;<br />
initscr(); /*Esta función inicializa ncurses. Para todos los programas<br />
debemos siempre inicializar ncurses y luego finalizarla, como<br />
veremos adelante. */<br />
c=95;//caracter ascci horizontal<br />
for(i=1;i<=120;i++)<br />
{<br />
//linea horizontal superior<br />
move(1,i); //Aqui estamos moviendo el cursor para a linea 1 columna i.<br />
printw("%c",c); //Imprimimos un texto en la posición establecida.<br />
//linea horizontal inferior<br />
move(40,i); //Aqui estamos moviendo el cursor para a linea 40 columna i.<br />
printw("%c",c); //Imprimimos un texto en la posición establecida.<br />
}<br />
c=124 ; //caracter ascci vertical<br />
for(i=2;i<=40;i++)<br />
{<br />
//linea vertical izquierda<br />
move(i,1);<br />
printw("%c",c);<br />
//linea vertical derecha<br />
move(i,120);<br />
printw("%c",c);<br />
}<br />
refresh();<br />
//getch(); //si se desea hasta que se pulse una tecla<br />
sleep(3);//se detiene tres segundo<br />
salir(); // Salir del programa<br />
}<br />
/*********************************************************************/<br />
void salir()<br />
{<br />
endwin(); /*Siempre que finalizamos un programa con una biblioteca curses,<br />
debemos ejecutar este comando.*/<br />
exit(0);<br />
}<br />
<br />
A continuación un segundo ejemplo:<br />
<br />
/*Este ejemplo captura las teclas y muestra el valor devuelto<br />
por cada uno de ellas. La tecla <Esc> parece más lenta pero eso<br />
es debido a que existe la necesidad de distinguir un caracter <Esc><br />
aislado de una secuencia de caracteres que empiece por <Esc> y que<br />
podría venir de una tecla de función por ejemplo.*/<br />
#include <stdio.h><br />
#include <stdlib.h><br />
#include <curses.h><br />
WINDOW *win; /** manejaremos una única ventana de pantalla completa **/<br />
/*********************************************************************/<br />
void IniVideo(){<br />
win=initscr(); /* Crea la ventana */<br />
clear(); /* Borra la pantalla entera bajo ncurses */<br />
refresh(); /* Actualiza la ventana con los cambios */<br />
noecho();<br />
cbreak();<br />
keypad(win, TRUE);<br />
}<br />
/*************************/<br />
Exit(){<br />
refresh();<br />
endwin();<br />
exit(1);<br />
}<br />
/*****************************************************************/<br />
main () {<br />
IniVideo();<br />
move(7, 30); /* x , y */<br />
printw("Ctrl-C para terminar");<br />
for(;;){<br />
move(12, 30); /* x , y */<br />
printw("%3d", getch());<br />
refresh();<br />
}<br />
Exit();<br />
}<br />
<br />
Ahora un tercer ejemplo, bastante elegante porque utiliza colores. <br />
<br />
<br />
#include <curses.h><br />
#include <stdio.h><br />
void sair (void); //Esta función se utiliza al Salir del programa<br />
int main(void)<br />
{<br />
initscr(); /*Esta función inicializa los ncurses<br />
start_color(); //Esta función inicia los colores<br />
//Define pares de colores que serán definidos en el programa<br />
init_pair(1,COLOR_WHITE,COLOR_BLUE); //Texto(Blanco) | Fondo(Azul)<br />
init_pair(2,COLOR_BLUE,COLOR_WHITE); //Texto(Azul) | Fondo(Branco)<br />
init_pair(3,COLOR_RED,COLOR_WHITE); //Texto(rojo) | Fundo(Blanco)<br />
bkgd(COLOR_PAIR(1)); /*Aqui define el color de fondo del programa<br />
attron(COLOR_PAIR(3));<br />
move(2,1); //Aqui mueve el cursor a linea 2 columna 1.<br />
printw("Olá mundo!!!"); //Imprimimos el texto en la posición especificada <br />
en la linea anterior.<br />
attroff(COLOR_PAIR(3)); /*Esta alterando el par de colores por omisión*/<br />
attron(COLOR_PAIR(2));<br />
move(3,1);<br />
printw("Cualquier tecla para salir"); /*Imprime el texto en la posición<br />
especificada en la línea anterior */<br />
attroff(COLOR_PAIR(2));<br />
refresh(); //Actualiza la ventana<br />
getch(); //Espera que el usuario presione un tecla<br />
sair(); // llama a la función salir<br />
}<br />
/*********************************************************************/<br />
void salir()<br />
{<br />
endwin(); /*Siempre que finalizamos un programa con una biblioteca curses,<br />
debemos ejecutar este comando.*/<br />
exit(0);<br />
}<br />
<br />
Y si aparte de esto todavía quieres trabajar con la conio.h que funcionaba con el Turbo C de DOS, recomiendo esta página en la cual se implementa dicha función a partir de ncurses:<br />
<br />
*http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=912&pagina=1&PHPSESSID=61c44ea8680ded9e8e83ba458073cd81<br />
<br />
<br />
Con lo descrito en este artículo entenderás lo básico para programar con curses en Linux. Ahora, si ya quieres profundizar más recomiendo visitar las siguientes páginas:<br />
<br />
* http://lists.debian.org/debian-user-spanish/2001/04/msg00520.html=>Ejemplos sencillos y prácticos<br />
* http://www.hackemate.com.ar/ezines/disidents/disidents004/disidents004/0X10.txt => Ejemplos con curses.<br />
* http://sai.azc.uam.mx/apoyodidactico/ps/Apendice1/psape1.html=>Mucha teoría y algunos ejemplos<br />
* http://ditec.um.es/~piernas/manpages-es/otros/tutorial-ncurses.html = > Para avanzados<br />
<br />
<br />
----<br />
''El contenido del material publicado por nuestros columnistas es responsabilidad de sus autores.''<br />
<br />
Para saber más sobre la programación y naturaleza de nuestros artículos, columnas y pistas técnicas, haga clic '''[[Artículos y Columnas|aquí]]'''.<br />
<br />
[[Categoría:Artículos y Columnas]]</div>LibardoPantoja