ラベル Tcl/Tk の投稿を表示しています。 すべての投稿を表示
ラベル Tcl/Tk の投稿を表示しています。 すべての投稿を表示

2013年9月22日日曜日

C言語からTcl/Tkを呼び出す

前回のTcl/Tk版 Hello WorldをC言語から実行させることができたのでメモ.

まずは, ソース. Tcl_Initの前にTcl_FindExecutableが必須と説明している文書もあったが, 無くても動いたのでそのまま.
#include <tcl.h>
#include <tk.h>

int main(int argc, char* argv[])
{
    Tcl_Interp* interp;
    char        wish_cmd[] =
      "wm title . \"Hello World\"\n"
      "wm geometry . \"480x240\"\n"
      "label .label -text \"Hello, World! with Tcl/Tk.\"\n"
      "pack .label -side top -anchor w";
    
    interp = Tcl_CreateInterp();
    Tcl_Init(interp);
    Tk_Init(interp);
    Tcl_Eval(interp, wish_cmd);
    Tk_MainLoop();
    
    return 0;
}


次にコンパイル.
$ gcc -Wall hello_tcltk.c -ltcl86 -ltk86
/mingw/libの下にlibtcl86.aとlibtk86.aが配置されていたので, 上記のようにした.
また, CentOSでもTcl/Tkをインストールして, 上記のソースコードをコンパイルしてみた. こちらは, 以下のコマンドでOKだった.
$ gcc -Wall hello_tcltk.c -ltcl -ltk
ちなみに, これをMinGW/msysで実行すると, 当然のことながらld先生に「cannot find ...」と怒られる.

2013年9月21日土曜日

Tcl/Tkを初めて触った

HDD内のファイルを整理していたら, 大学/大学院時代に作成した数値計算のプログラムを見つけた. 懐かしくなってソースを眺めていたら, 数値計算したいという思いが湧き上がってきた.

当時のプログラムは, 主にC言語で記述してあり, 計算結果をGnuplotで可視化する代物なのだが, 初期値や条件を ソース内にベタ書きしてあるせいで, 値を変更すると再コンパイルが必要だった. さすがにこのままだと不便なので, まずはこの改良から取り掛かることにした.

改良の方針は以下のようにした.
  1. 初期値/各種条件の入力フォームを作成
  2. 物理量/数値誤差の表示欄を作成
  3. その他ログの表示欄を作成
  4. グラフ等の可視化は, Gnuplotで
  5. 【課題】OpenMPで並列化(主に逆行列ソルバー部分)
1~3をGUIで実装するつもりではあるが, 私はGUIプログラミングに対して, 苦手というか面倒臭いという思いが強かったため, 今まで手を出してこなかった(大学3年のころjava/swingで似たようなことして非常に面倒臭い思いをしたせいだろう).

そこで, 今回は以下の条件で自分に合った言語を見つけることにした.
  • マルチプラットフォーム対応
  • C言語と連携が可能
  • コーディングが簡単
ググっていろいろ放浪した結果, Tcl/Tkにたどり着いた. Tcl/Tkという単語は聞いたことあったが, 今まで触ったこと無かったし, 研究室で日焼けして色あせた入門書を見かけていたから, 単なる古臭い言語だとばかり思っていた.
しかし, インストールからHello Worldまでやってみたところで, お手軽にGUIを表示させられることを実感した. その時のメモを残しておく.

Tcl/Tkのインストール

mingw-getでインストール.
$ mingw-get update
$ mingw-get install mingw32-tcl mingw32-tk

Tcl/TkでHello World

適当に.
wm title . "Hello World"
wm geometry . "480x240"
label .label -text "Hello, World! with Tcl/Tk."
pack .label -side top -anchor w

Tcl/Tkスクリプトの実行

Tcl/Tkは, 「wish」コマンドを使うそうだ.
$ wish ./hello.tcl

実行結果

でた!

次は, C言語との連携にチャレンジ.