Archive for the ‘ncurses’ Category

Programando con ncurses

May 3, 2008

Las ncurses son librerías que ayudan a la programación en modo texto para Linux. Es decir, movimientos de cursores, colores, entradas de teclado, sustituyen a conio.h de borland c en otros sistemas, en linux uconio intenta emularla. ncurses es un mayor estado del arte.

Se debe incluir en los programas asi : #include en los programas.
Se compila con: gcc -lncurses fichero.c

En debian debemos instalar el paquete libncurses5-dev con apt-get

#include 

int main() {
initscr();
printw("Hola Mamon!!!");
refresh();
getch();
endwin();
return 0;
}

El popular “hola mundo”

initscr: es para entrar en modo ncurses
printw: es para imprimir en la “ventana”*. Es importante usar printw, scanfw, etc. y no usar printf, scanf, ya que tendríamos resultados no deseados.
refresh: aquí es donde realmente se refresca la pantalla. Podemos hacer varios printw y al final un solo refresh para actualizar la pantalla. Si no hacemos el refresh quizás no saldrá impreso por pantalla.
getch: espera una sola pulsación de una tecla. Nos devuelve el código ASCII de la tecla pulsada como un entero. Fijaros que no espera el “Enter” final de línea
endwin: terminamos el modo de ncurses. Si no lo hacemos, nos quedará el terminal medio desconfigurado. Para solucionarlo podríamos hacer reset desde la misma consola.

Para pedir cosas a un usuario con ncurses (entrada de teclado).

#include 
int main () {
char cadena[128];
initscr();

printw("Dime tu nombre\n");
scanw("%s",cadena);
printw("Te llamas: %s\n",cadena);

refresh();
getch();
endwin();
return(0);
}


Limpiado de pantalla:

        erase();

Posicion del cursor en lugar especifico de pantalla:

        move (10,2);
printw("contraseña: ")

Igualmente podríamos haber usado:

        mvprintw(10,2,"contraseña: ");

Un printw con colores:

        if (has_colors()) {
start_color();

init_pair(1,COLOR_RED,COLOR_YELLOW);
attron(COLOR_PAIR(1));
printw("Escribe la contraseña: ");
attroff(COLOR_PAIR(1));
}

has_colors: devuelve 0 o 1 si el terminal tiene soporte para colores o no.
start_color: inicia el modo de colores. Si no lo hacemos no veremos los colores.
init_pair: asociamos el “par” 1 el color rojo para el texto y el amarillo para el fondo (los colores disponibles con BLACK, RED, GREEN, YELLOW, BLUE, MAGENTA, CYAN, WHITE).
attron: y ponemos los colores de forma activa. También podríamos hacer:

        attron(COLOR_PAIR(1) | A_UNDERLINE);

Y así lo tendríamos subrallado. Tenemos disponibles A_NORMAL,A_BLINK, A_BOLD, etc. (man attron para ver más opciones)

Es más, si queremos se pueden personalizar los colores en sí mediante la función init_color (man init_color).


Mas informacion:

ncurses Programming HOWT

FAQ de ncurses

manual de ncurses

Escribir Programas con ncurses (en castellano)

En asterisk por ejemplo necesitamos de estas librerias para poder compilar, incluso las necesitamos si queremos compilar el kernel de linux.


Follow

Get every new post delivered to your Inbox.