
Terminfo es una biblioteca y base de datos que permite a los programas utilizar terminales de visualización de una manera independiente del dispositivo. Mary Ann Horton implementó la primera biblioteca terminfo en 1981-1982 como una mejora de termcap . [1] Las mejoras incluyen
- acceso más rápido a las descripciones de terminales almacenadas, [ cita requerida ]
- nombres más largos y comprensibles para las capacidades del terminal y
- Evaluación de expresión general para cadenas enviadas a la terminal.
Terminfo se incluyó con UNIX System V Release 2 y pronto se convirtió en la forma preferida de descripción de terminales en System V, en lugar de termcap (que BSD continuó usando). [2] Esto fue imitado en pcurses en 1982-1984 por Pavel Curtis , y estaba disponible en otras implementaciones de UNIX , adaptando o incorporando correcciones de Mary Horton. [3] Para obtener más información, consulte la publicación en el comp.sources.unixgrupo de noticias de diciembre de 1986. [4]
Una base de datos terminfo puede describir las capacidades de cientos de terminales de visualización diferentes. Esto permite que los programas externos puedan tener una salida de visualización basada en caracteres , independientemente del tipo de terminal.
Algunas configuraciones son:
- Número de líneas en la pantalla
- Modo monocromático; suprimir color
- Utilice una campana visible en lugar de un pitido
Modelo de datos
Las bases de datos Terminfo constan de una o más descripciones de terminales.
Índices
Cada descripción debe contener el nombre canónico del terminal. También puede contener uno o más alias para el nombre del terminal. El nombre canónico o los alias son las claves mediante las cuales la biblioteca realiza búsquedas en la base de datos terminfo.
Valores de datos
La descripción contiene una o más capacidades, que tienen nombres convencionales. Las capacidades se tipifican: boolean , numeric y string . La biblioteca terminfo tiene tipos predeterminados para cada nombre de capacidad. Comprueba los tipos de cada capacidad mediante la sintaxis:
- Las capacidades de cadena tienen un "=" entre el nombre de la capacidad y su valor,
- Las capacidades numéricas tienen un "#" entre el nombre de la capacidad y su valor, y
- Las capacidades booleanas no tienen valor asociado (siempre son verdaderas si se especifican).
Las aplicaciones que utilizan terminfo conocen los tipos de las capacidades respectivas y obtienen los valores de las capacidades de la base de datos terminfo mediante llamadas de biblioteca que retornan exitosamente solo cuando el nombre de la capacidad corresponde a una de las capacidades tipificadas predefinidas.
Al igual que termcap , algunas de las capacidades de cadenas representan secuencias de escape que pueden enviarse al host al presionar teclas especiales en el teclado. Otras capacidades representan cadenas que pueden enviarse por una aplicación a la terminal. En el último caso, la biblioteca terminfo funciona (al igual que una biblioteca termcap) para sustituir los parámetros de la aplicación en la cadena que se envía. Estas funciones proporcionan un analizador de expresiones basado en pila , que se utiliza principalmente para ayudar a minimizar la cantidad de caracteres enviados para secuencias de control que tienen parámetros opcionales como SGR (Select Graphic Rendition) . Por el contrario, las bibliotecas termcap proporcionan un conjunto limitado de operaciones que son útiles para la mayoría de las terminales.
Jerarquía
Las descripciones de Terminfo se pueden construir incluyendo el contenido de una descripción en otra, suprimiendo capacidades de la descripción incluida o anulando o agregando capacidades. Sin importar qué modelo de almacenamiento se use, la biblioteca Terminfo devuelve la descripción del terminal de la descripción solicitada, utilizando datos compilados con una herramienta independiente (por ejemplo, tic ).
Modelo de almacenamiento
Los datos de Terminfo se almacenan como un archivo binario , lo que hace que sea menos sencillo de modificar que termcap . La biblioteca terminfo puede recuperar los datos de los archivos donde están almacenados. Los datos en sí están organizados como tablas para las capacidades booleanas, numéricas y de cadena, respectivamente. Este es el esquema ideado por Mary Horton y, salvo algunas diferencias con respecto a los nombres disponibles, se utiliza en la mayoría de las implementaciones de terminfo. [5] X/Open no especifica el formato de la descripción de terminal compilada. De hecho, ni siquiera menciona las utilidades comunes tic o infocmp . [6] [7] Debido a que las entradas de terminfo compiladas no contienen metadatos que identifiquen los índices dentro de las tablas a las que se asigna cada capacidad, no son necesariamente compatibles entre implementaciones. Sin embargo, dado que la mayoría de las implementaciones utilizan la misma estructura de tabla general (incluidos los tamaños de los elementos de encabezado y de datos), es posible construir automáticamente bibliotecas terminfo personalizadas que puedan leer datos para una implementación determinada. Por ejemplo, se puede crear ncurses para que coincida con los datos de terminfo para varias otras implementaciones. [8]
Árbol de directorios
La implementación original (y más común) de la biblioteca terminfo recupera datos de una jerarquía de directorios . Al utilizar el primer carácter del nombre de la descripción del terminal como un componente de la ruta de acceso y el nombre de la descripción del terminal como el nombre del archivo a recuperar, la biblioteca terminfo generalmente supera la búsqueda en un archivo termcap grande. [ cita requerida ]
Base de datos en formato hash
Algunas implementaciones de terminfo almacenan la descripción del terminal en una base de datos hash (por ejemplo, algo como Berkeley DB versión 1.85). [9] [10] Estas almacenan dos tipos de registros: alias que apuntan a la entrada canónica y la entrada canónica en sí, que contiene los datos de las capacidades del terminal.
Limitaciones y extensiones
El Open Group documenta los límites para terminfo (valores mínimos garantizados), que se aplican únicamente al archivo fuente. [11] [12] Dos de ellos son de especial interés:
- Máximo de 14 caracteres para alias de terminal
- 32.767 máximo para cantidades numéricas
El límite de 14 caracteres se aplica a sistemas de archivos muy antiguos que no podían representar nombres de archivos más largos que ese número. Si bien esos sistemas de archivos generalmente están obsoletos, estos límites se documentaron a fines de la década de 1980 y no se revisaron desde entonces.
El límite de 32.767 corresponde a valores positivos en un valor de 16 bits con signo de complemento a dos . Una entrada de terminfo puede utilizar números negativos para representar valores cancelados o ausentes.
A diferencia de termcap , terminfo tiene una representación compilada y una fuente. Los límites para la representación compilada no están especificados. Sin embargo, la mayoría de las implementaciones indican en su documentación para tic (compilador de información de terminal) que las entradas compiladas no pueden superar los 4096 bytes de tamaño.
Véase también
Referencias
- ^ Horton, Mark. "El nuevo paquete Curses and Terminfo". Actas de la conferencia USENIX . Verano de 1982. Boston, MA: USENIX: 79–91.
- ^ "Comentarios de la lista de correo fa.info-terms sobre termcap/terminfo en 1985".
- ^ "Archivo SHAR de pcurses de 1986 que muestra el historial de cambios". Archivado desde el original el 27 de septiembre de 2007.
- ^ "pcurses publicación completa".
- ^ Thomas E. Dickey (17 de diciembre de 2006). "term - formato del archivo de término compilado".
- ^ "X/Open Curses, número 4, versión 2: páginas de referencia". The Open Group. 1997.
- ^ "Comandos y utilidades, número 5: páginas de referencia". The Open Group, 1997.
- ^ Thomas E. Dickey (12 de octubre de 2002). "Anuncio de ncurses 5.3".
- ^ Todd C. Miller (1999). "Módulo read_bsd_terminfo.c de OpenBSD".
- ^ Thomas E. Dickey (17 de diciembre de 2006). "Anunciamos ncurses 5.6".
- ^ La mayor parte de esto se hizo antes de que X/Open se fusionara con Open Software Foundation para formar The Open Group , por lo que hay muchas fuentes que dicen X/Open .
- ^ "Formato fuente de Terminfo (CURSES MEJORADOS): límites mínimos garantizados". The Open Group. 1997.
Enlaces externos
- Datos de terminfo actuales
- Página de recursos de Termcap/Terminfo en el sitio web de Eric S. Raymond
- hombre terminfo(5)