<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://gluc.unicauca.edu.co/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
		<id>http://gluc.unicauca.edu.co/index.php?action=history&amp;feed=atom&amp;title=Programaci%C3%B3n_con_Ncurses</id>
		<title>Programación con Ncurses - Historial de revisiones</title>
		<link rel="self" type="application/atom+xml" href="http://gluc.unicauca.edu.co/index.php?action=history&amp;feed=atom&amp;title=Programaci%C3%B3n_con_Ncurses"/>
		<link rel="alternate" type="text/html" href="http://gluc.unicauca.edu.co/index.php?title=Programaci%C3%B3n_con_Ncurses&amp;action=history"/>
		<updated>2026-08-03T00:06:06Z</updated>
		<subtitle>Historial de revisiones para esta página en el wiki</subtitle>
		<generator>MediaWiki 1.21.3</generator>

	<entry>
		<id>http://gluc.unicauca.edu.co/index.php?title=Programaci%C3%B3n_con_Ncurses&amp;diff=50&amp;oldid=prev</id>
		<title>LibardoPantoja: 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...»</title>
		<link rel="alternate" type="text/html" href="http://gluc.unicauca.edu.co/index.php?title=Programaci%C3%B3n_con_Ncurses&amp;diff=50&amp;oldid=prev"/>
				<updated>2013-12-04T10:02:18Z</updated>
		
		<summary type="html">&lt;p&gt;Página creada con «&amp;#039;&amp;#039;&amp;#039;Febrero 14 de 2.005.&amp;#039;&amp;#039;&amp;#039;  &amp;#039;&amp;#039;Por &lt;a href=&quot;/index.php/Usuario:Wpantoja&quot; title=&quot;Usuario:Wpantoja&quot;&gt;Wilson Libardo Pantoja Y&lt;/a&gt;.&amp;#039;&amp;#039;  Las ncurses son librerías que permiten trabajar funciones similares a las contenidas en...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;'''Febrero 14 de 2.005.'''&lt;br /&gt;
&lt;br /&gt;
''Por [[Usuario:Wpantoja|Wilson Libardo Pantoja Y]].''&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
&lt;br /&gt;
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.&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Un Programa sencillo: “Hola linux..”&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Utiliza un editor de texto cualquiera y copia (o digita) este programa y grábalo con el nombre programa.c:&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;ncurses.h&amp;gt;&lt;br /&gt;
 int main() {&lt;br /&gt;
        initscr();&lt;br /&gt;
        printw(&amp;quot;Hola linux!&amp;quot;);&lt;br /&gt;
        refresh();&lt;br /&gt;
        getch();&lt;br /&gt;
        endwin();&lt;br /&gt;
        return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Nótese que en este programa se ha incluído: #include &amp;lt;ncurses.h&amp;gt; , con lo cual se tiene acceso al uso de las siguientes funciones:&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* initscr(): se la utiliza para inicializar un ventana en modo ncurses.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* refresh(): sirve para refrescar la pantalla, todos los printw se muestran efectivamente al hacer refresh.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* 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.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
* endwin(): finaliza el modo de ncurses. Es importante colocar esta instrucción, de lo contrario el terminal queda desconfigurado, obligando a cerrar la consola.&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
Compilar el programa “Hola Linux”&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
gcc -lncurses programa.c&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Ejemplos&lt;br /&gt;
&lt;br /&gt;
A continuación he elaborado algunos ejemplos sencillos y prácticos que ilustran como trabajar curses.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 /*dibujar_cuadro.c&lt;br /&gt;
 ESTE PROGRAMA DIBUJA UN CUADRO. UTILIZA LA LIBRERIA curses.h QUE SUSTITUYE DE ALGUNA FORMAA LA      CONIO.H DEL VIEJO TURBO C&lt;br /&gt;
 COMPILE ESTE PROGRAMA CON LA INSTRUCCION:  gcc dibujar_cuadro.c -o ejecutable -lncurses*/&lt;br /&gt;
 #include &amp;lt;curses.h&amp;gt; //Incluiremos una librería a nuestro sistemas&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 void salir (void);  //Esta funcion hará que nuestro programa se cierre&lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
    int i;char c;&lt;br /&gt;
    initscr();   /*Esta función  inicializa  ncurses. Para todos los programas&lt;br /&gt;
                   debemos siempre inicializar  ncurses y luego finalizarla, como&lt;br /&gt;
                  veremos adelante. */&lt;br /&gt;
    c=95;//caracter ascci horizontal&lt;br /&gt;
    for(i=1;i&amp;lt;=120;i++)&lt;br /&gt;
    {&lt;br /&gt;
       //linea horizontal superior&lt;br /&gt;
       move(1,i);  //Aqui estamos moviendo el cursor para a linea 1 columna i.&lt;br /&gt;
       printw(&amp;quot;%c&amp;quot;,c);  //Imprimimos un texto en la posición establecida.&lt;br /&gt;
       //linea horizontal inferior&lt;br /&gt;
       move(40,i);  //Aqui estamos moviendo el cursor para a linea 40 columna i.&lt;br /&gt;
       printw(&amp;quot;%c&amp;quot;,c);  //Imprimimos un  texto en la posición establecida.&lt;br /&gt;
    }&lt;br /&gt;
    c=124 ; //caracter ascci vertical&lt;br /&gt;
    for(i=2;i&amp;lt;=40;i++)&lt;br /&gt;
    {&lt;br /&gt;
       //linea vertical izquierda&lt;br /&gt;
       move(i,1);&lt;br /&gt;
       printw(&amp;quot;%c&amp;quot;,c);&lt;br /&gt;
       //linea vertical derecha&lt;br /&gt;
       move(i,120);&lt;br /&gt;
       printw(&amp;quot;%c&amp;quot;,c);&lt;br /&gt;
    }&lt;br /&gt;
    refresh();&lt;br /&gt;
    //getch(); //si se desea hasta que se pulse una tecla&lt;br /&gt;
    sleep(3);//se detiene tres segundo&lt;br /&gt;
    salir();    // Salir del programa&lt;br /&gt;
 }&lt;br /&gt;
 /*********************************************************************/&lt;br /&gt;
 void salir()&lt;br /&gt;
 {&lt;br /&gt;
    endwin(); /*Siempre que finalizamos un programa con una biblioteca curses,&lt;br /&gt;
                     debemos ejecutar este comando.*/&lt;br /&gt;
    exit(0);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
A continuación un segundo ejemplo:&lt;br /&gt;
&lt;br /&gt;
 /*Este ejemplo captura las teclas y muestra el valor devuelto&lt;br /&gt;
 por cada uno de ellas. La tecla &amp;lt;Esc&amp;gt; parece más lenta pero eso&lt;br /&gt;
 es debido a que existe la necesidad de distinguir un caracter &amp;lt;Esc&amp;gt;&lt;br /&gt;
 aislado de una secuencia de caracteres que empiece por &amp;lt;Esc&amp;gt; y que&lt;br /&gt;
 podría venir de una tecla de función por ejemplo.*/&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdlib.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;curses.h&amp;gt;&lt;br /&gt;
 WINDOW *win; /** manejaremos una única ventana de pantalla completa **/&lt;br /&gt;
 /*********************************************************************/&lt;br /&gt;
 void IniVideo(){&lt;br /&gt;
        win=initscr(); /* Crea la ventana */&lt;br /&gt;
        clear();  /* Borra la pantalla entera bajo ncurses */&lt;br /&gt;
        refresh(); /* Actualiza la ventana con los cambios */&lt;br /&gt;
        noecho();&lt;br /&gt;
        cbreak();&lt;br /&gt;
        keypad(win, TRUE);&lt;br /&gt;
 }&lt;br /&gt;
 /*************************/&lt;br /&gt;
 Exit(){&lt;br /&gt;
        refresh();&lt;br /&gt;
        endwin();&lt;br /&gt;
        exit(1);&lt;br /&gt;
 }&lt;br /&gt;
 /*****************************************************************/&lt;br /&gt;
 main () {&lt;br /&gt;
        IniVideo();&lt;br /&gt;
        move(7, 30); /* x , y */&lt;br /&gt;
        printw(&amp;quot;Ctrl-C  para terminar&amp;quot;);&lt;br /&gt;
        for(;;){&lt;br /&gt;
                move(12, 30); /* x , y */&lt;br /&gt;
                printw(&amp;quot;%3d&amp;quot;, getch());&lt;br /&gt;
                refresh();&lt;br /&gt;
        }&lt;br /&gt;
        Exit();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Ahora un tercer ejemplo, bastante elegante porque utiliza colores.  &lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;curses.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 void sair (void);  //Esta función se utiliza al Salir del programa&lt;br /&gt;
 int main(void)&lt;br /&gt;
 {&lt;br /&gt;
    initscr();   /*Esta función inicializa los ncurses&lt;br /&gt;
    start_color(); //Esta función inicia los colores&lt;br /&gt;
 //Define pares de colores que serán definidos en el programa&lt;br /&gt;
 init_pair(1,COLOR_WHITE,COLOR_BLUE); //Texto(Blanco) | Fondo(Azul)&lt;br /&gt;
    init_pair(2,COLOR_BLUE,COLOR_WHITE); //Texto(Azul) | Fondo(Branco)&lt;br /&gt;
    init_pair(3,COLOR_RED,COLOR_WHITE);  //Texto(rojo) | Fundo(Blanco)&lt;br /&gt;
    bkgd(COLOR_PAIR(1));  /*Aqui define el color de fondo del programa&lt;br /&gt;
    attron(COLOR_PAIR(3));&lt;br /&gt;
    move(2,1);  //Aqui mueve el cursor a linea 2 columna 1.&lt;br /&gt;
    printw(&amp;quot;Olá mundo!!!&amp;quot;);  //Imprimimos el texto en la posición especificada &lt;br /&gt;
                               en la linea anterior.&lt;br /&gt;
    attroff(COLOR_PAIR(3));  /*Esta alterando el par de colores por omisión*/&lt;br /&gt;
    attron(COLOR_PAIR(2));&lt;br /&gt;
    move(3,1);&lt;br /&gt;
    printw(&amp;quot;Cualquier tecla para salir&amp;quot;); /*Imprime el texto en la posición&lt;br /&gt;
                                          especificada en la línea anterior */&lt;br /&gt;
    attroff(COLOR_PAIR(2));&lt;br /&gt;
    refresh();    //Actualiza la ventana&lt;br /&gt;
    getch();      //Espera que el usuario presione un tecla&lt;br /&gt;
    sair();    // llama a la función salir&lt;br /&gt;
 }&lt;br /&gt;
 /*********************************************************************/&lt;br /&gt;
 void salir()&lt;br /&gt;
 {&lt;br /&gt;
    endwin(); /*Siempre que finalizamos un programa con una biblioteca curses,&lt;br /&gt;
                     debemos ejecutar este comando.*/&lt;br /&gt;
    exit(0);&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
*http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=912&amp;amp;pagina=1&amp;amp;PHPSESSID=61c44ea8680ded9e8e83ba458073cd81&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
* http://lists.debian.org/debian-user-spanish/2001/04/msg00520.html=&amp;gt;Ejemplos sencillos y prácticos&lt;br /&gt;
* http://www.hackemate.com.ar/ezines/disidents/disidents004/disidents004/0X10.txt  =&amp;gt; Ejemplos con curses.&lt;br /&gt;
* http://sai.azc.uam.mx/apoyodidactico/ps/Apendice1/psape1.html=&amp;gt;Mucha teoría y algunos ejemplos&lt;br /&gt;
* http://ditec.um.es/~piernas/manpages-es/otros/tutorial-ncurses.html = &amp;gt; Para avanzados&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
''El contenido del material publicado por nuestros columnistas es responsabilidad de sus autores.''&lt;br /&gt;
&lt;br /&gt;
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í]]'''.&lt;br /&gt;
&lt;br /&gt;
[[Categoría:Artículos y Columnas]]&lt;/div&gt;</summary>
		<author><name>LibardoPantoja</name></author>	</entry>

	</feed>