Son varios los interesados y en previsi�n de nuevas solicitudes
lo env�o a la lista. Adem�s son dos ejemplos muy cortitos.
El primer ejemplo captura las teclas y muestra el valor devuelto
por cada uno de ellas. La tecla <Esc> parece m�s lenta pero eso
es debido a que existe la necesidad de distinguir un caracter <Esc>
aislado de una secuencia de caracteres que empiece por <Esc> y que
podr�a venir de una tecla de funci�n por ejemplo.
=====8<------(cortar por aqui) -----------------------------------
/****************************************************************
Usa cbreak(3ncurses) keypad(3ncurses) *getch(3ncurses)
cc pruncurses.c -lncurses -o pruncurses
*****************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <curses.h>
WINDOW *win; /** manejaremos una �nica ventana de pantalla completa **/
/*********************************************************************/
void IniVideo(){
win=initscr(); /* Crea la ventana */
clear(); /* Borra la pantalla entera bajo ncurses */
refresh(); /* Actualiza la ventana con los cambios */
noecho();
cbreak();
keypad(win, TRUE);
}
/*************************/
Exit(){
refresh();
endwin();
exit(1);
}
/*****************************************************************/
main () {
IniVideo();
move(7, 30); /* x , y */
printw("Ctrl-C para terminar");
for(;;){
move(12, 30); /* x , y */
printw("%3d", getch());
refresh();
}
Exit();
}
=====8<------(cortar por aqui) -----------------------------------
El segundo ejemplo muestra en el centro de la pantalla una
serie de cadenas en varios colores distintos.
LINES tomara el valor del n�mero de l�neas de nuestro terminal
y COLS el n�mero de columnas.
Ninguno de los cambios en la ventana de ncurses se hace efectivo
hasta que no se use la funci�n refresh() momento en el que todos
se hacen visibles a la vez. Este dise�o se hace para no ralentizar
demasiado las aplicaciones que usen ncurses.
ncurses supondr� que nuestro terminal es el que figura en la variable
TERM. Un valor de TERM que no corresponda a nuestro terminal provocar�
seguramente un caos en la pantalla. En linux se usa TER='linux' derivado
y muy similar a 'vt100'.
=====8<------(cortar por aqui) -----------------------------------
/****************************************************************
*****************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <curses.h>
#define NORMAL 0
#define BRILLO 1
#define SEMIBRILLO 2
#define INTERMITENTE 5
#define INVERSO 7
#define NEGRO 30
#define ROJO 31
#define VERDE 32
#define MARRON 33
#define AZUL 34
#define ROSA 35
#define CELESTE 36
#define BLANCO 37
#define MAXLINEAS 15
#define MAXCAD 70
WINDOW *win; /** manejaremos una �nica ventana de pantalla completa **/
/*********************************************************************/
void IniVideo(){
win=initscr();
clear();
refresh();
noecho();
cbreak();
keypad(win, TRUE);
if(has_colors()) {
start_color();
init_pair(1, COLOR_YELLOW, COLOR_BLUE);
init_pair(2, COLOR_BLACK, COLOR_RED);
init_pair(3, COLOR_BLACK, COLOR_GREEN);
init_pair(4, COLOR_WHITE, COLOR_RED);
init_pair(5, COLOR_WHITE, COLOR_GREEN);
}
}
/*************************/
Exit(){
clear();
refresh();
endwin();
exit(1);
}
/**************************************/
void Disp(){
int posY, posX, i;
posY=(LINES/2)-((2+MAXLINEAS)/2);
posX=(COLS/2)-4;
for (i=0; i<MAXLINEAS; i++){
attrset(COLOR_PAIR(1+(i%5)));
move(posY+i, posX);
printw("%03d %03d %03d", i, i, i);
}
refresh();
}
/*****************************************************************/
main () {
IniVideo();
Disp();
getch();
Exit();
}
=====8<------(cortar por aqui) -----------------------------------
Un saludo
Antonio Castro
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+
/\ /\ Ciberdroide Inform�tica (Tienda de Linux)
\\W// <<< http://www.ciberdroide.com >>>
_|0 0|_
+-oOOO--(___o___)--OOOo----------------------------------------------------+
| . . . . U U . . . . Antonio Castro Snurmacher [EMAIL PROTECTED] |
| . . . . . . . . . . |
+()()()----------()()()----------------------------------------------------+
| *** 1.700 sitios clasificados por temas sobre Linux en ***Donde_Linux*** |
| <<< http://www.ciberdroide.com/misc/donde/dondelinux.html >>> |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+