Русская Википедия:Curses
Шаблон:Не путать Шаблон:Lowercase
Curses — библиотека управления терминалом для Unix-подобных операционных систем, позволяющая создавать приложения с текстовым интерфейсом пользователя.
Название библиотеки происходит от английского термина «cursor optimization» (оптимизация курсора)[1], а также означает «проклятия». Библиотека содержит функции для работы с дисплеем текстового терминала (например, VT100)[2].
Обзор
API Curses описан в нескольких различных источниках[3]. Большинство реализаций curses использует базу данных, описывающую возможности тысяч различных терминалов. Некоторые реализации (например, Шаблон:Не переведено 3), используют вместо неё специализированные драйверы устройств. Большинство реализаций использует terminfo; некоторые используют termcap. Для приложений, не требующих вывода графики или нескольких шрифтов, реализация интерфейса при помощи curses будет гораздо проще и быстрее, чем с использованием X Window System.
При помощи curses программисты могут создавать текстовые приложения, переносимые между различными типами терминалов — библиотека сама позаботится о том, какие управляющие символы следует использовать для каждого конкретного терминала. Curses предоставляет возможность отображения нескольких окон на одном терминале. Каждое окно представляется матрицей символов. Программист устанавливает позицию, размер и содержимое каждого окна и обновляет экран. Библиотека определяет минимальный набор изменений для обновления экрана и применяет их, исходя из возможностей терминала.
История
Первая реализация curses была написана Кеном Арнольдом и поставлялась вместе с BSD UNIX, где использовалась для нескольких игр, самая известная из которых — Rogue[4][5][6].
Иногда ошибочно утверждается, что curses использовался в текстовом редакторе vi. На самом деле, код, оптимизирующий перемещение курсора, был позаимствован curses из vi, который вышел раньше[5].
Согласно Гудхарту, оригинальная реализация Кена Арнольда началась с расширения функций библиотеки termcap[7]. Несколькими годами позже Марк Хортон, работавший над улучшением кода vi и termcap в Беркли, перешёл в AT&T и создал другую версию на основе terminfo, которая стала частью UNIX System III и UNIX System V. Из-за ограничений лицензии последнего версии BSD и AT&T разрабатывались независимо. Кроме улучшений termcap/terminfoв версии AT&T были добавлены:
- выделение текста (полужирный, подчёркнутый)
- версия BSD поддерживала только режим выделения standout.
- рисование линий
- версия BSD имела слабую поддержку данной функции.
- цвета
- в версии BSD такой возможности не предвиделось.
Разработка AT&T curses остановилась в середине 1990-х, когда было объявлено о создании X/Open Curses. [8] Однако разработка ncurses и PDCurses продолжается. Версия BSD curses продолжает поддерживаться в операционной системе NetBSD (поддержка широких символов, миграция с termcap на terminfo и т. д.).
pcurses и PDCurses
Шаблон:Main Развитием AT&T curses можно считать как минимум следующие реализации: pcurses от Павела Кёртиса (1982), PDCurses (Public Domain curses) от Марка Хесслинга (Mark Hessling) для поддержки его редактора THE (1987), а также Rexx/Curses[9] и PC curses (версии 1.4 от Бьорна Ларссона (Bjorn Larsson) основаны на библиотеке Кёртиса[10].[11]
ncurses
Шаблон:Main ncurses (new curses) «изначально являлась pcurses … и была перевыпущена как ncurses 1.8.1 в конце 1993 года»[12]. ncurses является наиболее известной реализацией curses, которая мотивировала дальнейшую разработку остальных модификаций, таких как BSD curses в проекте NetBSD. [13] [14]
Переносимость
Хотя библиотека ncurses library изначально разрабатывалась под Linux, OpenBSD, FreeBSD, и NetBSD, она была портирована под множество других ANSI/POSIX UNIX-систем, в основном усилиями Томаса Дики. PDCurses (не путать с ncurses) использует те же вызовы, что и ncurses, за исключением того, что PDCurses предназначена для различных устройств, то есть, консольных окон DOS, Win32, OS/2 и X11. Портирование между этими двумя версиями не представляет трудностей. Например, roguelike ADOM был написан под Linux и ncurses, и позднее был портирован под DOS и PDCurses[15][16].
Скриншоты
Ниже продемонстрированы типичные примеры использования curses (в окне терминала, поддерживающего цвет)
-
Цветной интерфейс программы Tin для чтения новостей
-
Использование curses в программе для записи дисков Jack
Программное обеспечение, использующее curses
Curses делает возможным с лёгкостью создавать GUI-подобную функциональность на текстовом терминале, таком как текстовый режим PC, аппаратный ANSI-терминал, клиент Telnet или SSH.
Программы, использующие curses, часто имеют пользовательский интерфейс, напоминающий традиционный графический интерфейс пользователя, включая такие виджеты, как выпадающие меню и прокручиваемые списки, вместо интерфейса командной строки (command line interface, CLI), широко используемого на текстовых терминалах. Кроме того, программы, использующие curses, менее требовательны к ресурсам, чем их графические аналоги, и более переносимы между системами (особенно очень старыми, до 1990 года).
Curses чаще всего ассоциируется с Unix-подобными операционными системами, хотя также существуют реализации для Microsoft Windows.
См. также
- ncurses
- conio — похожая идея для DOS
- S-Lang — интерпретируемый язык с похожими средствами экранного ввода/вывода
- SMG$ — похожая идея для OpenVMS
- Шаблон:Iw — похожая библиотека тексового интерфейса на основе библиотеки slang
Примечания
Ссылки
- NCURSES — руководство
- учебник по Curses (в формате PDF)
- Public Domain Curses
- Интерфейс для Rexx программистов
- Tcl Toolkit
- X/Open Curses
- Curses для Python
- NetBSD Curses main manual page
- X/Open Curses, Issue 4 Version 2, Reference PagesШаблон:Ref-en
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ John Strang, Programming with curses, O’Reilly, ISBN 0-937175-02-1
- ↑ Шаблон:Cite web
- ↑ 5,0 5,1 Шаблон:Статья
- ↑ Шаблон:Cite web
- ↑ Шаблон:Книга
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite webШаблон:Dead link
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite web
- ↑ Шаблон:Cite newsgroup Шаблон:Cite web