Terminología y conceptos de curses.

Las rutinas de curses trabajan en las pantallas, en las ventanas y en las subventanas. Una pantalla es el dispositivo (normalmente una pantalla de terminal, pero también podría ser una pantalla xterm) en el cual se escribe. Ocupa todo el visualizador disponible en dicho dispositivo. Por supuesto, si se trata de una ventana de terminal dentro de una ventana X, la pantalla es únicamente todas las posiciones de caracteres disponibles dentro de la ventana de terminal. Siempre existe como mínimo una ventana curses, stdscr, que tiene el mismo tamaño que la pantalla física. Puede crear otras ventajas más pequeñas que la pantalla. Las ventanas pueden superponerse las unas a las otras y puede tener muchas subventanas, pero cada subventana debe estar siempre dentro de su ventana padre.

La biblioteca ncurses mantiene dos estructuras de datos que actúan como un mapa para la pantalla de terminal: stdscr y curscr, la más importante de las dos estructuras de datos, se actualiza cuando las funciones curses generan salidas. La estructura de datos stdscr es la “pantalla estandar“. Actúa igual que stdout, la salida estándar, de la biblioteca stdio. En los programas curses es la ventana de salida predeterminada. La estructura curses es similar, pero contiene exactamente la visualización de la pantalla mostrada en el momento actual. Las salidas escritas a stdscr no aparecen en la pantalla hasta que el programa llama a refresh, cuando la biblioteca curses compara los contenidos de stdscr (como debería ser la pantalla) con la segunda estructura curscr (la apariencia actual de la pantalla). Después, curses usa las  diferencias entre ambas estructuras para actualizar la pantalla.

Algunos programas curses necesitan saber que curses mantiene una estructura stdscr, que algunas funciones curses necesitarán a modo de parámetro. Sin embargo, la estructura stdscr real depende de la implementación y nunca se debería acceder a ella directamente. Los programas curses no deberían tener que usar la estructura curscr.

Por lo tanto, el proceso para la salida de caracteres en un programa curses sería:

  1. Usar las funciones curses para actualizar una pantalla lógica.
  2. Pedir a curses que actualice la pantalla física con refresh.

La ventaja de un enfoque con dos niveles, además de que es un programa mucho más sencillo, es que la actualizaciones de la pantalla curses son muy diferentes. Además aunque no resulte tan importante en una pantalla curses son muy eficientes. Además, aunque no resulte tan importante en una pantalla de consola, puede generar una gran diferencia si está ejecutando un programa a través de un enlace de red lento.

Un programa curses realizará muchas llamadas a las funciones de salida de pantalla lógica, posiblemente moviendo el cursor alrededor de la pantalla para obtener la posición correcta para escribir el texto y para dibujar líneas y cuadros. En algún momento el usuario tendrá que ver todas sus salidas. Cuando ocurra esto, normalmente durante una llamada a refresh, curses calculará el modo óptimo para que la pantalla física se corresponda con la pantalla lógica.

Mediante el uso de las prestaciones de la terminal adecuadas y optimizando los movimientos del cursor, curses puede actualizar, normalmente, la pantalla con muchos menos caracteres de salida de los que hubiesen aparecido si se hubiesen realizado todas las escrituras en pantalla de manera inmediata.

El diseño de la pantalla lógica es una matriz de caracteres, distribuida en líneas y columnas, con la posición de pantalla (0,0) en la esquina superior izquierda, tal como se muestra en la figura.

PANTALLA_CURSESTodas las funciones curses usan coordenadas con el valor y (líneas) antes del valor x (columnas). Cada posición no contiene únicamente el carácter con la ubicación en pantalla, sino sus atributos. Los atributos que se pueden mostrar dependen de la capacidad de terminal física, pero normalmente son, como mínimo, la negrita y el subrayado. En las consolas Linux también se suele poder cambiar el vídeo y el color, como veremos más adelante en este capítulo.

Como la biblioteca curses necesita crear y destruir algunas estructuras de datos temporales, todos los programas curses deben inicializar la biblioteca antes de usarla y después deben permitir a curses restablecer la configuración tras su uso. Esto se consigue mediante un par de llamadas de funciones: initscr y endwin.

UN PROGRAMA HELLO WORLD CON curses

En este ejemplo, vamos a escribir un sencillo program a curses, screen1.c, para poner en pantalla y en la función main realice llamadas para inicializar y restablecer la biblioteca curses:

  1. Añada el archivo curses.h header, y en la función main realice llamadas para inicializar y restablecer la biblioteca curses:pantalla_hello_world
  2. Entre medio y en lugar de los tres puntos (...), añada el código para mover el cursor al punto (5,15) en la pantalla lógica, muestre “Hello World”, y actualice la pantalla actual. Por último, use la llamada sleep(2) para suspender el programa durante dos segundos de manera que pueda ver la salida antes de que el programa finalice:Cpantalla_2

Mientras el programa se ejecuta, verá “Hello World” en el cuadrante superior izquierdo o una pantalla en blanco, tal como vemos en la figura.

atras

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s