忍者ブログ

素人翻訳

適当に翻訳する。

ICCCM の古い文書の在り処(draftからver1.1まで)

ICCCM の1988年2月25日の草案(X11R2で配布。)
「The February 25, 1988, draft」

https://www.x.org/releases/X11R2/X.V11R2.tar.gz をダウンロード・解凍して、X.V11R2/doc/conventions/icc.doc.tbl.msを得る。(icc.doc.PSもある。)

-----

https://www.x.org/releases/X11R3/X.V11R3.tar.gz を解凍して得られる X.V11R3/doc/conventions/README によると、
「The Inter-Client Communication Conventions Manual that appeared here in draft form in Releases 1 and 2 has not been approved by the X Consortium. A revised set of conventions is under review by the Consortium for standardization; that process is expected to conclude at the end of November. The final manual will be made available once it has been approved.」

「(X11R1とX11R2で草案の形でこの場所(docディレクトリ)にあった Inter-Client Communication Conventions Manual は、Xコンソーシアムに承認されなかった。Xコンソーシアムは、改訂された規約を検討しているところ(標準化に向けて)。この作業は11月の終わりには完了する予定。承認されれば、規約の最終版は公開される。)」
とのこと。

X.V11R3にはICCCMの文書は入ってない。
この間に、ICCCM ver2.0 の改訂履歴に言う「The July 27, 1988, Draft」と「The Public Review Drafts」がある。

-----

ICCCM ver1.0 は、X11R4で配布された。

https://www.x.org/releases/X11R4/tape-2/
にある tape-2.** をすべてダウンロードして、ファイルのあるディレクトリで

$ cat tape* | tar xvfz -

を実行して解凍。
すると、「tape-2/mit/doc/ICCCM/icccm.tbl.ms」に ICCCM ver1.0 の文書ができる。

-----

ICCCM ver1.1 は、X11R5/mit/doc/ICCCM/icccm.msにある。
(https://www.x.org/releases/X11R5/mit-*.tar.Z)

-----

X11R4のテープファイルの解凍について。

https://www.x.org/releases/X11R4/READMEには、

% cat *.?? | uncompress | (cd /usr/local/src/R4/; tar xvf -)

で解凍できると書いてあったのだが、自分の環境には compress、uncompressがなかった。

$ cat tape* | tar xvf -
tar: アーカイブは圧縮されています. -Z オプションを使ってください
tar: Error is not recoverable: exiting now
$ cat tape* | tar xvfZ -
tar (grandchild): compress: exec 不能: そのようなファイルやディレクトリはありません
tar (grandchild): Error is not recoverable: exiting now
tar: Child died with signal 13
tar: Error is not recoverable: exiting now
$ compress -h
bash: compress: コマンドが見つかりません
$

「Z」を小文字にして、別のコマンド(gzip?)を使う。

$ cat tape* | tar xvfz -

で解決。

PR

X11におけるGraphics Context

 X11 のグラフィクス・コンテクストは、
・X10 の反省から生まれた。
・描画関数が受け取る引数の中のあるものを纏めたもの。

=====

参考論文
「The X Window System Version 11」
James Gettys、Philip L. Karlton、Scott McGregor
CRL 90/08(6頁、26〜29頁、33〜36頁など)

=====

Graphics Context の狙い

 X11 から GC(Graphics Context)の利用が始まった。X10(X バージョン 10)では使われていなかった。X10 では、描画関数を呼び出す度に、必要な情報すべてを引数で渡していた。VAXstation 100 に倣った「state-free」な描画手続きである。このやり方のまま X10 にない描画機能を追加していくと、描画関数の引数が増えすぎる。Xクライアント・Xサーバ間の通信量や、関数インタフェイスの複雑化が問題。

 GC を用いた「state-based」な描画手続きだと、
(1)描画リクエストで使う資源の初期化(リソースIDの割当て等)の手間・通信量が減る。
(2)描画リクエストの引数の数が減ることによって、リクエストそのものが小さくなり、Xクライアント・Xサーバ間の通信量が減る。
(3)描画リクエストの関数定義は、引数の数が減ってスッキリする。

 XクライアントとXサーバとの接続を表す情報塊の中にウィンドウと描画文脈の情報を含めるかどうか、あるいは「ウィンドウ」を表す構造体の中にグラフィックス・コンテキストを含めるかどうか、検討された。こうしたやり方だと、GCを用いる現在のやり方よりも描画処理のオーバーヘッド(通信量)が一層減るものの、マルチ・スレッド環境への対応が大変で、「ウィンドウ」構造体が大きくなりすぎる。そこで、X11では描画リクエストの度に「ウィンドウ」と「グラフィクス・コンテクスト」を指定することになった。

GC の効果

 GC の採用によって、Xlib の描画手続きは一部の引数をプロトコル・リクエストから取得し、残りの引数を同リクエストで指定した GC から取得するようになった。毎度毎度同じ値が指定されるような引数は GC の一部として記録されるようになったので、描画リクエストのサイズが小さくなった。

 どの引数を GC に入れ、どの引数を入れないのか、決めるのが大変だった。頻繁に値の変更される引数を Graphics Context に入れてしまうと、GC の内容を変更するリクエストと実際の描画リクエストの二つを描画の度に送信しなければいけなくなる。最終的に現在の23個をGCに入れることにした。Xlib.h の構造体「XGCValues」の通り。フォントなども GC に含めることになった。頻繁にフォントを替える場合には、複数の GC を用意して、描画の度に指定する GC を替えるようにすれば、GCの内容を変更するリクエストを何度も送らなくて済むと考えられた。

 GC がなければ、

XFillRectangle(display, drawable, gc, x, y, width, height);

は次のようになっていた。

XFillRectangle(display, drawable, x, y, width, height, function, planemask, foreground, background, tile_or_stipple, ts_x_origin, ts_y_origin, clip_x_origin, clip_y_origin, clipmask);

問合せ不可

 X11プロトコルでは、アプリケーションはGC等の内容をサーバに問い合わせることができない。一度でもアプリケーションの手元にあった情報は、アプリケーションが自力で記憶しておくものと決めた。

 関数 XGetGCValues は、Xlib が記憶している GC のキャッシュを調べて、その値を返す。X サーバには問い合わせない。

カレンダー

03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30

最新コメント

[08/18 NONAME]
[05/18 NONAME]
[04/09 NONAME]
[03/21 NONAME]
[03/20 NONAME]

最新記事

ブログ内検索

広告

バーコード

広告