iPAQでTcl/Tk

PocketPC用のTcl/Tkである(eTcl for Windows Mobile 2003)がリリースされた。
実際、Windows Mobileの最新版であるWindows Mobile 5.0でも動作するので、
Windows Mobile 5.0搭載のHP iPAQ hx2490で動作確認を行った。

eTcl for Windows Mobileは、starkitのように単一の実行形式になっているので、
取り扱いやすいのが特徴である。インストールも簡単に行える。
また、Windows Mobile専用の拡張wce packageを備えるなど本格的だ。
残念ながらSigmarionIIIなどのHandheld PCには対応していない。PocketPC専用である。

スクリーンショット

一応、Thread機能が有効になっている。日本語も問題なく使える。
なんと、Tcl/Tkの版は最新の8.4.12である。

eTcl console eTcl tile

HP iPAQ hx2490 ← HP iPAQ hx2490 + Thumb Keyboard

インストール

eTclのインストールは簡単で、.cabファイルをPocketPC上で実行するだけである。
.tcl拡張子とeTclの関連付けは、GSFinder+PocketTweakなどのアプリケーションで行える。

ベンチマークテスト

いつものように、自作ソフトTkEngine for PocketPCで性能を測定した。
PocketPCのQVGA画面に合わせてTkEngineのポーティングを行っている。
左が試作版で、右が正式版(PocketPCのアプリケーションっぽくしてみた)。

試作版 正式版

やはり、この手のグラフィックス関連のベンチマークは苦手のようである。

OS/CPUTkEngine値
iPAQ hx2490 / Windows Mobile 5.0 / PXA270 520MHz8
SigmarionIII / WindowsCE.NET 4.1 / PXA255 400MHz6
GENIO e550G / PocketPC 2002 / PXA250 400MHz5
PC / Linux / Pentium 90MHz3
PC / Windows XP / PentiumIII 800MHz30
※eTclは、8.4.12-pl16を使用した。

次に以下の3DESコードを実行した時の時間を測定した。
des-1.0.0のパッケージを使用した。

set cur [file dirname [info script]]
set auto_path [linsert $auto_path 0 [file join $cur des]]
package require des

proc 3des {} {
    set iv [binary format H16 11224488eeddbb77]
    set Key [DES::Init cbc passwd01passwd02passwd03 $iv]
    set ciphertext [DES::Encrypt $Key "Hello World!"]
    DES::Reset $Key $iv
    set plaintext [DES::Decrypt $Key $ciphertext]
    DES::Final $Key
}

time {for {set i 0} {$i < 1000} {incr i} {3des}} 1

やっぱり、PocketPCは遅いというか、Pentium4は速い。

OS/CPU実行時間
iPAQ hx2490 / Windows Mobile 5.0 / PXA270 520MHz25.8秒
PC / Windows XP / Pentium4 3.20MHz1.8秒
※eTclは、8.4.12-pl16を使用した。

ポーティング・ノウハウ

TkEngine等をPocketPCにポーティングした時のノウハウをまとめた。
ファイル・パス
以下のようにスクリプトを実行したフォルダからの暗黙のパスは使えない。
ファイルがあるのに見つからないというエラーになる。

image create photo disk -file ico/disk.gif

そんな場合は、スクリプトのパスから絶対パスを求めて使います。

set curdir [file dirname [info script]]
image create photo disk -file $curdir/ico/disk.gif

画面レイアウト
PocketPCはQVGAが基本なので、画面のレイアウト変更を余儀なくされる。
pack時の-fillや-expandなどの調整だけではうまくいかないことが多い。
メニュー
アプリケーションのメニューは、画面の一番下に表示される。
メニューを作成しないと、consoleのメニューが表示されるので、
メニューは必ず作る必要がある。
フォント
デフォルトのフォントはいまいちなので変更する。

option add *Font {{MS 明朝} 9}

タップ&ホールド
マウスの右ボタンメニューは、タップ&ホールドで出るようにする。
以下のように記述すると、タップ&ホールドをマウスの<3>にbindしてくれる。。

package require wce

wce tapandhold .anim on

画面サイズ
マニュアルによると、以下のように記述すると
フルスクリーンになると書かれているが、正常に動作しない。

wce fullscreen .

仕方ないので、以下のように記述しているが、
QVGAサイズ用になるので、あまり美しいとは言えません。

wm geometry . 240x267

Windowsの(X)ボタン
画面右上の(X)ボタンの操作だが、以下の記述が無視される。
PocketPCは(×)ボタンを押してもアプリケーションは終了しないという
ポリシーなので、それに違反するので無視しているのだろうか。

wm protocol . WM_DELETE_WINDOW exit

Tileパッケージ
GUIのLook&Feelを変更するTileパッケージを使うことができるが、
現在のeTclではwinnativeスタイルとxpnativeスタイルが使えない。
defaultスタイルはX11なのでスタイルを設定しないとPocketPCネイティブになる。
TileパッケージにはTkにはないcombobox,notebook,treeview,progressbarのWidgetがある。

HP Thumb Keyboardとの相性問題

Thumb Keyboardを使ってText/Enter WidgetでEnterキーを入力すると、
改行時と日本語入力の確定時に□や・のような文字が入力される。
PocketPCのソフトキーボードでは問題ないので、相性問題だろうか。
Thumb Keyboardにかなり期待していただけに残念だ。。

その後、以下の回避策が見つかった。

# for HP Thumb Keyboard
pack [text .text]
bind .text <Key> {if {%k==0 && "%A" eq "\r"} break}

まとめ

eTclのパッチレベルは頻繁に上がっているが(現状pl16)、
今のところeTclに大きな機能制限はないようである。
動作も以前からあるJeff氏ポーティング版より安定しているし、
ソケットも使えるのでネットワーク対応のアプリも作れる。
今後、eTclで作られたキラーアプリの登場に期待したい。

関連リンク