Termcap

редактировать
Termapi.svg

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

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

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

  • сколько столбцов в ширину отображается
  • какую строку отправить, чтобы переместить курсор в произвольную позицию (включая то, как кодировать строку и столбец числа)
  • как прокрутить экран вверх на одну или несколько строк
  • сколько заполнения необходимо для такой операции прокрутки.
Содержание
  • 1 Модель данных
    • 1.1 Индексы
    • 1.2 Значения данных
    • 1.3 Иерархия
  • 2 Модель хранения
    • 2.1 Переменные среды
    • 2.2 Плоский файл
    • 2.3 Хэшированная база данных
  • 3 Ограничения и расширения
  • 4 Устаревшие функции
  • 5 См. Также
  • 6 Ссылки
  • 7 Внешние ссылки
Модель данных

Базы данных 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 и фактически не использует буфер фиксированного размера.

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

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

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

См. Также
Ссылки
Внешние ссылки
Последняя правка сделана 2021-06-10 14:02:14
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте