
Termcap (" term inal cap ability") es una biblioteca de software y base de datos heredada utilizada en computadoras tipo Unix que permite que los programas utilicen terminales de computadora de pantalla de una manera independiente del dispositivo, lo que simplifica enormemente el proceso de escritura de aplicaciones portátiles en modo texto . Fue reemplazada por la base de datos terminfo utilizada por ncurses , tput y otros programas.
Bill Joy escribió la primera biblioteca termcap en 1978 [1] [2] para el sistema operativo Berkeley Unix ; desde entonces se ha adaptado a la mayoría de entornos Unix y similares, incluso OS-9 . [3] Se dice que el diseño de Joy estuvo influenciado por el diseño del almacén de datos de la terminal en el anterior Incompatible Timesharing System . [4] [ Se necesita una mejor fuente ] [ Dudoso – discutir ]
Una base de datos termcap puede describir las capacidades de cientos de terminales de visualización diferentes. Esto permite que los programas tengan una salida de visualización basada en caracteres , independientemente del tipo de terminal. Los editores de texto en pantalla, como vi y Emacs, son ejemplos de programas que pueden utilizar termcap. Otros programas se enumeran en la categoría Termcap .
Ejemplos de lo que describe la base de datos:
- ¿Cuántas columnas de ancho tiene la pantalla?
- Qué cadena enviar para mover el cursor a una posición arbitraria (incluido cómo codificar los números de fila y columna)
- Cómo desplazar la pantalla hacia arriba una o varias líneas
- ¿Cuánto relleno se necesita para tal operación de desplazamiento?
Modelo de datos
Las bases de datos Termcap 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 termcap.
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 termcap no tiene un tipo predeterminado para cada nombre de capacidad. Determina 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 termcap esperan tipos específicos para las capacidades comúnmente utilizadas y obtienen los valores de las capacidades de la base de datos termcap mediante llamadas a la biblioteca que retornan exitosamente solo cuando el contenido de la base de datos coincide con el tipo asumido.
Jerarquía
Las descripciones de Termcap 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 utilice, la biblioteca Termcap construye la descripción de terminal a partir de la descripción solicitada, incluyendo, suprimiendo o anulando en el momento de la solicitud.
Modelo de almacenamiento
Los datos de Termcap se almacenan como texto, lo que facilita su modificación. La biblioteca Termcap puede recuperar el texto de archivos o variables de entorno.
Variables de entorno
La variable de entorno TERM contiene el nombre del tipo de terminal.
La variable de entorno TERMCAP puede contener una base de datos de termcap. Se utiliza con mayor frecuencia para almacenar una única descripción de termcap, establecida por un emulador de terminal para proporcionar las características de la terminal al shell y a los programas dependientes.
La variable de entorno TERMPATH es compatible con las implementaciones más nuevas de termcap y define una ruta de búsqueda para los archivos termcap.
Archivo plano
La implementación original (y más común) de la biblioteca termcap recupera datos de un archivo de texto plano. La búsqueda en un archivo termcap grande, por ejemplo, de 500 kB, puede ser lenta. Para mejorar el rendimiento, se utiliza una utilidad como reorder para colocar las entradas más utilizadas cerca del comienzo del archivo.
Base de datos en formato hash
Las implementaciones de termcap basadas en 4.4BSD almacenan la descripción de la terminal en una base de datos con algoritmos hash (por ejemplo, algo como Berkeley DB versión 1.85). Estas almacenan dos tipos de registros: alias que apuntan a la entrada canónica y la entrada canónica en sí. El texto de la entrada de termcap se almacena de forma literal.
Limitaciones y ampliaciones
La implementación original de termcap fue diseñada para utilizar poca memoria:
- El primer nombre tiene dos caracteres para caber en 16 bits.
- Los nombres de capacidad son dos caracteres.
- Las descripciones están limitadas a 1023 caracteres.
- Sólo se puede incluir una entrada termcap con sus definiciones, y debe estar al final.
Las implementaciones más nuevas de la interfaz termcap generalmente no requieren el nombre de dos caracteres al comienzo de la entrada.
Los nombres de capacidad siguen siendo de dos caracteres en todas las implementaciones.
La función tgetent utilizada para leer la descripción de la terminal utiliza un búfer cuyo tamaño debe ser lo suficientemente grande para los datos, y se supone que es de 1024 caracteres. Las implementaciones más nuevas de la interfaz termcap pueden relajar esta restricción al permitir un puntero nulo en lugar del búfer fijo, [5] u ocultando los datos que no encajarían, por ejemplo, a través de la capacidad ZZ en termcap de NetBSD . [6] La interfaz de la biblioteca terminfo también emula la interfaz termcap, y en realidad no utiliza el búfer de tamaño fijo.
La emulación de termcap por parte de la biblioteca terminfo permite incluir múltiples entradas sin restringir la posición. Algunas otras implementaciones más recientes de la biblioteca termcap también pueden proporcionar esta capacidad, aunque no está bien documentada. [7]
Funciones obsoletas
Una capacidad especial, la capacidad "hz", fue definida específicamente para soportar la terminal Hazeltine 1500 , que tenía la desafortunada característica de usar el carácter tilde ASCII ('~') como introductor de secuencia de control. [8] [ discutir ] Para soportar esa terminal, no sólo el código que usaba la base de datos tenía que saber sobre el uso de la tilde para introducir ciertas secuencias de control, sino que también tenía que saber sustituir otro carácter imprimible por cualquier tilde en el texto mostrado, ya que una tilde en el texto sería interpretada por la terminal como el comienzo de una secuencia de control, resultando en texto faltante y distorsión de la pantalla. [9] Además, los marcadores de atributos (como el comienzo y el final del subrayado) ocupaban espacio en la pantalla. [ cita requerida ] Los comentarios en el código fuente de la base de datos a menudo se referían a esto como "daño cerebral de Hazeltine". [10] Dado que el Hazeltine 1500 era un terminal ampliamente utilizado a fines de la década de 1970, [ cita requerida ] era importante que las aplicaciones pudieran lidiar con sus limitaciones.
Véase también
- Secuencias de escape ANSI , intentos de unificar las muchas secuencias
- Terminal de computadora
- Curses (biblioteca de programación)
- Información termal
- Emulador de terminal
Referencias
- ^ Peter H. Salus, "La historia de Unix tiene tanto que ver con la colaboración como con la tecnología", Byte, octubre de 1994.
- ^ Kenneth CRC Arnold y Elan Amir, "Actualización de pantalla y optimización del movimiento del cursor: un paquete de biblioteca"
- ^ Joel Mathew Hegberg (noviembre de 1994). "Abordando Termcap, parte I". ¡ Respuestas OS-9/OSK! . Consultado el 26 de abril de 2021 .
- ^ Mark Crispin (7 de octubre de 1998). "Re: Comandos de la consola KL". Grupo de noticias : alt.sys.pdp10.
- ^ La biblioteca Termcap de GNU
- ^ Formato de archivo termcap de NetBSD
- ^ Discusión de termcap en vi
- ^ – Manual de formatos de archivos BSD
- ^ Stallman, Richard M. (1992). "The Termcap Library and Database, Second Edition". Gnu.org . Consultado el 17 de mayo de 2014 .
- ^ "termcap.src". Apple Computer . Consultado el 17 de mayo de 2014 .
Enlaces externos
- Datos actuales de termcap
- Página de recursos de Termcap/Terminfo en el sitio web de Eric S. Raymond