ncurses (новые проклятия ) — это библиотека программирования , предоставляющая интерфейс прикладного программирования (API), который позволяет программисту писать текстовые пользовательские интерфейсы (TUI) независимым от терминала способом. Это набор инструментов для разработки прикладного программного обеспечения с графическим интерфейсом , работающего под управлением эмулятора терминала . Он также оптимизирует изменения экрана, чтобы уменьшить задержку при использовании удаленных оболочек .
ncurses — это бесплатная программная эмуляция проклятий System V Release 4.0 (SVr4) .
Существуют привязки для ncurses к различным языкам программирования, включая Ada , [4] Python , [5] Gambas , [6] Ruby , [7] PHP , [8] JavaScript , [9] и Perl . [10]
В качестве новой версии ncurses представляет собой бесплатную программную эмуляцию Curses System V Release 4.0 (SVr4) , которая сама по себе была улучшением по сравнению с прекращенными Curses 4.4 BSD. [11] Стандарт XSI Curses, выпущенный X/Open , явно и точно смоделирован на System V.
Первая библиотека проклятий была разработана в Калифорнийском университете в Беркли для операционной системы BSD примерно в 1980 году для поддержки Rogue , текстовой приключенческой игры. Первоначально он использовал библиотеку termcap , которая использовалась в других программах, таких как редактор vi . [11]
Успех библиотеки проклятий BSD побудил Bell Labs выпустить расширенную библиотеку проклятий в своих системах Unix System V Release 2 . Эта библиотека была более мощной и вместо использования termcap использовала terminfo . Однако из-за политики AT&T в отношении распространения исходного кода эта улучшенная библиотека проклятий не получила большого признания в сообществе BSD. [11]
Примерно в 1982 году Павел Кертис начал работу над бесплатным клоном проклятий Bell Labs под названием pcurses , который поддерживался разными людьми до 1986 года .
Библиотека pcurses была дополнительно улучшена, когда Зейд Бен-Халим взял на себя разработку в конце 1991 года. [11] [12] [13] Новая библиотека была выпущена как ncurses в ноябре 1993 года, причем версия 1.8.1 стала первым основным выпуском. . Последующую работу над версией 1.8.8 (M1995) проводил Эрик С. Рэймонд , который добавил библиотеки форм и меню, написанные Юргеном Пфайфером. [1] С 1996 года его поддерживает Томас Э. Дики. [12]
Большинство вызовов ncurses можно легко перенести на старые проклятия. Реализации проклятий System V могут поддерживать программы проклятий BSD с помощью простой перекомпиляции . [14] Однако некоторые области являются проблематичными, например, обработка изменения размера терминала, поскольку в старых проклятиях не существует аналога.
ncurses может использовать либо terminfo (с расширяемыми данными), либо termcap . Другие реализации проклятий обычно используют terminfo ; меньшинство использует termcap . Лишь немногие (mytinfo был более старым исключением [15] ) используют оба.
ncurses является частью проекта GNU , но не распространяется под лицензией GNU GPL или LGPL . Вместо этого оно распространяется под разрешительной лицензией свободного программного обеспечения , то есть лицензией MIT . [16] Это связано с соглашением, заключенным с Фондом свободного программного обеспечения на момент передачи разработчиками своих авторских прав.
Когда было заключено соглашение о передаче прав ФСФ, там был пункт, в котором говорилось: [16]
Фонд обещает, что любое распространение Пакета или любой работы, «основанной на Пакете», которое происходит под контролем Фонда или его агентов или правопреемников, будет осуществляться на условиях, которые явно и бессрочно разрешают любому обладателю копии произведение, к которому применяются эти условия, и имея точное уведомление об этих условиях, перераспределять копии произведения кому-либо на тех же условиях.
По словам сопровождающего Томаса Э. Дики, это исключает повторное лицензирование GPL в любой версии, поскольку это наложит ограничения на программы, которые смогут ссылаться на библиотеки. [16]
Существуют сотни программ, использующих ncurses. [17] [18] Некоторые, такие как GNU Screen и w3m , используют только интерфейс termcap и сами выполняют управление экраном. Другие, такие как GNU Midnight Commander и YaST , используют программный интерфейс Curs.