Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску
Termapi.svg

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

База данных 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 могут ослабить это ограничение, разрешив использование нулевого указателя вместо фиксированного буфера [5] или скрывая данные, которые не подходят, например, с помощью возможности ZZ в NetBSD termcap. [6] Интерфейс библиотеки terminfo также имитирует интерфейс termcap и фактически не использует буфер фиксированного размера.

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

Устаревшие функции [ править ]

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

См. Также [ править ]

  • Компьютерные терминалы
  • Проклятия (библиотека программирования)
  • Terminfo
  • Управляющие последовательности ANSI , попытки объединить множество последовательностей

Ссылки [ править ]

  1. ^ Питер Х. Салус, «История Unix - это столько же о сотрудничестве, сколько и о технологиях», Byte, октябрь 1994.
  2. ^ Кеннет CRC Арнольд и Элан Амир, «Обновление экрана и оптимизация движения курсора: пакет библиотеки»
  3. ^ Joel Mathew Hegberg (ноябрь 1994). "Решение Termcap, Часть I" . OS-9 / OSK Ответы! . Проверено 26 апреля 2021 года . CS1 maint: обескураженный параметр ( ссылка )
  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 . CS1 maint: обескураженный параметр ( ссылка )
  10. ^ "termcap.src" . Компьютер Apple . Дата обращения 17 мая 2014 . CS1 maint: обескураженный параметр ( ссылка )

Внешние ссылки [ править ]

  • Текущие данные termcap
  • Ресурсы Termcap / Terminfo на веб-сайте Эрика С. Реймонда