curses

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

Структура

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

Обзор

API Curses описан в нескольких различных источниках[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. Портирование между этими двумя версиями не представляет трудностей. Например, roguelike 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, предоставляющих базовый функционал для администрирования. FMLI, основанный на Curses, был позднее использован в системе Solaris для создания высокоуровневого интерфейса для команд Live Upgrade.

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

См. также

  • ncurses
  • 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 (октябрь 1994).
  5. Arnold, K. C. R. C. Screen Updating and Cursor Movement Optimization: A Library Package (англ.) : journal. — University of California, Berkeley, 1977.
  6. Kenneth C. R. C. Arnold. Screen Updating and Cursor Movement Optimization: A Library Package (декабрь 1992).
  7. Goodheart, Berny. UNIX Curses Explained (неопр.). Prentice Hall, 1991. — С. 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 (декабрь 1996).
  13. NetBSD project. CURSES_SCREEN(3), NetBSD Library Functions Manual (февраль 2004).
  14. Ruibiao Qiu. NetBSD-SoC: Wide Character Support in NetBSD curses Library (сентябрь 2005).
  15. Thomas Biskup. ADOM - The Past (недоступная ссылка) (1994–2007). Дата обращения: 16 ноября 2007. Архивировано 10 октября 2007 года.
  16. Thomas Biskup (March 15, 1996). "New Game: ADOM (MS-DOS, MS-Windows, and Linux only)". rec.games.roguelike.announce. (Google Groups). Проверено 16 ноября 2007.

Ссылки

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.