Skip to content

Latest commit

 

History

History

tcltklib

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
(tof)
	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 ([email protected]) 氏による
    (`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)