Curses

curses（カーシス、カーズィス）は、Unix系システムにおいて文字表示端末上の画面表示や入力を統一的に管理するためのAPIを定義した、端末制御ライブラリ群であり、テキストユーザインタフェース (TUI) アプリケーションの基盤として用いられる。

 概要 
curses は、文字ベースの画面操作を効率的に扱うためのライブラリ群の設計概念である。アプリケーションは端末を直接操作するのではなく、ライブラリに各ウィンドウの状態を伝え、変更のあった部分だけを端末に反映させる仕組みを利用する。これにより、スクロールや分割ウィンドウ、フォーム入力などの文字ベースインターフェースを簡潔に構築できる。

curses では、実画面を 1 つ以上のウィンドウに対応付けて扱う。各ウィンドウは文字の並び（行と列）で表現され、プログラマは表示したい内容を設定して更新を指示する。ライブラリは変更があった部分だけを端末に反映するため、効率的な画面管理が可能である。

多くの実装では、端末ごとの制御文字や機能差をまとめたデータベース（通常 terminfo、一部は termcap）を参照し、古い端末でも動作可能である。専用デバイスドライバを用いる実装としては PDCurses があるが、例は少ない。代表的な実装の一つとして ncurses が存在する。

curses はグラフィカルユーザインタフェース（GUI）を提供するものではなく、ビットマップや多様なフォントを必要としない文字端末環境で、シンプルかつ高速に動作する点が特徴である。

 歴史 
ケン・アーノルドが開発し、BSD UNIXの一部としてリリースし、ローグというゲームなどで使用された。

"curses" という名称はcursor optimizationに由来する。また、ときおりviエディタでcursesが使われているという趣旨の解説が記載されている場合があるが、実際にはその逆で、viのカーソル移動のコードを参考にしてcursesが書かれた。

当初、termcapライブラリを使って実装された。数年後、カリフォルニア大学バークレー校でviとtermcapを改良していたがAT&Tに行き、terminfoを使った別のバージョンを作り、それがUNIX System IIIとUNIX System Vに採用された。後者はライセンス上の制限があるため、BSDとAT&Tそれぞれのバージョンは独立に開発されている。AT&T版ではterminfoを使っただけでなく、以下のような改良も行われている。
 ハイライト表示（ボールド表示、アンダーライン表示） - BSD版では単に「強調」として一種類しかサポートしていなかった。
 枠線の描画 - BSD版ではこの部分が貧弱だった。
 色付きの表示 - BSD版では全く対応していない。

AT&Tでのcurses開発は1990年代中ごろに終わり、同じころX/OpenがcursesのAPIを定義した。その後もncursesとの開発は継続されている。BSD版cursesはNetBSDで保守されており、多バイト文字対応、termcapからterminfoへの移行などが行われている。

 pcursesとPDcurses 
ncursesはcursesの代替としてLinux、OpenBSD、FreeBSD、NetBSD向けにGNUプロジェクトで作られたライブラリであり、その後、POSIX準拠のUNIXに移植されていった。PDCurses (Public Domain Curses) はUNIX以外の DOS、Windows、OS/2など向けに作られたcursesとほぼ同じ機能を提供するライブラリである。クロスプラットフォームのゲームなどで、Linuxではncurses、WindowsではPDCursesを使っているものがある。

1990年代には、4.4BSDでBSD版cursesにハイライト表示方法を複数サポートするなどの改良を施した。しかしこちらはあまり普及しなかった。それとは別に、AT&T版を真似た別のバージョンの開発が始まっていた。これには少なくとも2つの実装がある。pcurses（1982年開始）とPDCurses（Public Domain curses、1987年開始）である。

 ncurses 

ncurses (new curses) はpcursesから派生したもので、1993年にバージョン1.8.1から始まった。ncursesは今では最も普及している実装であり、これに刺激されてNetBSDプロジェクトでのBSD版cursesの開発などが進められた。

 移植性 
ncursesライブラリは当初Linux、OpenBSD、FreeBSD、NetBSDを対象としていたが、その後POSIX準拠の各種Unix系システムに移植された。PDCursesはAPIや機能はncursesと全く同一ではないが、DOS、Win32、OS/2のコンソール端末やX11などで動作する。この両者間での移植は難しくはない。例えばローグライクゲームのはLinux上でncursesを使って書かれたが、後にDOS上でPDCursesを使って移植された。

 cursesを使ったソフトウェア 

cursesは、テキストのみの表示デバイス（PCのコンソールモード、ANSI端末、telnetやSSHのクライアントなど）でGUI風の機能を提供するよう設計されている。

cursesを使ったプログラムは、テキストのみの表示デバイスでよくあるコマンドラインインタフェース (CLI) ではなく、一般的なGUIに似たユーザインタフェースを採用することが多く、テキストボックスやスクロール可能なリストといったウィジェットを使う。それによってCLIよりも使いやすいものになり、同時にテキストのみを表示する各種デバイスでも利用可能である。また、GUIを使うよりも少ないリソースで動作可能である。

SVR4ではcursesを利用した言語 FMLI を導入し、それを使ったテキストのみのユーザインタフェースFACEを実装した。FACEはシステム管理用インタフェースに使われた。FMLIはSolarisでも使われていた。

cursesを使ったソフトウェアが必ずGUI風のテキストユーザインタフェースを採用するとは限らない。例えばviエディタはTUI/GUI的なインタフェースではない。

 脚注 

注釈

出典

 外部リンク 
 NCURSES - Manual Pages
 Curses tutorial (PDF 形式)
 Public Domain Curses
 Interface for Rexx programmers
 Tcl Toolkit
 X/Open Curses
 NetBSD Curses main manual page

Category:ライブラリ (プログラミング)
Category:UNIX