Sei sulla pagina 1di 4

[TUTORIAL] Programacion con curses (PDCurses/ncurses)

Curses es una libreria de c ontroles para desarrollar aplic ac iones que quieran usar el paradigma TUI (T extual User Interfac e, extrapolac ion de los GUI ya c onoc idos para terminales). Los objetivos primarios de esa serie de tutoriales es la de introduc ir en la programac ion c on c urses tanto para W indows, usando PDCurses, c omo para Linux, usando nc urses. Para W indows usaremos c omo IDE el Dev-C++ de Bloodshell disponible aqui y para Linux usaremos Ec lipse c on la extension c dt (ec lipse-c dt). En c uanto a c ompiladores para W indows usaremos mingw (instalado c on Dev-C++) y para Linux gc c . Instalando PDCurses PDCurses puede ser instalado desc argando PDCurses aqui en instalandolo a c ontinuac ion o si usais Dev-C++ c omo IDE podeis hac erlo yendo a Herramientas->Busc ar Ac tualiz ac iones, selec c ionando en el dialogo que aparec e el servidor devpaks.org, pulsar en Chec k for Updates y marc ando PDCurses en la lista. Una vez hec ho esto pulsar en Download selec ted y seguir las intruc c iones. Instalando ncurses Dependiendo de la distro que useis el paquete se llamara c urses, nc urses o algo parec ido. Dado que hay muc has distros es preferible que c onsulteis en los foros de vuestra distro para ver c omo proc eder a la instalac ion. Tambien podeis desc argar PDCurses e instalarlo en vuestro Linux desde aqui (son los fuentes en tar.gz ). Introduccion a X/Open Curses c urses presenta una interfaz C que ac umula dec enas de func iones para poder c rear interfac es grac os textuales que se puedan manejar tanto c on el tec lado c omo c on el raton. Contiene un puado de estruc turas que usaremos para la c reac ion de ventanas de texto y otras c osas c uyo entendimiento es de vital importanc ia para sobrevivir c on exito a la experienc ia de programar para c urses. Las mas signic ativas de ellas , por ahora, son las siguientes: SCREEN Representa el dispositivo sic o de salida de la terminal. WINDOW Representaria una ventana en c urses a traves de un array bidimensional de n*m c arac teres. Cada ventana esta asoc iada a un S c reen dado y existe una ventana por defec to, stdscr, c on el tamao de la ventana de terminal. TERMINAL Representa el dispositivo logic o de entrada/salida por el c ual va a interac tuar el usuario c on nuestro programa. T odo programa c urses debe realiz ar una llamada a initscr() antes de usar c ualquier c arac teristic a de c urses y debera naliz ar llamando a endwin() que restaurara el estado de la terminal a c omo estaba antes de ejec utar nuestro programa.

Cdigo GeS Hi (C):#inc lude <stdlib.h> #inc lude <c urses.h> int main() { initsrc (); /* ..... */ endwin(); } A la hora de c ompilar un programa c urses hay que pasarle al c ompilador la opc ion -lcurses y asegurarse de que las libreria c urses estan en el path de busqueda del c ompilador. Primeros pasos Hemos visto, por enc ima, los c omponentes mas importantes de c urses. Asi que vamos a profundiz ar un poc o y vamos a ver c omo hac er c osas mas... "interesantes" que aprender teoria. Nuestro primero ejemplo, c omo no podia ser otro, sera el tipic o "Hola c urses".

Cdigo GeS Hi (C):#inc lude <stdlib.h> #inc lude <c type.h> #inc lude <c urses.h> int main () { int c ; c har *s; initsc r (); noec ho (); /* 1 */ c urs_set(0); /* 2 */ mvaddstr (LINES /2,((COLS /2)-6),"Hola Curses"); /* 3 */ mvaddstr (LINES -1, COLS -25, "Pulsar F10 para salir."); while ( (c =getc h()) != KEY_F(10)) /* 4 */ { } erase (); /* 5 */ refresh (); endwin (); return 0; } S e ha marc ado el c odigo c on c omentarios en forma de numeros para relac ionar las explic ac iones c on el c odigo. En este ejemplo usamos (por omision) la terminal por defec to y la ventana por defec to (stdsc r). En 1 y 2 llamamos a esas func iones para dec irle a c urses que no muestre por pantalla lo tec leado

y volver invisible el c ursor. mvaddstr es una de las func iones que mas usaremos a lo largo de este tutorial. S u mision es

En 1 y 2 llamamos a esas func iones para dec irle a c urses que no muestre por pantalla lo tec leado

y volver invisible el c ursor. mvaddstr es una de las func iones que mas usaremos a lo largo de este tutorial. S u mision es esc ribir una c adena a la ventana ac tual o a la ventana espec ic ada (a traves de una sobrec arga de los parametros de la func ion) en una determinada posic ion x,y. Usamos ademas las variables LINES y COLS (que representan las lineas y c olumnas de la terminal en uso) para situar mas o menos en el c entro de la pantalla el mensaje "Hola c urses". Despues entramos en un buc le para c ontrolar la pulsac ion de una tec la a traves de getch (que a diferenc ia de su homologa de la libreria estandar no almac ena las pulsac iones en un buer hasta pulsar enter sino que proc esa c ada pulsac ion de tec la segun van llegando) c on F10, a traves de la func ion KEY_F(n). Finalmente y c uando el usuario ha pulsado F10 se limpia la ventana c on erase() y se refresc a el c ontenido c on refresh() para pasar a naliz ar nuestro uso de c urses c on endwin(). Entrada de datos T enemos una serie de func iones a nuestra disposic ion para solic itar datos al usuario a traves de una terminal pero la mas c omun es mvgetstr, la c ual rec ibe c omo parametros la la y la c olumna donde se realiz ara la entrada y un puntero a un c har[] para almac enar el resultado.

Cdigo #inc lude <stdlib.h> #inc lude <c type.h> #inc lude <c urses.h> int main () { int c ; /* 1 */ c har* nombre[25]; c har* telefono[10]; /* 2 */ initsc r (); keypad (stdsc r, TRUE); c urs_set(1);

mvaddstr (2,5,"Nombre : "); mvaddstr (3,5,"T elefono : " ); /* 3 */ mvgetstr(2,16,nombre); mvgetstr(3,16,telefono); /* 4 */ mvaddstr (LINES -3,5,"El nombre tec leado es : "); addstr(nombre); mvaddstr (LINES -2,5,"El telefono tec leado es : "); addstr(telefono);

mvaddstr (LINES -1, COLS -25, "Pulsar F10 para terminar.");

mvaddstr (LINES -2,5,"El telefono tec leado es : "); addstr(telefono);

mvaddstr (LINES -1, COLS -25, "Pulsar F10 para terminar."); while ( (c =getc h()) != KEY_F(10)) { } /* 5 */ erase (); refresh (); endwin (); return 0; } En 1 denimos dos variables del tipo c har*[] para almac enar nuestros datos c on suc iente espac io para c ontener nuestros datos. Despues pasamos a inic ializ ar c urses c on initsc r. Notese que en este c aso dejamos que el c ursor sea visible de modo que el usuario pueda saber que c ampo esta insertando. En 3 es donde pedimos los datos c on la menc ionada func ion. S e hac e paso a paso. Primero ejec uta la primera llamada a mvgetstr y despues la segunda. Para dar validez a la entrada esta ha de naliz ar c on la pulsac ion de la tec la enter (en c ontraposic ion c on mvgetc h que no la nec esita). Una vez solic itados los datos pasamos a mostrar los resultados en 4. Aqui introduc imos la func ion addstr que muestra el c ontenido de la varible pasada c omo parametro a c ontinuac ion de lo ultimo que hayamos sac ado por pantalla, o lo que es lo mismo c ontinua la impresion el la posic ion del c ursor. Por ultimo limpiamos la ventana y liberamos los rec ursos de c urses para salir del programa una vez que se pulse la tec la F10. La serie de func iones basada en getstr realiz an su func ion llamando de forma c onsec utiva a getc h hasta que se detec ta un n de linea, enter o EOF. A la c adena resultante se le aade al nal un c arac ter nulo (\0).

Continuara.... S alu2. blac kraider. Proximas Entregas : Con los aspec tos basic os de c urses dominados (y c reedme no es nec esario muc ho mas) veremos los aspec tos que rodean a una aplic ac ion c on multiples ventanas (y no es lo que c reeis, eh) desarrollando una pequea Agenda para vuestro uso personal.

Potrebbero piacerti anche