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

Termcap ( возможности терминала ) — это устаревшая программная библиотека и база данных , используемая на Unix-подобных компьютерах, которая позволяет программам использовать компьютерные терминалы с дисплеем независимым от устройства способом, что значительно упрощает процесс написания портативных приложений с текстовым режимом . На смену ей пришла база данных terminfo, используемая ncurses, tput и другими программами.
Билл Джой написал первую библиотеку termcap в 1978 году. [1] [2] для Berkeley Unix операционной системы ; с тех пор он был портирован на большинство Unix и Unix-подобных сред, даже на OS-9 . [3] Сообщается, что на дизайн Джоя повлиял дизайн хранилища данных терминала в более ранней Inсовместимой системе разделения времени . [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 КБ, может быть медленным. Для повышения производительности используется такая утилита, как переупорядочение , которая помещает наиболее часто используемые записи в начало файла.
Хешированная база данных
[ редактировать ]Реализации termcap на базе 4.4BSD хранят описание терминала в хешированной базе данных (например, что-то вроде Berkeley DB версии 1.85). В них хранятся записи двух типов: псевдонимы, указывающие на каноническую запись, и сама каноническая запись. Текст записи termcap сохраняется буквально.
Ограничения и расширения
[ редактировать ]Исходная реализация termcap была спроектирована так, чтобы использовать мало памяти:
- первое имя состоит из двух символов и умещается в 16 бит.
- имена возможностей состоят из двух символов
- описания ограничены 1023 символами.
- может быть включена только одна запись termcap с ее определениями, и она должна находиться в конце.
Более новые реализации интерфейса termcap обычно не требуют двухсимвольного имени в начале записи.
Имена возможностей по-прежнему состоят из двух символов во всех реализациях.
Функция tgetent, используемая для чтения описания терминала, использует буфер, размер которого должен быть достаточно большим для данных, и предполагается, что он составляет 1024 символа. Новые реализации интерфейса termcap могут ослабить это ограничение, разрешив использование нулевого указателя вместо фиксированного буфера. [5] или скрывая данные, которые не подходят, например, с помощью функции ZZ в termcap NetBSD . [6] Интерфейс библиотеки terminfo также эмулирует интерфейс termcap и фактически не использует буфер фиксированного размера.
Эмуляция termcap в библиотеке terminfo позволяет включать несколько других записей без ограничения позиции. Несколько других новых реализаций библиотеки termcap также могут предоставлять эту возможность, хотя она недостаточно документирована. [7]
Устаревшие функции
[ редактировать ]Специальная возможность, возможность «hz», была определена специально для поддержки терминала Hazeltine 1500 , который имел неудачную особенность использования символа тильды ASCII («~») в качестве средства введения управляющей последовательности. [8] [ обсуждать ] Для поддержки этого терминала код, использующий базу данных, должен был не только знать об использовании тильды для введения определенных управляющих последовательностей, но также должен был знать, как заменить любые тильды в отображаемом тексте другим печатным символом, поскольку тильда в тексте будет интерпретировано терминалом как начало управляющей последовательности, что приведет к отсутствию текста и искажению экрана. [9] Кроме того, маркеры атрибутов (например, начало и конец подчеркивания) сами занимали место на экране. [ нужна ссылка ] Комментарии в исходном коде базы данных часто называют это «повреждением мозга Hazeltine». [10] Поскольку Hazeltine 1500 был широко используемым терминалом в конце 1970-х годов, [ нужна ссылка ] было важно, чтобы приложения могли справиться с его ограничениями.
См. также
[ редактировать ]- Escape-последовательности ANSI — попытка объединить множество последовательностей.
- Компьютерный терминал
- Проклятия (библиотека программирования)
- Термининформо
- Эмулятор терминала
Ссылки
[ редактировать ]- ^ Питер Х. Салус, «История Unix связана не только с технологиями, но и с сотрудничеством», Byte, октябрь 1994 г.
- ^ Кеннет CRC Арнольд и Элан Амир, «Обновление экрана и оптимизация движения курсора: библиотечный пакет»
- ^ Джоэл Мэтью Хегберг (ноябрь 1994 г.). «Решение Termcap, часть I» . ОС-9/ОСК Ответы! . Проверено 26 апреля 2021 г.
- ^ Марк Криспин (7 октября 1998 г.). «Re: Консольные команды KL» . Группа новостей : alt.sys.pdp10 .
- ^ Библиотека GNU Termcap
- ^ Формат файла termcap NetBSD
- ^ Обсуждение termcap в vi
- ^ BSD по форматам файлов Руководство –
- ^ Столлман, Ричард М. (1992). «Библиотека и база данных Termcap, второе издание» . Gnu.org . Проверено 17 мая 2014 г.
- ^ "termcap.src" . Компьютер Apple . Проверено 17 мая 2014 г.