termcap (англ. terminal capability, свойства терминала) – библиотека и база данных, используемая на Unix-подобных операционных системах. Она позволяет программам использовать дисплей компьютерного терминала аппаратно-независимо, что очень упрощает процесс написания переносимых текстовых приложений. Билл Джой создал первую версию библиотеки termcap в 1978 году[1][2] для операционной системы BSD; в дальнейшем она была портирована под большинство Unix и Unix-подобных окружений. Известно, что на дизайн библиотеки termcap повлиял дизайн базы данных терминалов в более ранней Incompatible Timesharing System.[3] База данных termcap описывает возможности сотен различных терминалов. Это позволяет программам использовать текстовый вывод, не зависящий от типа терминала. Текстовые редакторы vi и emacs используют termcap. Другие программы можно найти в категории Termcap.
Вот примеры полей, содержащихся в базе данных:
Базы данных termcap состоят из одного или нескольких описаний терминалов.
Каждое описание должно содержать каноническое имя терминала. Оно может также содержать несколько псевдонимов. Эти названия используются как ключи для поиска в базе termcap.
Описание содержит одно или несколько свойств, которые имеют стандартные имена. Свойства могут иметь следующие типы: логический, числовой и строковый. Библиотека termcap не имеет предопределенного типа для каждого из свойств, поэтому тип определяется исходя из синтаксиса:
Приложения, использующие termcap, ожидают, что распространенные свойства будут иметь определенный тип, и получают нужные значения из базы данных termcap, используя библиотечные вызовы, которые успешно возвращают значение только при совпадении ожидаемого типа с найденным в базе.
Описания могут возвращаться из базы данных с изменениями - добавлением, удалением и переопределением свойств (например, при изменении размера экрана в эмуляторе терминала). Библиотека termcap создает описание терминала из запрошенного описания, включая, удаляя или переопределяя свойства, полученные на момент запроса.
Данные termcap хранятся в текстовом виде, удобном для изменения человеком. Библиотека termcap может запрашивать текст из файлов или переменных окружения.
Переменная окружения TERM содержит имя типа терминала.
Переменная окружения TERMCAP может содержать саму базу данных termcap. Чаще всего она используется для хранения единственного описания терминала, которое устанавливается эмулятором терминала для предоставления характеристик терминала командной оболочке и зависимым программам.
Переменная окружения TERMPATH поддерживается более поздними реализациями termcap и содержит путь к файлам termcap.
Оригинальная (и наиболее распространенная) реализация библиотеки termcap получает данные из плоского текстового файла. Поиск по большому файлу termcap, например, больше 500 Кб, может быть медленным. Для ускорения поиска может использоваться специальная утилита, например, reorder, которая помещает наиболее часто используемые пользователем записи в начало файла.
Реализации библиотеки termcap для BSD-4.4 хранят описания терминалов в хешированной базе данных (например, Berkeley DB версии 1.85). Хранятся два типа записей: псевдонимы, указывающие на канонические записи, и сами канонические записи. Содержимое записи termcap хранится в виде обычного текста.
Оригинальная реализация termcap создавалась для работы с использованием малого количества памяти:
Более поздние реализации termcap обычно допускают более длинное первое имя. Имена свойств, тем не менее, должны быть двухбуквенными во всех реализациях.
Функция tgetent, используемая для чтения описания терминала, принимает на вход адрес буфера, чей размер должен быть достаточно большим для считывания данных (1024 байта). Более поздние реализации termcap могут ослаблять это ограничение путём разрешения нулевого указателя в качестве параметра[4] либо скрывая часть, которая не помещается в буфер, например, через свойство ZZ в реализации NetBSD termcap.[5] Библиотека terminfo также эмулирует интерфейс termcap, хотя и не использует буфер фиксированного размера на самом деле.
Эмуляция интерфейса termcap в библиотеке terminfo позволяет хранить несколько записей без ограничения на их позицию. В некоторых поздних реализациях termcap такая возможность также может присутствовать, хотя, как правило, она остается недокументированной.[6]
Специальное свойство "hz" было добавлено для поддержки терминала Hazeltine 1500, в котором неудачно был выбран символ тильды ('~') в качестве начала управляющей последовательности.[7] Для поддержки данного терминала пришлось написать специальный код, который при выводе текста с тильдами делал специальную подстановку во избежание исполнения неожиданных управляющих команд.[8] Кроме того, маркеры атрибутов (например, начало и конец подчеркивания) занимали место на экране. Комментарии в исходном коде описывают эту особенность фразой "Hazeltine braindamage" ("повреждением мозга Hazeltine").[9] Поскольку Hazeltine 1500 был популярным терминалом в 1970-х,
было важно реализовать его поддержку в termcap.
termcap(5)
— страница справки man по форматам файлов FreeBSD (англ.)Данная страница на сайте WikiSort.ru содержит текст со страницы сайта "Википедия".
Если Вы хотите её отредактировать, то можете сделать это на странице редактирования в Википедии.
Если сделанные Вами правки не будут кем-нибудь удалены, то через несколько дней они появятся на сайте WikiSort.ru .