シグマリオン3でTcl/TK

2003.5.28 NTTドコモは、WindowsCE.NET 4.1を搭載したシグマリオン3を発売しました。
最近になってシグマリオン3でAirH"が動作するようになり、爆発的なヒットを予感させます。
さて、前回の報告では、WindowsCE 3.0との互換性の問題で、TKのデモやtkcon.tclを実行すると、
OSがフリーズしていました。今回はそのリベンジで、回避策を見つけることができました。
シグマリオン3でWindowsCE 3.0対応のTcl/Tk 8.4.4 for Windows CEの動作確認をしました。

シグマリオン3 ← 上からGENIO e550G, シグマリオン3, モバイルギア2

インストール

インストール方法は基本的にPocket PCの場合と同じですが、シグマリオン3で動作させるには
http://www.geocities.co.jp/SiliconValley-Cupertino/2039/dummydll.lzh が必要になります。
dummydll.lzhを解凍して取り出したARM版のaygshell.dllとdoclist.dllをTcl/binにインストールします。
この回避策を見つけるのに2ヶ月もかかってしまいました。(^^;) ちなみに、
このDLLが必要だということは、Tcl8.4 for CEのビルドにPocket PC用のSDKが使われているのでしょう。
インストールに必要なメモリ容量は7.16MBです。(ダミーDLLとtkconを含む)

動作確認

シグマリオン3で自作ソフトTkEngineを動作させてみました。

TkEngine

画面サイズは5インチですが、800x480の解像度があるので、見た目はミニWindows XPのような感じです。
自作ソフトの他に、TkのデモとTkconの動作を確認できました。

ベンチマーク

いつものように自作ソフトTkEngineで性能測定をしてみました。
CPUをクロックアップすると、ちょっとだけ速く動きます。

OS/CPUTkEngine値
WindowsCE.NET 4.1 / PXA255 530MHz(クロックアップ)9
WindowsCE.NET 4.1 / PXA255 400MHz6
PocketPC 2002 / PXA250 400MHz5
Linux / Pentium 90MHz3
Windows XP / PentiumIII 800MHz30
xclkcfg.exeというクロックアップツールを使いました。

以下のコードで性能測定をしてみました。

time {for {set i 0} {$i < 10000} {incr i} {set ary($i) $i}}

測定結果は以下の通りで、同じCPU性能のPocketPCに比べてかなり速いことがわかります。OSの差でしょうか。

OS/CPU時間
Windows CE / VR4121 131MHz約14.2秒
PocketPC / PXA250 400MHz約2.9秒
Linux / Pentium 90MHz約2.2秒
WindowsCE.NET 4.1 / PXA255 530MHz約0.3秒
Windows XP / PentiumIII 800MHz約0.1秒

FAQ

Q: Tcl/Tk 8.4.4 for CEに何か制限事項はありますか?
A: 以下の制限事項がKnown issues:に記述されています。

Q: tcl84.exeを起動するとエラーが出ます。回避策はありますか?
A: tcl84.exeはシグマリオン3で動作しないので、代わりにtkcon.tclを使います。
ただし、上記制限によりメニューは非表示になります。

Q: IMEで日本語入力変換中の文字が□□□になります。回避策はありますか?
A: 今のところ回避策はありません。

Q: tkconのフォントが小さいのですが、大きくできますか?
A: env(HOME)にtkcon.cfgファイルを作成してフォントを設定します。

# フォント設定
tkcon font {MS ゴシック} 15
after 100 {tkcon font [tkcon font]} ;# 裏技(なぜかこれがないとダメ)

Q: SDメモリカードにTclスクリプトを置いて実行すると、
"\SD" no such file or directory というエラーが出ます。回避策はありますか?
A: これは外国ソフトによく見られる現象のようで、カードフォルダに日本語や
スペース(空文字)が使われていると起こります。
レジストリエディタで、以下のレジストリの"Folder"="..."のところを変更します。

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\SDMemory] 
"Name"="SD Memory Card" 
"Folder"="SD メモリ カード" 

[HKEY_LOCAL_MACHINE\System\StorageManager\Profiles\PCMCIA] 
"Name"="PCMCIA/Compact Flash Device" 
"Folder"="メモリ カード" 

の "Folder" のようで、これらだけ書き換えれば、 
とりあえずフォルダ名は変更されました。 
# [HKEY_LOCAL_MACHINE\System\StorageManager\Profiles] には 
# 他にも、MMCやら、CDROM/DVDドライブの定義があります。 
※レジストリの変更は大変危険ですので自己責任でお願いします。

レジストリ変更後、シグマリオン3をリセットしてください。これで新しいフォルダ名が適用されます。

Q: どんなTcl拡張パッケージが動作しますか?
A: 今のところ、以下のパッケージが同梱されています。

encoding, http1.0, http2.4, msgcat1.3, opt0.4, tcltest2.2
BWidget1.6, DDE1.2, Registory1.1, Tcllib1.5, TkTable2.8
これ以外にも100% Pure Tclで記述されたパッケージなら動作すると思われます。
今後、Cで記述されて拡張パッケージも出てくる予定です。

Q: H/PCでコンテキストメニューはどのように作るのでしょうか?
A: ペンを使うので、右ボタンメニューは使えません。
IEなどはAlt+Clickでコンテキストメニューを開くようになっています。
どこのPCでも動作するように汎用的に記述するとこうなります。

bind all <3> {tk_popup .popup %X %Y}
bind all <Alt-1> {tk_popup .popup %X %Y}
bind all <KeyPress> {+
    switch %k {
    93 {tk_popup .popup %X %Y}
    }
}

Q: WindowsCE.NET 4.xへの正式対応はないのでしょうか?
A: 開発者のJeff氏が.NET機を持っていないので難しいようです。(^^;)


Tcl/Tk 8.4.3 for Windows CE