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

***starkit形式 [#l1bb5d56]
starkitはスクリプトやらバイナリやらを一つのファイルにまとめる仮想ファイルシステムで、starkit拡張の実体はlib/vfs1.x/starkit.tclのようだ。ActiveTclではデフォでインストールされている。~
あと名前がややこしい。
-Tclkit(tclkit.exe)~
wishと実行に必要なライブラリを一つにをまとめた実行形式で、Starkitのページで配布されている。Starpackを作るのに必要。
-Starkit~
ユーザーが作ったスクリプトなどをstarkit仮想ファイルにまとめたものをこう呼ぶようだ。
-Starpack~
ユーザーの書いたスクリプトと実行環境抱き合わせたもの(Freewrapみたいな)をこう呼ぶようだ。Tclkit + Starkit = Starpack。作るのにはTclkitが必要。
-SDX~
仮想ファイルにラップしてStarkitやStarpackを作ったり、アンラップしたりするツール。

***SDXの使い方 [#b40d2466]
SDXはsdx.kitで配布されているので、実行するにはtclの実行環境が必要。tclshよりtclkitを使ったほうがバグが無いかも。
 tclsh sdx.kit qwrap hoge.tcl
とか
 tclkit sdx.kit qwrap hoge.tcl
~
コマンド
-単一のtclスクリプトをstarkitにラップする~
 sdx qwrap myscript.tcl ?name? ?-runtime runtime.kit?
 name          name.kitに名前を変更
 -runtime file 実行環境付き

-mystar.vfsディレクトリからstarkitを作る(複数のファイルのときはこっちを使う)~
 sdx wrap mystar.kit ?options...? 
 -interp name  tclkit以外の実行環境にしたいとき(バッチファイルの出力が変るだけ)
 -nocomp       ファイルを圧縮しない
 -runtime file 実行環境付き
 -verbose      ラッピング中の挙動を一々報告する
 -writable    変更を可能にする(?)

-starkitをアンラップする。~
 sdx unwrap mystar.kit

-starkitに含まれてるファイルのリストを表示する~
 sdx lsk mystar.kit
 sdx ls ?-l? mystar.kit
 lsでディレクトリなどを掘り下げる時はsdx ls -l mystar.kit/libのようにする。

-バージョン情報(もっとも新しいファイルの日付)を表示する~
 sdx version mystar.kit~

-コピーする。使ってない空きスペースを取り除くのでサイズが最適化される。
 sdx mkpack oldstar.kit newstar.kit

-headファイルとtailファイル(mystar.head,mystar.tail)に分割する
 sdx mksplit mystar.kit
headファイルにはstarkitのヘッダやexe(starpackの場合?)が含まれていて、tailファイルにはMetakitのデータが含まれている。Tclkitにエンコードを追加したいときは、このコマンドで分割し、tailファイルを作り直すようだ。
headファイルにはstarkitのヘッダやexe(starpackの場合?)が含まれていて、tailファイルにはMetakitのデータが含まれている。Tclkitにエンコードを追加したいときは、このコマンドで分割し、tailファイルを作り直すようだ。~
~
headとtailの結合処理
 copy /b mystar.head + mystar.tail mystar.exe

-サーバに接続してstarkitを自動アップデートをする。
 sdx update mystar.kit ?options...?
 -from url  urlのStarsyncサーバ(http)に接続する。
 -n         差分を表示するだけでアップデートは実行しない。
http://mini.net/sdarchive/ に色々なstarkitがある。

-FTPサーバ
 sdx ftpd ?option?

-HTTPサーバ
 sdx httpd ?option?

***使ってみる1(単一ファイルをqwrap) [#w3587858]
hello.tcl
 package require Tk
 tk_messageBox -message "Hello World"

ラップする
 tclsh sdx.kit qwrap hello.tcl -runtime tclkit.exe
 rename hello hello.exe

***使ってみる2(複数ファイル) [#v643d28a]
複数ファイルの場合、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

***日本語エンコードの追加 [#h8ac6dc2]
日本語のエンコーディングはデフォで入っていないので追加しないと日本語が文字化けする。ここでは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

***リンク [#r73d677a]
http://www.interq.or.jp/japan/s-imai/tcltk/tclkit.html~
http://wiki.tcl.tk/8186


***コメントをどーぞ [#d131bb86]
#comment

----
[[CategoryTclTk]]

|New|Edit|Diff|History|Attach|Copy|Rename|
HTML convert time: 0.004 sec.