Термининформо

Terminfo — это библиотека и база данных , которая позволяет программам использовать дисплейные терминалы независимо от устройства. Мэри Энн Хортон реализовала первую библиотеку terminfo в 1981–1982 годах как улучшение по сравнению с termcap . [1] Улучшения включают в себя
- более быстрый доступ к сохраненным описаниям терминалов, [ нужна ссылка ]
- более длинные и понятные названия возможностей терминала и
- общая оценка выражения для строк, отправляемых на терминал.
Terminfo был включен в UNIX System V Release 2 и вскоре стал предпочтительной формой описания терминала в System V, а не termcap (который BSD продолжала использовать). [2] Это было имитировано в pcurses в 1982–1984 годах Павлом Кертисом и было доступно в других реализациях UNIX , адаптируя или включая исправления Мэри Хортон. [3] Для получения дополнительной информации обратитесь к публикации на comp.sources.unix
группа новостей от декабря 1986 г. [4]
База данных terminfo может описывать возможности сотен различных терминалов отображения. Это позволяет внешним программам иметь возможность вывода символов на экран независимо от типа терминала.
Некоторые конфигурации:
- Количество строк на экране
- Моно режим; подавлять цвет
- Используйте видимый звонок вместо звукового сигнала
Модель данных
[ редактировать ]Базы данных Terminfo состоят из одного или нескольких описаний терминалов.
Индексы
[ редактировать ]Каждое описание должно содержать каноническое имя терминала. Он также может содержать один или несколько псевдонимов имени терминала. Каноническое имя или псевдонимы — это ключи, по которым библиотека осуществляет поиск в базе данных terminfo.
Значения данных
[ редактировать ]Описание содержит одну или несколько возможностей, имеющих условные названия. Возможности имеют следующие типы: логические , числовые и строковые . Библиотека terminfo имеет заранее определенные типы для каждого имени возможности. Он проверяет типы каждой возможности по синтаксису:
- строковые возможности имеют знак "=" между именем возможности и ее значением,
- числовые возможности имеют «#» между именем возможности и ее значением, и
- Логические возможности не имеют связанного значения (они всегда истинны , если они указаны).
Приложения, использующие terminfo, знают типы соответствующих возможностей и получают значения возможностей из базы данных terminfo с помощью вызовов библиотеки, которые возвращают успешный результат только тогда, когда имя возможности соответствует одной из предопределенных типизированных возможностей.
Как и в случае с termcap , некоторые строковые возможности представляют собой escape-последовательности , которые можно отправить на хост, нажав специальные клавиши на клавиатуре. Другие возможности представляют собой строки, которые могут быть отправлены приложением на терминал. В последнем случае библиотека terminfo (как и библиотека termcap) выполняет подстановку параметров приложения в отправляемую строку. Эти функции предоставляют анализатор выражений на основе стека , который в основном используется для минимизации количества символов, отправляемых для управляющих последовательностей, которые имеют дополнительные параметры, такие как SGR (выбрать графическое представление) . Библиотеки termcap, напротив, предоставляют ограниченный набор операций, которые полезны для большинства терминалов.
Иерархия
[ редактировать ]Описания Terminfo могут быть созданы путем включения содержимого одного описания в другое, исключения возможностей из включенного описания или переопределения или добавления возможностей. Независимо от того, какая модель хранения используется, библиотека terminfo возвращает описание терминала из запрошенного описания, используя данные, скомпилированные с помощью автономного инструмента (например, tic ).
Модель хранения
[ редактировать ]Данные Terminfo хранятся в виде двоичного файла , что делает их менее простыми для изменения, чем termcap . Данные могут быть получены с помощью библиотеки terminfo из файлов, в которых они хранятся. Сами данные организованы в виде таблиц для логических, числовых и строковых возможностей соответственно. Это схема, разработанная Мэри Хортон, и, за исключением некоторых различий в доступных именах, она используется в большинстве реализаций terminfo. [5] X/Open не определяет формат скомпилированного описания терминала. Фактически, здесь даже не упоминаются распространенные утилиты tic или infocmp . [6] [7] Поскольку скомпилированные записи terminfo не содержат метаданных, идентифицирующих индексы в таблицах, которым назначена каждая возможность, они не обязательно совместимы между реализациями. Однако, поскольку большинство реализаций используют одну и ту же общую структуру таблицы (включая размеры заголовков и элементов данных), можно автоматически создавать специальные библиотеки terminfo, которые могут считывать данные для данной реализации. Например, ncurses может быть построен так, чтобы соответствовать данным terminfo для нескольких других реализаций. [8]
Дерево каталогов
[ редактировать ]Исходная (и наиболее распространенная) реализация библиотеки terminfo извлекает данные из каталогов иерархии . Используя первый символ имени описания терминала в качестве одного из компонентов пути, а имя описания терминала в качестве имени извлекаемого файла, библиотека terminfo обычно превосходит поиск по большому файлу termcap. [ нужна ссылка ]
Хешированная база данных
[ редактировать ]Некоторые реализации terminfo хранят описание терминала в хешированной базе данных (например, Berkeley DB версии 1.85). [9] [10] В них хранятся записи двух типов: псевдонимы, указывающие на каноническую запись, и сама каноническая запись, содержащая данные о возможностях терминала.
Ограничения и расширения
[ редактировать ]Open Group документирует ограничения для terminfo (минимальные гарантированные значения), которые применяются только к исходному файлу. [11] [12] Два из них представляют особый интерес:
- Максимум 14 символов для псевдонимов терминалов
- Максимум 32 767 для числовых величин
Ограничение в 14 символов касается очень старых файловых систем, которые могут представлять имена файлов не длиннее этого. Хотя эти файловые системы в целом устарели, эти ограничения были зафиксированы в документации конца 1980-х годов и с тех пор не пересматривались.
Ограничение в 32 767 предназначено для положительных значений в со знаком , дополненном до двух 16-битном значении . Запись terminfo может использовать отрицательные числа для обозначения отмененных или отсутствующих значений.
В отличие от termcap , terminfo имеет как исходное, так и скомпилированное представление. Ограничения для скомпилированного представления не указаны. Однако в документации большинства реализаций для tic (компилятора информации о терминале) отмечается, что размер скомпилированных записей не может превышать 4096 байт.
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Хортон, Марк. «Новые проклятия и пакет Terminfo». Материалы конференции USENIX . Лето 1982 г. Бостон, Массачусетс: USENIX: 79–91.
- ^ « Комментарии в списке рассылки fa.info-terms на termcap/terminfo в 1985 году» .
- ^ « pcurses Общий файл за 1986 год, показывающий историю изменений» . Архивировано из оригинала 27 сентября 2007 г.
- ^ « Pcurses завершила публикацию» .
- ^ Томас Э. Дики (17 декабря 2006 г.). "term - формат скомпилированного файла терминов" .
- ^ «X/Open Curses, выпуск 4, версия 2 — справочные страницы» . Открытая группа. 1997.
- ^ «Команды и утилиты, выпуск 5 — Справочные страницы» . Открытая группа. 1997.
- ^ Томас Э. Дики (12 октября 2002 г.). «Анонсируем ncurses 5.3» .
- ^ Тодд С. Миллер (1999). «Модуль OpenBSD read_bsd_terminfo.c» .
- ^ Томас Э. Дики (17 декабря 2006 г.). «Анонсируем ncurses 5.6» .
- ^ Большая часть этого была сделана до того, как X/Open объединилась с Open Software Foundation и образовала The Open Group , следовательно, существует много источников, в которых упоминается X/Open .
- ^ «Формат исходного кода Terminfo (ENHANCED CURSES) — минимальные гарантированные пределы» . Открытая группа. 1997.