stringtranslate.com

Срок действия

Termcap (" term inal cap able") — это устаревшая программная библиотека и база данных , используемая на компьютерах типа Unix , которая позволяет программам использовать терминалы дисплея компьютера в аппаратно-независимой манере, что значительно упрощает процесс написания приложений для переносимого текстового режима . Она была заменена базой данных terminfo, используемой ncurses , tput и другими программами.

Билл Джой написал первую библиотеку termcap в 1978 году [1] [2] для операционной системы Berkeley Unix ; с тех пор она была портирована на большинство Unix и Unix-подобных сред, даже на OS-9 . [3] Сообщается, что на дизайн Джоя повлиял дизайн хранилища терминальных данных в более ранней Incompatible Timesharing System . [4] [ нужен лучший источник ] [ сомнительнообсудить ]

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

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

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

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

Индексы

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

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

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

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

Иерархия

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

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

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

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

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

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

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

Плоский файл

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

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

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

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

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

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

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

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

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

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

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

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

Ссылки

  1. Питер Х. Салус, «История Unix — это не только технология, но и сотрудничество», Byte, октябрь 1994 г.
  2. ^ Кеннет CRC Арнольд и Элан Амир, «Обновление экрана и оптимизация движения курсора: библиотечный пакет»
  3. ^ Джоэл Мэтью Хегберг (ноябрь 1994 г.). «Tackling Termcap, часть I». OS-9/OSK Answers! . Получено 26 апреля 2021 г. .
  4. Марк Криспин (7 октября 1998 г.). "Re: Команды консоли KL". Группа новостей : alt.sys.pdp10.
  5. ^ Библиотека GNU Termcap
  6. ^ Формат файла NetBSD termcap
  7. ^ Обсуждение termcap в vi
  8. ^ termcap(5)  –  Руководство по форматам файлов BSD
  9. ^ Столлман, Ричард М. (1992). "Библиотека и база данных Termcap, второе издание". Gnu.org . Получено 17 мая 2014 г. .
  10. ^ "termcap.src". Apple Computer . Получено 17 мая 2014 г. .

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