- Lo primero que debe hacer es utilizar el comando "man" para encontrar una descripcion de lo que se puede hacer con la biblioteca "curses" o "ncurses" (man curses o man ncurses). Luego debe compilar los programas y anotar los resultados obtenidos en su informe
- En este primer programa vamos a programar la terminal para desplegar el
primer mensaje utilizando la biblioteca 'curses'
#include <curses.h>
int main( int argc, char ** argv ) {
initscr(); /* Inicia la terminal para trabajar con curses */
addstr( "Hello world" ); /* Coloca el string para ser desplegado */
/* NO es desplegado en este momento */
refresh(); /* Despliega la pantalla que dibujamos antes */
endwin(); /* Finaliza el modo de programacion de la terminal */
}
- Este segundo programa logra que la terminal cambie su modo de procesamiento por líneas (cooked) a procesamiento por caracteres (raw), de manera que se reciben los caracteres conforme el usuario los va digitando. La primera parte del programa deja la terminal con los valores predefinidos y entra en un ciclo para leer caracteres hasta que se presione "ESC", pero como se trata de una terminal orientada a líneas es necesario presionar "ENTER" para obtener el resultado deseado. La segunda parte programa la terminal para que responda a los caracteres individuales (cbreak())
#include <curses.h>
int main( int argc, char ** argv ) {
char c;
initscr();
scrollok( stdscr, 1 ); /* Permite que la pantalla haga "scroll" */
addstr( "Presione ESC para continuar " );
refresh(); /* Despliega el mensaje en la pantalla */
nocbreak();
/* Esta parte del programa sigue el enfoque orientado a lineas */
for ( ; ( c = getch() ) != 27 ; ) {
addstr("Caracter es " );
addch( c );
addch( '\n' );
refresh();
}
cbreak(); /* Programa la terminal para trabajar con caracteres */
noecho(); /* No despliega los caracteres que se escriben */
addstr( "Presione ESC para finalizar " );
refresh();
for ( ; ( c = getch() ) != 27 ; ) {
addstr("Caracter es " );
addch( c );
addch( '\n' );
refresh();
}
echo();
nocbreak();
endwin();
}
- Pruebe cambiando algunas de las opciones de programacion de la terminal y anote los resultados en su reporte, por ejemplo, quite la opcion de "scrollok", agrege la opcion de "noecho()" en la primera parte
- Investigue que debe hacer para lograr capturar las teclas especiales como las de movimiento del cursor: flechas, pagina arriba, pagina abajo, etc. (intente con 'man curs_inopts')
- Investigue como hacer para obtener algunas de las funciones que se encuentran en el ambiente PC, tales como "clrscr()", "gotoxy(x,y)", la posibilidad de agregar colores y atributos a los caracteres, etc. Anote en su informe al menos la implantacion de la funcion "gotoxy(x,y)" que posiciona el cursor en la fila 'y' y columna 'x' de la ventana
- Este programa que sigue crea una ventana en la que podemos colocar la salida de nuestro programa. Revise todas las funciones que se utiliza y anote en su informe que tiene a cargo "newwin", "scrollok", "waddstr", "sleep".
#include <curses.h>
int main( int argc, char ** argv ) {
int i;
WINDOW * w;
char buff[20];
initscr();
cbreak();
noecho();
w = newwin( 10, 11, 5, 5 );
scrollok( w, 1 );
idlok( w, 1 );
for ( i = 0; i < 30; i++ ) {
sprintf( buff, "%d\n", i );
waddstr( w, buff );
wrefresh( w );
sleep(1);
}
delwin( w );
echo();
nocbreak();
endwin();
}
5) Este otro programa crea dos ventanas y escribe en ambas a la vez.
#include <curses.h>
int main( int argc, char ** argv ) {
int i;
WINDOW * w, * w1;
char buff[20];
initscr();
cbreak();
noecho();
w = newwin( 10, 11, 5, 5 );
w1 = newwin( 8, 11, 3, 26 );
scrollok( w, 1 );
idlok( w, 1 );
scrollok( w1, 1 );
idlok( w1, 1 );
for ( i = 0; i < 20; i++ ) {
sprintf( buff, "Vent 1 %d\n", i );
waddstr( w, buff );
wrefresh( w );
sprintf( buff, "Vent 2 %d\n", i );
waddstr( w1, buff );
wrefresh( w1 );
sleep(1);
}
delwin( w );
delwin( w1 );
echo();
nocbreak();
endwin();
}
- Investigue si es posible cambiar el tamaño de alguna de las ventanas, luego de que fueron declaras, es decir, si la ventana 'w1' puede cambiar de tamaño luego del 'for'. Modifique el código para mostrar como se hace, anote en su informe como resolvió el problema y agrege el código respectivo