1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/ext/tcltklib
nagai cd84994255 * ext/tcltklib/tcltklib.c: fix SEGV when compiled with Tcl/Tk8.3.x or older
* ext/tk/lib/tkextlib/tile/style.rb: bug fix


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@7239 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2004-11-09 18:35:52 +00:00
..
demo * renewal Ruby/Tk 2004-05-01 16:09:54 +00:00
lib * ext/tk/lib/tk/*: untabify 2004-10-11 04:51:21 +00:00
sample * ext/tk/lib/tk/*: untabify 2004-10-11 04:51:21 +00:00
.cvsignore
depend
extconf.rb * ext/tk/lib/tk/*: untabify 2004-10-11 04:51:21 +00:00
MANUAL.eng * ext/tcltklib/tcltklib.c: add TclTkIp#allow_ruby_exit? and allow_ruby_exit= 2004-09-11 17:45:53 +00:00
MANUAL.euc * ext/tcltklib/tcltklib.c: add TclTkIp#allow_ruby_exit? and allow_ruby_exit= 2004-09-11 17:45:53 +00:00
README.1st * ext/tcltklib/tcltklib.c: fix typo [ruby-talk:111266] 2004-09-02 17:17:20 +00:00
README.ActiveTcl * ext/tcltklib/tcltklib.c: fix typo [ruby-talk:111266] 2004-09-02 17:17:20 +00:00
README.euc
stubs.c * ext/tk/lib/tk/*: untabify 2004-10-11 04:51:21 +00:00
tcltklib.c * ext/tcltklib/tcltklib.c: fix SEGV when compiled with Tcl/Tk8.3.x or older 2004-11-09 18:35:52 +00:00

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(tof)
                                    2003/06/19  Hidetoshi NAGAI

本ドキュメントには古い tcltk ライブラリtcltklib ライブラリの説明
が含まれていますが,その記述内容は古いものとなっています.

まず,現在の Ruby/Tk の中心である tk.rb は wish を呼び出したりはせ
ずtcltklib ライブラリを wrap して動作するものとなっています.その
ため,古い説明記述で述べられているようなプロセス間通信によるオーバ
ヘッドは存在しません.

現在の tcltklib ライブラリでもTcl/Tk の C ライブラリをリンクして
直接に動かすことで,オーバヘッドを押さえつつ Tcl/Tk インタープリタ
のほぼ全機能(拡張ライブラリを含む)を使える点は同じです.しかし,
その役割はほぼ「tk.rb 以下のライブラリを効果的に働かせるためのもの」
と見なされており,その目的でメンテナンスされています.

tk.rb の高機能化に伴って,中水準のライブラリである tcltk ライブラリ
tcltk.rbはその存在意義を減じており現在ではメンテナンスは行わ
れていません.

なお,古い説明ではバインディングにおけるスクリプトの追加はできないこ
ととなっていますが,現在の tk.rb ではこれも可能であることを補足して
おきます.

以下がライブラリの古い説明文書です.
==============================================================
	tcltk ライブラリ
	tcltklib ライブラリ
		Sep. 19, 1997	Y. Shigehiro

以下, 「tcl/tk」という表記は, tclsh や wish を実現している, 一般でいう
ところの tcl/tk を指します. 「tcltk ライブラリ」, 「tcltklib ライブラ
リ」という表記は, 本パッケージに含まれる ruby 用のライブラリを指します.

[ファイルについて]

README.euc : このファイル(注意, 特徴, インストールの方法).
MANUAL.euc : マニュアル.

lib/, ext/ : ライブラリの実体.

sample/ : マニュアル代わりのサンプルプログラム.
sample/sample0.rb : tcltklib ライブラリのテスト.
sample/sample1.rb : tcltk ライブラリのテスト.
    tcl/tk (wish) でできそうなことを一通り書いてみました.
sample/sample2.rb : tcltk ライブラリのサンプル.
    maeda shugo (shugo@po.aianet.ne.jp) 氏による
    (`rb.tk' で書かれていた) ruby のサンプルプログラム
	http://www.aianet.or.jp/~shugo/ruby/othello.rb.gz
    を tcltk ライブラリを使うように, 機械的に変更してみました.

demo/ : 100 本の線を 100 回描くデモプログラム.
    最初に空ループの時間を測定し, 続いて実際に線を引く時間を測定します.
    tcl/tk は(再)描画のときに backing store を使わずに律義に 10000 本(?)
    線を引くので, (再)描画を始めると, マシンがかなり重くなります.
demo/lines0.tcl : wish 用のスクリプト.
demo/lines1.rb : `tk.rb' 用のスクリプト.
demo/lines2.rb : tcltk ライブラリ用のスクリプト.

[注意]

コンパイル/実行には, tcl/tk の C ライブラリが必要です.

このライブラリは,

	ruby-1.0-970701, ruby-1.0-970911, ruby-1.0-970919
	FreeBSD 2.2.2-RELEASE
	およびそのパッケージ jp-tcl-7.6.tgz, jp-tk-4.2.tgz

で作成/動作確認しました. 他の環境では動作するかどうかわかりません.

TclTkLib.mainloop を実行中に Control-C が効かないのは不便なので, ruby 
のソースを参考に, #include "sig.h" して trap_immediate を操作していま
すが, ruby の README.EXT にも書いてないのに, こんなことをして良いのか
どうかわかりません.

-d オプションでデバッグ情報を表示させるために, ruby のソースを参考に,
debug という大域変数を参照していますが, ruby の README.EXT にも書いて
ないのに, こんなことをして良いのかどうかわかりません.

extconf.rb は書きましたが, (いろいろな意味で)これで良いのか良く分かり
ません.

[特徴]

ruby から tcl/tk ライブラリを利用できます.

tcl/tk インタプリタのスクリプトは, 機械的に tcltk ライブラリ用の ruby 
スクリプトに変換できます.

(`tk.rb' との違い)

1. tcl/tk インタプリタのスクリプトが, どのように, tcltk ライブラリ用の 
   ruby スクリプトに変換されるかが理解できれば, マニュアル類が無いに等
   しい `tk.rb' とは異なり

	tcl/tk のマニュアルやオンラインドキュメントを用いて

   効率良くプログラミングを行うことができます.
   記述方法がわからない, コマンドに与えるパラメータがわからない...
     - Canvas.new { ... } と, なぜイテレータブロックを書けるの??
     - Canvas の bbox は数値のリストを返すのに, xview は文字列を返すの??
   と, いちいち, ライブラリのソースを追いかける必要はありません.

2. 個々の機能(オプション)を個別処理によりサポートしており, そのためサ
   ポートしていない機能は使うことができない(本当は使えないこともないの
   ですが) `tk.rb' とは異なり, tcl/tk インタプリタで可能なことは

	ほとんど

   ruby からも実行できます. 現在, ruby から実行できないことが確認され
   ているのは,

	bind コマンドでスクリプトを追加する構文
	「bind tag sequence +script」
                            ^

   のみです.
     - `. configure -width' をしようとして, `Tk.root.height()' と書い
      たのに, `undefined method `height'' と怒られてしまった. tk.rb を
      読んでみて, ガーン. できないのか...
   ということはありません.

3. wish プロセスを起動しプロセス間通信で wish を利用する `tk.rb' とは
   異なり, tcl/tk の C ライブラリをリンクし

	より高速に (といっても, 思った程は速くないですが)

   処理を行います.

4. `tk.rb' ほど, 高水準なインターフェースを備えていないため, tcl/tk イ
   ンタプリタの生成等

	何から何まで自分で記述

   しなければなりません(その代わり, tcl/tk ライブラリの仕様通り,
   tcl/tk インタプリタを複数生成することもできますが).
   インターフェースは(おそらく) ruby の思想に沿ったものではありません. 
   また, スクリプトの記述は

	ダサダサ

   です. スクリプトは, 一見, 読みづらいものとなります. が, 書く人にとっ
   ては, それほど煩わしいものではないと思います.

[インストールの方法]

0. ruby のソースファイル(ruby-1.0-なんたら.tgz)を展開しておきます.

1. ruby-1.0-なんたら/ext に ext/tcltklib をコピーします.
	cp -r ext/tcltklib ???/ruby-1.0-なんたら/ext/

2. ruby のインストール法に従い make 等をします.

3. ruby のライブラリ置場に lib/* をコピーします.
	cp lib/* /usr/local/lib/ruby/

(eof)