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, предоставляющих базовый функционал для администрирования.К:Википедия:Статьи без источников (тип: не указан)[источник не указан 4912 дней] FMLI, основанный на Curses, был позднее использован в системе Solaris для создания высокоуровневого интерфейса для команд Live Upgrade.К:Википедия:Статьи без источников (тип: не указан)[источник не указан 4912 дней]

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

См. также

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

Напишите отзыв о статье "Curses"

Ссылки

  1. Thomas E. Dickey. [invisible-island.net/ncurses/ncurses.faq.html#what_is_it NCURSES - Frequently Asked Questions].
  2. Thomas E. Dickey. [invisible-island.net/ncurses/ncurses.faq.html NCURSES - Frequently Asked Questions].
  3. John Strang, Programming with curses, O’Reilly, ISBN 0-937175-02-1
  4. Peter H. Salus. [landley.net/history/mirror/unix/art3.htm 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. [www.mirbsd.org/cman/manPSD/19.curses.htm 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. [www.opengroup.org/onlinepubs/007908799/cursesix.html X/Open Curses, Issue 4 Version 2, Reference Pages]. The Open Group (1997).
  9. Mark Hessling. [rexxcurses.sourceforge.net/index.html Rexx/Curses]. SourceForge project rexxcurses (2008). Проверено 10 февраля 2014.
  10. F. Ellermann. [purl.net/xyzzy/dos/pccurses.zip CURSES.NEW in pccurses.zip] (26 июля 1993). — «based on PC curses (version 1.4) written by Bjorn Larsson»  Проверено 10 февраля 2014.
  11. Bjorn Larsson. [read.pudn.com/downloads88/sourcecode/windows/339526/PCCUR/README.NOW__.htm README.NOW in pccurs14.zip] (14 января 1990). — «PCcurses is a port/rewrite of Pavel Curtis' [package]»  Проверено 10 февраля 2014.
  12. Thomas E. Dickey. [invisible-island.net/ncurses/ NCURSES - New Curses] (December 1996).
  13. NetBSD project. [www.daemon-systems.org/man/curses_screen.3.html CURSES_SCREEN(3), NetBSD Library Functions Manual] (February 2004).
  14. Ruibiao Qiu. [netbsd-soc.sourceforge.net/projects/wcurses/ NetBSD-SoC: Wide Character Support in NetBSD curses Library] (September 2005).
  15. Thomas Biskup. [www.adom.de/adom/past.php3 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. [groups.google.com/group/rec.games.roguelike.announce/browse_frm/thread/db2cae355715f608/bb2d17e5701ff977?lnk=st&q=adom+group%3Arec.games.roguelike.announce#bb2d17e5701ff977 (Google Groups)]. Retrieved on 2007-11-16.

Напишите отзыв о статье "Curses"

Ссылки

  • [invisible-island.net/ncurses/man/ NCURSES — руководство]
  • [heather.cs.ucdavis.edu/~matloff/UnixAndC/CLanguage/Curses.pdf учебник по Curses] (в формате PDF)
  • [pdcurses.sourceforge.net/ Public Domain Curses]
  • [rexxcurses.sourceforge.net/ Интерфейс для Rexx программистов]
  • [www.ch-werner.de/ck/ Tcl Toolkit]
  • [www.opengroup.org/onlinepubs/007908799/cursesix.html X/Open Curses]
  • [docs.python.org/library/curses.html Curses для Python]
  • [netbsd.gw.com/cgi-bin/man-cgi?curses+3+NetBSD-current NetBSD Curses main manual page]


Напишите отзыв о статье "Curses"

Ссылки

  • [opengroup.org/onlinepubs/007908799/cursesix.html X/Open Curses, Issue 4 Version 2, Reference Pages]  (англ.)

Отрывок, характеризующий Curses

«Я согласилась, – говорила себе теперь Наташа, – что было бы ужасно, если б он остался всегда страдающим. Я сказала это тогда так только потому, что для него это было бы ужасно, а он понял это иначе. Он подумал, что это для меня ужасно бы было. Он тогда еще хотел жить – боялся смерти. И я так грубо, глупо сказала ему. Я не думала этого. Я думала совсем другое. Если бы я сказала то, что думала, я бы сказала: пускай бы он умирал, все время умирал бы перед моими глазами, я была бы счастлива в сравнении с тем, что я теперь. Теперь… Ничего, никого нет. Знал ли он это? Нет. Не знал и никогда не узнает. И теперь никогда, никогда уже нельзя поправить этого». И опять он говорил ей те же слова, но теперь в воображении своем Наташа отвечала ему иначе. Она останавливала его и говорила: «Ужасно для вас, но не для меня. Вы знайте, что мне без вас нет ничего в жизни, и страдать с вами для меня лучшее счастие». И он брал ее руку и жал ее так, как он жал ее в тот страшный вечер, за четыре дня перед смертью. И в воображении своем она говорила ему еще другие нежные, любовные речи, которые она могла бы сказать тогда, которые она говорила теперь. «Я люблю тебя… тебя… люблю, люблю…» – говорила она, судорожно сжимая руки, стискивая зубы с ожесточенным усилием.
И сладкое горе охватывало ее, и слезы уже выступали в глаза, но вдруг она спрашивала себя: кому она говорит это? Где он и кто он теперь? И опять все застилалось сухим, жестким недоумением, и опять, напряженно сдвинув брови, она вглядывалась туда, где он был. И вот, вот, ей казалось, она проникает тайну… Но в ту минуту, как уж ей открывалось, казалось, непонятное, громкий стук ручки замка двери болезненно поразил ее слух. Быстро и неосторожно, с испуганным, незанятым ею выражением лица, в комнату вошла горничная Дуняша.
– Пожалуйте к папаше, скорее, – сказала Дуняша с особенным и оживленным выражением. – Несчастье, о Петре Ильиче… письмо, – всхлипнув, проговорила она.


Кроме общего чувства отчуждения от всех людей, Наташа в это время испытывала особенное чувство отчуждения от лиц своей семьи. Все свои: отец, мать, Соня, были ей так близки, привычны, так будничны, что все их слова, чувства казались ей оскорблением того мира, в котором она жила последнее время, и она не только была равнодушна, но враждебно смотрела на них. Она слышала слова Дуняши о Петре Ильиче, о несчастии, но не поняла их.
«Какое там у них несчастие, какое может быть несчастие? У них все свое старое, привычное и покойное», – мысленно сказала себе Наташа.
Когда она вошла в залу, отец быстро выходил из комнаты графини. Лицо его было сморщено и мокро от слез. Он, видимо, выбежал из той комнаты, чтобы дать волю давившим его рыданиям. Увидав Наташу, он отчаянно взмахнул руками и разразился болезненно судорожными всхлипываниями, исказившими его круглое, мягкое лицо.
– Пе… Петя… Поди, поди, она… она… зовет… – И он, рыдая, как дитя, быстро семеня ослабевшими ногами, подошел к стулу и упал почти на него, закрыв лицо руками.
Вдруг как электрический ток пробежал по всему существу Наташи. Что то страшно больно ударило ее в сердце. Она почувствовала страшную боль; ей показалось, что что то отрывается в ней и что она умирает. Но вслед за болью она почувствовала мгновенно освобождение от запрета жизни, лежавшего на ней. Увидав отца и услыхав из за двери страшный, грубый крик матери, она мгновенно забыла себя и свое горе. Она подбежала к отцу, но он, бессильно махая рукой, указывал на дверь матери. Княжна Марья, бледная, с дрожащей нижней челюстью, вышла из двери и взяла Наташу за руку, говоря ей что то. Наташа не видела, не слышала ее. Она быстрыми шагами вошла в дверь, остановилась на мгновение, как бы в борьбе с самой собой, и подбежала к матери.
Графиня лежала на кресле, странно неловко вытягиваясь, и билась головой об стену. Соня и девушки держали ее за руки.
– Наташу, Наташу!.. – кричала графиня. – Неправда, неправда… Он лжет… Наташу! – кричала она, отталкивая от себя окружающих. – Подите прочь все, неправда! Убили!.. ха ха ха ха!.. неправда!
Наташа стала коленом на кресло, нагнулась над матерью, обняла ее, с неожиданной силой подняла, повернула к себе ее лицо и прижалась к ней.
– Маменька!.. голубчик!.. Я тут, друг мой. Маменька, – шептала она ей, не замолкая ни на секунду.
Она не выпускала матери, нежно боролась с ней, требовала подушки, воды, расстегивала и разрывала платье на матери.
– Друг мой, голубушка… маменька, душенька, – не переставая шептала она, целуя ее голову, руки, лицо и чувствуя, как неудержимо, ручьями, щекоча ей нос и щеки, текли ее слезы.
Графиня сжала руку дочери, закрыла глаза и затихла на мгновение. Вдруг она с непривычной быстротой поднялась, бессмысленно оглянулась и, увидав Наташу, стала из всех сил сжимать ее голову. Потом она повернула к себе ее морщившееся от боли лицо и долго вглядывалась в него.
– Наташа, ты меня любишь, – сказала она тихим, доверчивым шепотом. – Наташа, ты не обманешь меня? Ты мне скажешь всю правду?
Наташа смотрела на нее налитыми слезами глазами, и в лице ее была только мольба о прощении и любви.
– Друг мой, маменька, – повторяла она, напрягая все силы своей любви на то, чтобы как нибудь снять с нее на себя излишек давившего ее горя.
И опять в бессильной борьбе с действительностью мать, отказываясь верить в то, что она могла жить, когда был убит цветущий жизнью ее любимый мальчик, спасалась от действительности в мире безумия.
Наташа не помнила, как прошел этот день, ночь, следующий день, следующая ночь. Она не спала и не отходила от матери. Любовь Наташи, упорная, терпеливая, не как объяснение, не как утешение, а как призыв к жизни, всякую секунду как будто со всех сторон обнимала графиню. На третью ночь графиня затихла на несколько минут, и Наташа закрыла глаза, облокотив голову на ручку кресла. Кровать скрипнула. Наташа открыла глаза. Графиня сидела на кровати и тихо говорила.
– Как я рада, что ты приехал. Ты устал, хочешь чаю? – Наташа подошла к ней. – Ты похорошел и возмужал, – продолжала графиня, взяв дочь за руку.
– Маменька, что вы говорите!..
– Наташа, его нет, нет больше! – И, обняв дочь, в первый раз графиня начала плакать.


Княжна Марья отложила свой отъезд. Соня, граф старались заменить Наташу, но не могли. Они видели, что она одна могла удерживать мать от безумного отчаяния. Три недели Наташа безвыходно жила при матери, спала на кресле в ее комнате, поила, кормила ее и не переставая говорила с ней, – говорила, потому что один нежный, ласкающий голос ее успокоивал графиню.
Душевная рана матери не могла залечиться. Смерть Пети оторвала половину ее жизни. Через месяц после известия о смерти Пети, заставшего ее свежей и бодрой пятидесятилетней женщиной, она вышла из своей комнаты полумертвой и не принимающею участия в жизни – старухой. Но та же рана, которая наполовину убила графиню, эта новая рана вызвала Наташу к жизни.
Душевная рана, происходящая от разрыва духовного тела, точно так же, как и рана физическая, как ни странно это кажется, после того как глубокая рана зажила и кажется сошедшейся своими краями, рана душевная, как и физическая, заживает только изнутри выпирающею силой жизни.
Так же зажила рана Наташи. Она думала, что жизнь ее кончена. Но вдруг любовь к матери показала ей, что сущность ее жизни – любовь – еще жива в ней. Проснулась любовь, и проснулась жизнь.
Последние дни князя Андрея связали Наташу с княжной Марьей. Новое несчастье еще более сблизило их. Княжна Марья отложила свой отъезд и последние три недели, как за больным ребенком, ухаживала за Наташей. Последние недели, проведенные Наташей в комнате матери, надорвали ее физические силы.