Termcap - Termcap

Termapi.svg

Termcap ( возможность терминала ) - это программная библиотека и база данных, используемые на Unix-подобных компьютерах. Это позволяет программам использовать терминалы компьютеров с дисплеем независимо от устройства, что значительно упрощает процесс написания переносимых приложений в текстовом режиме . Билл Джой написал первую библиотеку termcap в 1978 году для операционной системы Berkeley Unix ; с тех пор он был перенесен в большинство Unix и Unix-подобных сред, даже в OS-9 . Сообщается, что на дизайн Джоя повлиял дизайн хранилища данных терминала в более ранней несовместимой системе разделения времени .

База данных termcap может описывать возможности сотен различных терминалов с дисплеем. Это позволяет программам выводить на дисплей символьный вывод независимо от типа терминала. Экранные текстовые редакторы, такие как vi и emacs, являются примерами программ, которые могут использовать termcap. Другие программы перечислены в категории Termcap .

Примеры того, что описывает база данных:

  • сколько столбцов шириной дисплей
  • какую строку отправить, чтобы переместить курсор в произвольную позицию (в том числе как кодировать номера строк и столбцов)
  • как пролистать экран вверх на одну или несколько строк
  • сколько заполнения необходимо для такой операции прокрутки.

Модель данных

Базы данных Termcap состоят из одного или нескольких описаний терминалов.

Индексы

Каждое описание должно содержать каноническое имя терминала. Он также может содержать один или несколько псевдонимов для имени терминала. Каноническое имя или псевдонимы - это ключи, по которым библиотека выполняет поиск в базе данных termcap.

Значения данных

Описание содержит одну или несколько возможностей, имеющих условные названия. Возможности бывают типизированными: логические , числовые и строковые . Библиотека termcap не имеет заранее определенного типа для каждого имени возможности. Он определяет типы каждой возможности по синтаксису:

  • строковые возможности имеют знак "=" между именем возможности и ее значением,
  • числовые возможности имеют знак "#" между именем возможности и ее значением, и
  • логические возможности не имеют связанного значения (они всегда истинны, если указаны).

Приложения, которые используют termcap, ожидают определенных типов для часто используемых возможностей и получают значения возможностей из базы данных termcap с помощью библиотечных вызовов, которые успешно возвращаются только тогда, когда содержимое базы данных соответствует предполагаемому типу.

Иерархия

Описания Termcap могут быть построены путем включения содержимого одного описания в другое, подавления возможностей из включенного описания или переопределения или добавления возможностей. Независимо от того, какая модель хранения используется, библиотека termcap создает описание терминала из запрошенного описания, включая, подавление или переопределение во время запроса.

Модель хранения

Данные Termcap хранятся в виде текста, что упрощает их изменение. Текст может быть получен библиотекой termcap из файлов или переменных среды.

Переменные среды

TERM переменная окружения содержит имя типа терминала.

TERMCAP переменная окружения может содержать базу данных Termcap. Чаще всего он используется для хранения одного описания termcap, установленного эмулятором терминала для предоставления характеристик терминала оболочке и зависимым программам.

TERMPATH переменная среды поддерживается более новыми реализациями Termcap и определяет путь поиска для Termcap файлов.

Плоский файл

Исходная (и наиболее распространенная) реализация библиотеки termcap извлекает данные из простого текстового файла. Поиск в большом файле termcap, например, 500 КБ, может быть медленным. Для повышения производительности используется такая утилита, как reorder, для размещения наиболее часто используемых записей в начале файла.

Хешированная база данных

Реализации termcap на основе BSD-4.4 хранят описание терминала в хешированной базе данных (например, что-то вроде Berkeley DB версии 1.85). В них хранятся два типа записей: псевдонимы, указывающие на каноническую запись, и саму каноническую запись. Текст записи termcap сохраняется буквально.

Ограничения и расширения

Первоначальная реализация termcap была разработана для использования небольшого объема памяти:

  • первое имя состоит из двух символов, чтобы соответствовать 16 битам
  • имена возможностей состоят из двух символов
  • описание ограничено 1023 символами.
  • может быть включена только одна запись termcap с ее определениями, и она должна быть в конце.

Новые реализации интерфейса termcap обычно не требуют двухсимвольного имени в начале записи.

Имена возможностей по-прежнему состоят из двух символов во всех реализациях.

Функция tgetent, используемая для чтения описания терминала, использует буфер, размер которого должен быть достаточно большим для данных, и предполагается, что он составляет 1024 символа. Новые реализации интерфейса termcap могут ослабить это ограничение, разрешив использовать нулевой указатель вместо фиксированного буфера или скрыть данные, которые не подходят, например, с помощью возможности ZZ в NetBSD termcap. Интерфейс библиотеки terminfo также имитирует интерфейс termcap и фактически не использует буфер фиксированного размера.

Эмуляция termcap библиотекой terminfo позволяет включать несколько других записей без ограничения позиции. Несколько других более новых реализаций библиотеки termcap также могут предоставить эту возможность, хотя она недостаточно хорошо документирована.

Устаревшие функции

Специальная возможность, «hz», была определена специально для поддержки терминала Hazeltine 1500 , который имел неудачную характеристику использования символа тильды ASCII ('~') в качестве средства представления управляющей последовательности. Чтобы поддерживать этот терминал, не только код, который использовал базу данных, должен был знать об использовании тильды для введения определенных управляющих последовательностей, но он также должен был знать, что любые тильды в отображаемом тексте заменяются другим печатаемым символом, поскольку тильда в тексте будет интерпретироваться терминалом как начало управляющей последовательности, что приведет к отсутствию текста и искажению экрана. Кроме того, маркеры атрибутов (например, начало и конец подчеркивания) сами занимают место на экране. Комментарии в исходном коде базы данных часто называют это «повреждением мозга Hazeltine». Поскольку Hazeltine 1500 был широко используемым терминалом в конце 1970-х годов, для приложений было важно иметь возможность справляться с его ограничениями.

Смотрите также

Рекомендации

Внешние ссылки