コンテンツにスキップ

curses

出典: フリー百科事典『ウィキペディア(Wikipedia)』

これはこのページの過去の版です。Melan (会話 | 投稿記録) による 2012年4月6日 (金) 07:18個人設定で未設定ならUTC)時点の版 (en:Curses (programming library)(2012年3月7日 9:25:53(UTC))の翻訳をマージ)であり、現在の版とは大きく異なる場合があります。

curses(カーシス、カーズィス)はUNIX系システムでの端末制御ライブラリである。テキストユーザインタフェース(TUI)アプリケーションを作成するのに使われる。名称は“cursor optimization”に由来する。文字のみを表示する端末(例えばVT100)を表示に使うアプリケーションが画面を管理する機能を集めたライブラリである[1]

概要

cursesのAPIの解説書はいくつかある[2]。最も一般的な実装では、数千に及ぶ様々な端末の機能を示したデータベースを利用している。端末データベースではなく専用デバイスドライバを採用している実装としては PDCurses があるが、そのような例は少ない。ほとんどの実装ではterminfoを使っており、一部はtermcapを使っている。古い端末でもほとんどの場合動作可能であり、単純な点が長所である。ビットマップ画像や様々なフォントを必要としないアプリケーションでは、X Window System を使うよりも curses を使った実装の方が単純で高速である。

curses を使用すると、プログラマは特定の端末装置を考慮せずに文字ベースのアプリケーションを書くことができる。cursesライブラリは、実行時に使用している端末装置を判別して適切に制御コードを送ることができる。curses では、実画面を1つ以上のウィンドウをマップしたものとしてモデル化する。各ウィンドウは文字の行列であり、プログラマは必要なウィンドウを実際に表示させたいように内容を設定して、curses に対して画面の更新を指示する。curses は内容の更新状況を調べ、実際に画面上で書き換える必要があるところだけを書き換えるような制御文字列を生成する。つまり、プログラマは画面にどう表示したいのかを文字行列で示し、curses がそれを実際に表示する作業を受け持つ。

歴史

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

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

当初、termcapライブラリを使って実装された。数年後、カリフォルニア大学バークレー校viとtermcapを改良していたマーク・ホートン英語版AT&Tに行き、terminfoを使った別のバージョンを作り、それが UNIX System IIIUNIX System V に採用された。後者はライセンス上の制限があるため、BSDとAT&Tそれぞれのバージョンは独立に開発されている。AT&T版ではterminfoを使っただけでなく、以下のような改良も行われている。

  • ハイライト表示(ボールド表示、アンダーライン表示) - BSD版では単に「強調」として一種類しかサポートしていなかった。
  • 枠線の描画 - BSD版ではこの部分が貧弱だった。
  • 色付きの表示 - BSD版では全く対応していない。

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

pcurses と PDcurses

ncurses は curses の代替として LinuxOpenBSDFreeBSDNetBSD 向けにGNUプロジェクトで作られたライブラリであり、その後、POSIX準拠のUNIXに移植されていった。PDCurses (Public Domain Curses)はUNIX以外の DOSWindowsOS/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から始まった[8]。ncurses は今では最も普及している実装であり、これに刺激されてNetBSDプロジェクトでのBSD版 curses の開発などが進められた[9][10]

移植性

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

curses を使ったソフトウェア

Tin(ニュースリーダー)。cursesを使ってカラー表示している。
Jack(CDリッパー)。cursesを使用

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

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

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

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

脚注

  1. ^ Thomas E. Dickey. “NCURSES - Frequently Asked Questions”. 2012年4月6日閲覧。
  2. ^ John Strang, Programming with curses, O'Reilly, ISBN 0-937175-02-1
  3. ^ Peter H. Salus (1994年10月). “The history of Unix is as much about collaboration as it is about technology”. Byte. 2012年4月6日閲覧。
  4. ^ a b Arnold, K. C. R. C. (1977). Screen Updating and Cursor Movement Optimization: A Library Package.. University of California, Berkeley. 
  5. ^ Kenneth C. R. C. Arnold; Elan Amir (1992年12月). “Screen Updating and Cursor Movement Optimization: A Library Package”. 2012年4月6日閲覧。
  6. ^ Thomas E. Dickey. “NCURSES - Frequently Asked Questions”. 2012年4月6日閲覧。
  7. ^ X/Open Curses, Issue 4 Version 2, Reference Pages”. The Open Group (1997年). 2012年4月6日閲覧。
  8. ^ Thomas E. Dickey (1996年12月). “NCURSES - New Curses”. 2012年4月6日閲覧。
  9. ^ NetBSD project (2004年2月). “CURSES_SCREEN(3), NetBSD Library Functions Manual”. 2012年4月6日閲覧。
  10. ^ Ruibiao Qiu (2005年9月). “NetBSD-SoC: Wide Character Support in NetBSD curses Library”. 2012年4月6日閲覧。
  11. ^ Thomas Biskup (1994-2007). “ADOM - The Past”. 2007年11月16日閲覧。

外部リンク