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

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

Я пытаюсь найти информацию уже несколько дней. Чтобы быть точным, моя цель — создать ncursesбиблиотеку C, похожую на библиотеку. Я полностью осознаюПоследовательность управления ANSIи как их использовать. Однако я хочу переносимости, поэтому я и интересуюсь terminfoбазами данных. Я прочитал части документации, такие как:

Это позволило мне понять теорию и принципы, но на практике я не могу найти ни одного примера того, как получить доступ к базе данных/взаимодействовать с ней на таком языке программирования, как C.

На данный момент единственный способ, который приходит мне в голову, — это загрузить terminfoдвоичный файл базы данных в память и вручную выполнить доступ к нему, но кажется странным, что мне нужно строить свою собственную схему, и что нет более простого / практичного / официального способа получить доступ к этим чертовым базам данных.

решение1

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

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

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

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

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

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

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

дальнейшее чтение

Связанный контент