klitclマニュアル



klitclの提供するKLIC述語

klitcl で用意された述語について述べます。

なお、Tcl が、変数値などを文字列を基本として処理する関係上、klitcl 内部で用いている文字列処理のための述語の一部を、ユーザ用に公開しています。

名前 機能
klitcl_init klitcl の初期化
tcl_init Tclインタープリタの生成
tk_init Tkメインウィンドゥの生成
tcltk_init tcl_init と tk_init を両方行う
tcl_eval Tcl の文の評価
tcl_evalfile Tcl スクリプトファイルの評価
tk_mainloop Tk イベント待ちループ起動
tk_wait 次の Tk イベントを待ちあわせる
tcl_quit Tclインタープリタの破棄と klitcld の終了
klitcl_quit klitclユーザプログラムの終了
klitcl_exit klitcl_quitに同じ
token 文字列をトークンに区切る
chop 文字列の最後の文字を削除
atoi 文字列を整数に変換
itoa 整数を文字列に変換

klitclの提供するTclコマンド

klitcl で用意されたTclのコマンドとしてklicがあります。

名前 機能
klic Tcl から klic 述語を呼び出す

プログラムの終了について

Tk により GUI を作るアプリケーションの場合、通常、プログラム終了のための手段は GUI の側で (終了ボタンを用意するなどの方法で) 提供することになります。
このことから klitcl を使ったアプリケーションにおいては、GUI 側で用意する「終了ボタン」などに、klic側の終了処理のための述語をバインドすることにより終了処理を書きます。この書き方は、例題にで示している通りですが、ここで、簡単な終了処理のサンプルを挙げます。
 1: quit(_,I,O) :- 
 2:     klitcl:tcl_quit(I,O1),
 3:     klitcl:klitcl_quit(O1,0).
この述語が呼ばれると、まず klitcl:tcl_quit を実行します。これにより、klitcld 側が保持していた Tcl インタープリタが破棄され、klitcld と klitcl の間の通信に使われたソケットが閉じられます。また、klitcld の実行も終了します。
最後に、klitcl_quit により、終了コード 0 でプログラムを終了します。
klitcl_quit によりユーザプログラムを終了する場合には、tcl_quit と klitcl_quit を続けて呼ぶ必要があります。
またこの他に、プログラムがシグナルにより停止(あるいは終了)させられることも考えられるますが、これについては以下の「シグナル・ハンドリングについて」で述べます。

シグナルハンドリングについて

●klitcl 側のシグナルハンドリング
klitcl 側では SIGHUP,SIGQUIT,SIGTERM をトラップしており、これらのシグナルを受けとった場合には、klitclを使用したユーザプログラムは終了コード1を持って終了します。それと共に、実行中の klitcld に SIGHUP を送ります。
SIGHUP を受けとった klitcld は、通信ソケットを削除し、終了コード1を持って終了します。
上記の以外のシグナルについては、klitcl では一切手をつけていませんが、SIGINT および SIGKILL については ユーザ側が新たなシグナルハンドラを書くことはできないようです。よって、klitcl を利用したユーザプログラムにSIGINT が送られたときに自動的に klitcld も終了するといった実装はされていません。
●klitcld のシグナルハンドリング
klitcld 側は、SIGINT,SIGHUP,SIGKILL,SIGQUIT をトラップしており、これらのシグナルを受けとったときには、klitcl 側に、klitcld が終了したということを知らせ、通信ソケットを削除したのちに終了コード 1 を持って終了します。
このとき、klitcl を使ったユーザプログラム側がイベント待ち状態にあった場合には、標準エラー出力に「Killd!」と表示した後に、終了コード 1 を持ってユーザプログラムを終了します。