Starkitの使い方のメモ

なんとなくめんどくさそうな感じで使うのを避けてきたStarkitだけど、使ってみたいパッケージがstarkit形式で配布されてた && [source hoge.kit]でstarkit形式のパッケージが読みこめるというのを知って、ちょっと興味がでてきたので使い方をまとめてみる。。。

starkit形式

starkitはスクリプトやらバイナリやらを一つのファイルにまとめる仮想ファイルシステムで、starkit拡張の実体はlib/vfs1.x/starkit.tclのようだ。ActiveTclではデフォでインストールされている。
あと名前がややこしい。

SDXの使い方

SDXはsdx.kitで配布されているので、実行するにはtclの実行環境が必要。tclshよりtclkitを使ったほうがバグが無いかも。

tclsh sdx.kit qwrap hoge.tcl

とか

tclkit sdx.kit qwrap hoge.tcl


コマンド

使ってみる1(単一ファイルをqwrap)

hello.tcl

package require Tk
tk_messageBox -message "Hello World"

ラップする

tclsh sdx.kit qwrap hello.tcl -runtime tclkit.exe
rename hello hello.exe

使ってみる2(複数ファイル)

複数ファイルの場合、hoge.vfsという仮想ファイルシステムのrootになるディレクトリを作りそこにファイルをまとめて置く。また、スタートアップのスクリプトはmain.tclにしておく。あとファイルパス名に注意すること。

hello.vfs/main.tcl

package require Tk
set vroot [file dirname $argv0]
set datfile [file join $vroot data.dat]

set fs [open $datfile r]
set str [read $fs]
close $fs
tk_messageBox -message $str

hello.vfs/data.dat

This is a test file.

ラップする

tclsh sdx.kit wrap hello.exe -runtime tclkit.exe

日本語エンコードの追加

日本語のエンコーディングはデフォで入っていないので追加しないと日本語が文字化けする。ここではWindowsの例を示す。 まずtclkitを用意する。ここではtclkit-win32.upx.exeを使うことにする。

tclsh sdx.kit unwrap tclkit-win32.upx.exe

としてtclkitを解凍する。できたtclkit-win32.upx.vfsディレクトリ中のlib/tcl8.4/encoding/に必要なエンコーディング(例えばcp932,shiftjis,euc-jpなど)をオリジナルのとこから持ってきてコピーする。

sdx mksplit tclkit-win32.upx.exe

としてバイナリを分離する。tclkit-win32.upx.tailと、tclkit-win32.upx.headができる。

sdx wrap tclkit-win32.upx.exe -runtime tclkit-win32.upx.head として再ラップする。この場合tclkitを上書きしてるので、嫌なら先に適当に名前を変えておくこと。

(参考) http://www.equi4.com/tkunicode.html

リンク

http://www.interq.or.jp/japan/s-imai/tcltk/tclkit.html
http://wiki.tcl.tk/8186

コメントをどーぞ



CategoryTclTk


|New|Edit|Freeze|Diff|History|Attach|Copy|Rename|
Last-modified: 2015-03-04 (Wed) 15:47:27
HTML convert time: 0.011 sec.