Как взаимодействовать с базой данных terminfo на C без ncurses?

Другой альтернативой является использование системы сборки, которая использует контрольные суммы зависимостей, чтобы определить, следует ли запускать перестроения. Я много раз использовал трюк «касания» с Gnu Make, но это намного проще, когда вы можете указать динамические зависимости и когда файлы, которые не изменяются, не вызывают перестроения. Вот пример использования GoodMake:

#! /usr/local/goodmake.py /bin/sh -se

#! *.date
    # Get the last-modified date
    curl -s -v -X HEAD http://${1%.date} 2>&1 | grep -i '^< Last-Modified:' >$1

#? local.dat
    site=http://example.org/example.gz
    $0 $site.date
    curl -s $site | gzip -d | transmogrify >$1

2
17.03.2020, 19:59
1 ответ

Для доступа к базе данных termcap во FreeBSD существует способ , который входит в операционную систему. C-библиотека FreeBSD имеет API для доступа к базам данных возможностей . Так getcap()и соавт. — это функции, которые нужно вызывать для доступа к базе данных termcap на низком уровне. (На самом деле существуют API нижнего -уровня, но они не абстрагируются, как getcap()API, от того факта, что базы данных возможностей могут быть либо переменной -длины, -записывать плоские файлы, либо надлежащим образом индексированные двоичные файлы базы данных, созданные с помощью программы cap_mkdb.)

На более высоком уровне находятся tgetent(), tputs()и др.. (Они также существуют в операционных системах terminfo, таких как многие операционные системы на базе Linux -. )Однако они являются частью библиотеки termcap ncurses, которая находится в библиотеке C FreeBSD; и вы пытаетесь сделать свою собственную библиотеку, похожую на ncurses -. (В операционных системах на базе Linux -они являются частью библиотеки terminfo ncurses.)

Примером доступа к записям базы данных terminfo без использования собственного API ncurses terminfo является библиотека unibilium. НеоВИМ использует это.

На более высоком уровне…

Идея о том, что terminfo/termcap является более портативным , действительно доведена до предела во втором десятилетии 21-го века. Вы почти наверняка никогда не столкнетесь с настоящим видеотерминалом, не соответствующим ECMA -48 :1976, не говоря уже о бумажном терминале. А абстракции terminfo, которые часто на самом деле не соответствуют тому, что делают настоящие видеотерминалы, в некотором смысле являются препятствием для переносимости, поскольку они навязывают несколько искаженный способ работы.

Это особенно верно для ввода терминала , который на самом деле был ECMA -48 (с некоторыми конечными автоматами для RXVT, Interix, Linux KVT и консоли SCO )с начала 1980-х гг.,и для которых модель сопоставления фиксированных строк termcap/terminfo очень плохо подходит. Но идеи "local"/"xmit" клавиатур калькулятора, "режим адресации курсора" и всего 3 формы проявления курсора, среди прочего, также не соответствуют тому, как на самом деле работают терминалы.

Если вы собираетесь заново изобретать ncurses, то, пожалуйста, по крайней мере не копируйте его цветовую -модель пар. Это едва соответствует цветовым системам ECMA -48 и AIXterm, не говоря уже о механизмах индексированного и прямого цветов ITU T.416, которые терминалы используют уже более четверти века.

Дополнительная литература

1
28.04.2021, 23:20

Теги

Похожие вопросы