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 >>>            |
+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+--+


Responder a