Curses

curses(カーシス、またはカーズィス)は、Unix系システムにおける端末制御ライブラリです。これは、テキストユーザーインターフェース(TUI)アプリケーションを開発するために広く利用されています。cursesの名称は、「cursor optimization」(カーソル最適化)に由来し、文字のみを表示する端末(例えばVT100など)を用いるアプリケーションにおいて、画面管理を効率的に行うための機能を提供します。

概要


cursesのAPIに関する解説は多数存在します。最も一般的な実装では、数千にも及ぶさまざまな端末の機能を示すデータベースを活用しています。この端末データベースの代わりに、専用のデバイスドライバを使用する実装としてPDCursesがありますが、そのような例は比較的少数です。多くの実装では、terminfoと呼ばれる端末情報データベースを使用しており、一部ではtermcapも利用されています。cursesの大きな利点は、古い端末でもほとんどの場合動作可能であるという点です。ビットマップ画像や多様なフォントを必要としないアプリケーションでは、X Window Systemを利用するよりもcursesを利用した方が、よりシンプルで高速な実装が可能です。

cursesを使用することで、プログラマーは特定の端末装置を意識することなく、文字ベースのアプリケーションを作成できます。cursesライブラリは、実行時に使用されている端末装置を識別し、適切な制御コードを送信する役割を担います。cursesでは、実際の画面を1つ以上のウィンドウに分割し、各ウィンドウを文字の行列として扱います。プログラマーは、必要なウィンドウに表示したい内容を設定し、cursesに画面の更新を指示します。cursesは、変更箇所を検出し、画面上で実際に書き換える必要がある部分のみを更新する制御文字列を生成します。つまり、プログラマーは画面にどのように表示したいかを文字行列で示し、実際の画面表示作業はcursesが行います。

歴史


cursesは、ケン・アーノルドによって開発され、BSD UNIXの一部としてリリースされました。特にローグのようなゲームで広く利用されました。名称である「curses」は、前述の通り「cursor optimization」に由来します。また、viエディタでcursesが使用されていると解説されることもありますが、実際にはその逆で、viのカーソル移動のコードを参考にしてcursesが開発されました。

当初、cursesはtermcapライブラリを使用して実装されていましたが、後にカリフォルニア大学バークレー校でviとtermcapを改良していたマーク・ホートンがAT&Tに移籍し、terminfoを使用した別のバージョンを作成しました。このバージョンはUNIX System IIIとUNIX System Vに採用されました。AT&T版はライセンス上の制限があるため、BSD版とは独立して開発が進められました。AT&T版ではterminfoの採用に加え、以下のような改良が加えられました。

ハイライト表示(ボールド表示、アンダーライン表示)のサポート。BSD版では「強調」として一種類のみのサポートでした。
枠線の描画機能の強化。BSD版ではこの部分が貧弱でした。
* 色付きの表示のサポート。BSD版では未対応でした。

AT&Tでのcurses開発は1990年代中ごろに終了しましたが、同時期にX/OpenがcursesのAPIを定義しました。その後、ncursesとPDCursesの開発は継続されています。BSD版cursesはNetBSDによって保守され、多バイト文字対応やtermcapからterminfoへの移行などが進められています。

pcursesとPDcurses


ncursesは、LinuxOpenBSD、FreeBSD、NetBSD向けにGNUプロジェクトによって作成されたcursesの代替ライブラリで、後にPOSIX準拠のUNIXに移植されました。PDCurses(Public Domain Curses)は、UNIX以外のDOS、Windows、OS/2などに向けて、cursesとほぼ同じ機能を提供するライブラリです。クロスプラットフォームのゲームなどでは、Linuxでncurses、WindowsでPDCursesを使用することがあります。1990年代には、4.4BSDでBSD版cursesに複数のハイライト表示方法を追加するなどの改良が施されましたが、このバージョンはあまり普及しませんでした。それとは別に、AT&T版を模倣した別のバージョンの開発が開始され、少なくともpcurses(1982年開始)とPDCurses(1987年開始)の2つの実装が存在します。

ncurses


ncurses(new curses)はpcursesから派生したもので、1993年のバージョン1.8.1から始まりました。現在では、ncursesが最も普及しているcursesの実装であり、この影響を受けてNetBSDプロジェクトでのBSD版cursesの開発も進められました。

移植性


ncursesライブラリは、当初LinuxOpenBSD、FreeBSD、NetBSDを対象としていましたが、その後POSIX準拠の各種Unix系システムに移植されました。PDCursesは、APIや機能はncursesと完全に同一ではありませんが、DOS、Win32、OS/2のコンソール端末やX11などで動作します。両者間の移植は比較的容易であり、例えばローグライクゲームのADOMは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的なインターフェースではありません。

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。