Другой альтернативой является использование системы сборки, которая использует контрольные суммы зависимостей, чтобы определить, следует ли запускать перестроения. Я много раз использовал трюк «касания» с 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
Для доступа к базе данных 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, которые терминалы используют уже более четверти века.
getcap
. Руководство по функциям библиотеки BSD . FreeBSD. 2002 -03 -22. tgetent
. ncurses (3X )Руководство FreeBSD.