curses es una biblioteca de control de terminal para sistemas tipo Unix , que permite la construcción de aplicaciones de interfaz de usuario de texto (TUI).
El nombre es un juego de palabras con el término " optimización del cursor ". Es una biblioteca de funciones que administran la visualización de una aplicación en terminales de celdas de caracteres (por ejemplo, VT100 ). [2]
ncurses es el reemplazo aprobado para el clásico curses de 4.4BSD .
Con curses, los programadores pueden escribir aplicaciones basadas en texto sin tener que escribir directamente para ningún tipo de terminal específico. La biblioteca curses del sistema en ejecución envía los caracteres de control correctos según el tipo de terminal. Proporciona una abstracción de una o más ventanas que se asignan a la pantalla del terminal. Cada ventana está representada por una matriz de caracteres. El programador configura la apariencia deseada de cada ventana y luego le indica al paquete curses que actualice la pantalla. La biblioteca determina un conjunto mínimo de cambios necesarios para actualizar la pantalla y luego los ejecuta utilizando las capacidades específicas del terminal y las secuencias de control.
En resumen, esto significa que el programador crea una matriz de caracteres de cómo debería verse la pantalla y deja que curses se encargue del trabajo.
La API de curses se describe en varios lugares. [3] La mayoría de las implementaciones de curses utilizan una base de datos que puede describir las capacidades de miles de terminales diferentes. Hay algunas implementaciones, como PDCurses, que utilizan controladores de dispositivos especializados en lugar de una base de datos de terminales. La mayoría de las implementaciones utilizan terminfo ; algunas utilizan termcap . Curses tiene la ventaja de la retroportabilidad a terminales de celdas de caracteres y la simplicidad. Para una aplicación que no requiere gráficos de mapa de bits o múltiples fuentes, una implementación de interfaz que utilice curses normalmente será mucho más sencilla y rápida que una que utilice un kit de herramientas X.
La primera biblioteca de curses fue escrita por Ken Arnold y publicada originalmente con BSD UNIX, donde se usó para varios juegos, especialmente Rogue . [4] [5] [6] Se realizaron algunas mejoras a la biblioteca BSD en la década de 1990 como curses "4.4BSD", por ejemplo, para proporcionar más de un tipo de resaltado de video. [ cita requerida ] Sin embargo, estos no se usan ampliamente.
El nombre "curses" es un juego de palabras con la palabra optimización del cursor . [7] A veces se afirma incorrectamente que curses fue utilizado por el editor vi . De hecho, el código en curses que optimiza el movimiento del cursor de un lugar a otro en la pantalla fue tomado de vi, que era anterior a curses. [5]
Según Goodheart, la implementación original de curses por parte de Ken Arnold comenzó reutilizando funciones de la biblioteca termcap y añadiendo más. [8] Unos años más tarde, Mary Ann Horton , que había mantenido las fuentes de vi y termcap en Berkeley , fue a AT&T Corporation e hizo una versión diferente utilizando terminfo , que pasó a formar parte de UNIX System III y UNIX System V. Debido a las restricciones de licencia de este último, las versiones BSD y AT&T de la biblioteca se desarrollaron de forma independiente. Además de la mejora de termcap/terminfo, se realizaron otras mejoras en la versión de AT&T:
El desarrollo de curses de AT&T parece haberse detenido a mediados de los años 1990 cuando se definió X/Open Curses. [9] En 1995, el mantenedor de BSD, Keith Bostic , desaprobó oficialmente la biblioteca curses a favor de ncurses . [10] [ dudoso – discutir ] El desarrollo de ncurses y PDCurses continúa. Se sigue manteniendo una versión de BSD curses en el sistema operativo NetBSD (soporte amplio de caracteres, migración de termcap a terminfo, etc.).
Diferentes líneas de desarrollo comenzaron imitando los curses de AT&T, a partir de al menos tres implementaciones: pcurses de Pavel Curtis (iniciado en 1982), PDCurses (curses de dominio público) de Mark Hessling para apoyar a su editor THE (iniciado en 1987) así como Rexx/Curses, [11] y PC curses (versión 1.4 y anteriores de Bjorn Larsson basada en la biblioteca de Pavel Curtis antes de 1990). [12] [13] [ discutir ]
ncurses (new curses) "se originó como pcurses ... y fue reeditado como ncurses 1.8.1 a fines de 1993". [14] ncurses es la implementación más conocida de curses y ha motivado el desarrollo posterior de otras variantes, como BSD curses en el proyecto NetBSD . [15] [16]
Aunque la biblioteca ncurses fue desarrollada inicialmente bajo Linux, OpenBSD, FreeBSD y NetBSD, ha sido portada a muchos otros sistemas UNIX ANSI/POSIX, principalmente por Thomas Dickey. PDCurses, aunque no es idéntico a ncurses, utiliza las mismas llamadas de función y opera de la misma manera que ncurses, excepto que PDCurses apunta a dispositivos diferentes, por ejemplo, ventanas de consola para DOS , Win32 , OS/2 , así como X11 . La portabilidad entre los dos no es difícil. Por ejemplo, el juego roguelike ADOM fue escrito para Linux y ncurses, y luego portado a DOS y PDCurses. [17] [18]
Curses está diseñado para facilitar una funcionalidad similar a la de una interfaz gráfica de usuario en un dispositivo de solo texto, como una PC que se ejecuta en modo consola, una terminal ANSI de hardware, un cliente Telnet o SSH o similar. El software basado en Curses es un software cuya interfaz de usuario se implementa a través de la biblioteca curses o una biblioteca compatible (como ncurses ).
Los programas basados en Curses suelen tener una interfaz de usuario que se asemeja a una interfaz gráfica de usuario tradicional, que incluye " widgets " como cuadros de texto y listas desplazables, en lugar de la interfaz de línea de comandos (CLI) que se encuentra más comúnmente en dispositivos de solo texto. Esto puede hacerlos más fáciles de usar que un programa basado en CLI, al mismo tiempo que pueden ejecutarse en dispositivos de solo texto. El software basado en Curses también puede tener una huella de recursos más liviana y operar en una gama más amplia de sistemas (tanto en términos de hardware como de software) que sus contrapartes basadas en GUI. Esto incluye máquinas antiguas anteriores a 1990 junto con sistemas integrados modernos que usan pantallas de solo texto.
Curses se asocia más comúnmente con sistemas operativos tipo Unix , aunque también existen implementaciones para Microsoft Windows .
{{cite journal}}
: Requiere citar revista |journal=
( ayuda )en PC curses (versión 1.4) escrito por Bjorn Larsson.[ enlace muerto permanente ]
PCcurses es una adaptación/reescritura del paquete [paquete] de Pavel Curtis.