curses

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск

curses — библиотека управления терминалом для Unix-подобных операционных систем, позволяющая создавать приложения с текстовым интерфейсом пользователя.

Название библиотеки происходит от термина «cursor optimization» (оптимизация курсора)[1]. Библиотека содержит функции для работы с дисплеем текстового терминала (например, VT100) [2].

Обзор[править | править вики-текст]

Curses API описан в нескольких различных источниках[3]. Большинство реализаций curses используют базу данных, описывающую возможности тысяч различных терминалов. Некоторые реализации (например, PDCurses), используют вместо неё специализированные драйверы устройств. Большинство реализаций используют 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[править | править вики-текст]

Развитем AT&T curses можно считать как минимум следующие реализации: pcurses от Павела Кёртиса (1982), PDCurses (Public Domain curses) от Марка Хесслинга (Mark Hessling) для поддержки его редактора THE (1987), а также Rexx/Curses[9], и PC curses (версии 1.4 от Бьорна Ларссона (Bjorn Larsson) основаны на библиотеке Кёртиса[10].[11]Шаблон:Discuss

ncurses[править | править вики-текст]

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. Портирование между этими двумя версиями не представляет трудностей. Например, рогалик ADOM был написан под Linux и ncurses, и позднее был портирован под DOS и PDCurses[15][16].

Скриншоты[править | править вики-текст]

Ниже продемонстрированы типичные примеры использования curses (в окне терминала, поддерживающего цвет)

Программное обеспечение, использующее curses[править | править вики-текст]

Curses делает возможным с лёгкостью создавать GUI-подобную функциональность на текстовом терминале, таком как текстовый режим PC, аппаратный ANSI-терминал, клиент Telnet или SSH.

Программы, использующие curses, часто имеют пользовательский интерфейс, напоминающий традиционный графический интерфейс пользователя, включая такие виджеты, как выпадающие меню и прокручиваемые списки, вместо интерфейса командной строки (command line interface, CLI), широко используемого на текстовых терминалах. Кроме того, программы, использующие curses, менее требовательны к ресурсам, чем их графические аналоги, и более переносимы между системами (особенно очень старыми, до 1990 года).

Curses использован в реализации языка FMLI, с помощью которого был создан дружелюбный пользовательский интерфейс FACE в системах SVR4, предоставляющих базовый функционал для администрирования.[источник не указан 1742 дня] FMLI, основанный на Curses, был позднее использован в системе Solaris для создания высокоуровневого интерфейса для команд Live Upgrade.[источник не указан 1742 дня]

Curses чаще всего ассоциируется с Unix-подобными операционными системами, хотя также существуют реализации для Microsoft Windows.

См. также[править | править вики-текст]

  • conio — похожая идея для DOS
  • S-Lang — интерпретируемый язык с похожими возможностями
  • SMG$ — похожая идея для OpenVMS
  • Newt — похожая библиотека тексового интерфейса на основе библиотеки slang

Ссылки[править | править вики-текст]

  1. Thomas E. Dickey. NCURSES - Frequently Asked Questions.
  2. Thomas E. Dickey. NCURSES - Frequently Asked Questions.
  3. John Strang, Programming with curses, O’Reilly, ISBN 0-937175-02-1
  4. Peter H. Salus. The history of Unix is as much about collaboration as it is about technology. Byte (October 1994).
  5. 1 2 Arnold, K. C. R. C. (1977). «Screen Updating and Cursor Movement Optimization: A Library Package.» (University of California, Berkeley).
  6. Kenneth C. R. C. Arnold. Screen Updating and Cursor Movement Optimization: A Library Package (December 1992).
  7. UNIX Curses Explained. — Prentice Hall, 1991. — P. xi. — ISBN 0-13-931957-3.
  8. X/Open Curses, Issue 4 Version 2, Reference Pages. The Open Group (1997).
  9. Mark Hessling. Rexx/Curses. SourceForge project rexxcurses (2008). Проверено 10 февраля 2014.
  10. F. Ellermann. CURSES.NEW in pccurses.zip (26 июля 1993). — «based on PC curses (version 1.4) written by Bjorn Larsson»  Проверено 10 февраля 2014.
  11. Bjorn Larsson. README.NOW in pccurs14.zip (14 января 1990). — «PCcurses is a port/rewrite of Pavel Curtis' [package]»  Проверено 10 февраля 2014.
  12. Thomas E. Dickey. NCURSES - New Curses (December 1996).
  13. NetBSD project. CURSES_SCREEN(3), NetBSD Library Functions Manual (February 2004).
  14. Ruibiao Qiu. NetBSD-SoC: Wide Character Support in NetBSD curses Library (September 2005).
  15. Thomas Biskup. ADOM - The Past (1994–2007). Проверено 16 ноября 2007.
  16. Thomas Biskup (March 15, 1996). "New Game: ADOM (MS-DOS, MS-Windows, and Linux only)". rec.games.roguelike.announce. (Google Groups). Retrieved on 2007-11-16.

Ссылки[править | править вики-текст]

См. также[править | править вики-текст]

Ссылки[править | править вики-текст]