Touch'n Go!

since 2000/04/17
last update 2000/11/07

まずはじめに

 このソフトウェアを使用すること自体に関して、作者(mailto:kazhida@abplus.com、以下同様)はその代償を要求することはありません。その反面、このソフトウェアは、全くの無保証であり、このソフトウェアを使用することによって、何らかの損害を被ったとしても、作者はその責任を負うことはありません。

 このソフトウェアのソースは、改変して使用すること、もしくは他のソフトウェアに流用することができます。ただし、クリエータIDは作者の名義で登録されているため、改変して再配布する際には、クリエータIDを変更するか、もしくは、改変内容を作者に通知し、オリジナル配布物にそれを取り込むという形式にしてください。
 また、このソフトウェアを他のアプリケーション(商用、フリーウェアを問わず)に同梱して配布することができますが、その場合、このドキュメントも同梱し、かつ、このソフトウェアが無保証であることがユーザにわかるように明示してください。

概要

 Touch'n Go!は、sysAppLaunchCmdGotoを起動コードとするアプリケーションの起動を補佐するユーティリティで、それ自体では、後述するアプリの差し替え設定及びそのテストをする機能しかもっていません。
 このようなソフトウェアが必要になる背景には、2つの要因があります。一つは、PalmOSのメモリ管理をすり抜けること、そしてもう一つは置き換えアプリケーションへの対応です。

起動コードと特定レコードの呼び出し

 Palmwareは、OSから呼び出される際に、起動コードによって、何をすべきかを知らされます。このことによって、通常の起動(ラウンチャからの起動)以外に、HotSync時の動作やアラームなどに対応します。
 その中のひとつに、sysAppLaunchCmdGotoという起動コードがあり、これは、SDKのリファレンス・マニュアルにも
sysAppLaunchCmdGoto
Go to a particular record, display it, and optionally select the specified text.
とあるように、特定のレコードを表示するように要求します。

 これは、通常は「検索」から使用されることを想定している機能なのですが、これを利用することで、特定のPalmwareの特定のレコードを表示する機能を実現することができます。具体的には、SysUIAppSwitchの引数でsysAppLaunchCmdGotoを指定し、パラメータとして、どのレコードを表示するかというデータを渡します。

メモリ管理

 PalmOSのメモリ管理では、メモリ・チャンク(一塊のメモリ)に所有者IDが設定されており、所有者となっているアプリケーションの終了時にメモリの解放が行われるようになっています。そのため、sysLounchCmdGoToを起動コードとして、SysSwitchUI APIをコールするする際に渡すパラメータは、通常の方法では切り替えた後のアプリケーションに伝わりません。Touch'n Go!では、切り替える前にMemPtrSetOwner APIでメモリチャンクの所有者IDを変更することで、切り替え後のアプリケーションでパラメータを使用できるようにしています。ただし、MemPtrSetOwnerはSystem Use Onlyとなっており、いわゆるUndocumentedな仕様の範疇に含まれます。

 これまでにも、作者のものを含め、sysLonchCmdGoToを利用して、他のアプリケーションと連携するアプリケーションが作られていますが、多くのアプリケーションが、Undoumentedな仕様に依存するというのは、好ましい状況とはいえません。そこで、その部分を特定のユーティリティに担当させることで、リスクを軽減しようというのが、このソフトウェアのもっとも大きな目的です。言い換えれば、公開されているAPIのみで、上記の問題が解決できれば、このソフトウェアの存在意義の大半は失われます。

 なんて、書いているそばから、SDK3.5では、MemPtrSetOwnerが公開APIの仲間入りをしてしまいました。このソフトウェアの存在意義の大半は失われました。

置き換えアプリケーションへの対応

 Palmの世界では、標準のアプリケーションのソースが公開されていることもあって、標準アプリケーションをサポートするようなソフトウェアが比較的容易に作成できます。また、それと同時に、標準のアプリケーションを拡張・改良した置き換えアプリケーションも数多く存在します。
 標準アプリケーションをサポートするアプリケーションから、置き換えアプリケーションを呼び出すには明示的にそれを指定する必要があり、そのため、ユーザからみれば、開発者が対応してくれるまでは、連携機能を有効に活用できない、開発者からみれば、数多くある置き換えアプリすべてに対応するのは困難という、問題があります。

 Touch'n Go!では、その不満を軽減するため、予定表、アドレス、ToDo、メモ帳の4つのアプリケーションに限っては、起動するアプリケーションをすり替える機能を持っています。このため、呼び出し側が、(Touch'n Go!が提供する手段で)これらの標準アプリケーションを起動しようとしたときに、ユーザが設定した置き換えアプリケーションが起動するようになっています。
 ただし、これは置き換えアプリケーションが完全に互換性をもっている場合おいてのみ、正しく機能します。そもそも置き換えアプリケーションがsysAppLaunchCmdGotoに対応していなければ、当然機能しませんし、最悪の場合、システムをクラッシュさせてしまうかもしれません。使用にあたっては、そのリスクを十分に考慮してください。

使い方

注意:実機で使用するに先立って、あらかじめエミュレータ環境でテストしておくことを強くお勧めします。
  1. TnGO.prcをPalmOSデバイスにインストールし、Touch'n Go!をタップすると、設定フォームが表示されます。
  2. ここで、一番下の「有効にする」をチェックすることで、Touch'n Go!の本来の機能である、sysAppLaunchCmdGotoの橋渡しが行われるようになります。デフォルトでは、無効になっていることに注意してください。
  3. 予定表(Datebook)、アドレス(Address)、ToDo、メモ帳(Memopad)については、それぞれに置き換えアプリケーションを設定することができます。
    それぞれの置き換えアプリケーションが期待した動作をするかどうかを確認するには、右部のテストボタンをタップします。このとき表示されるダイアログにレコード番号と検索対象を指定してOKをタップすると該当アプリケーションに切り替わるはずです。切り替わらない、あるいは、システムがクラッシュする場合、アプリケーションが対応していないということになります(Touch'n Go!のバグである可能性もありますが)。
  4. これで、準備完了です。
    Touch'n Go!を利用するアプリケーションを使用してください。

開発者の方へ

 Touch'n Go!のオリジナル・アーカイブに含まれている、useTnGO.c、useTnGO.hをコピーして、そこで定義されている関数を利用してください。
 useTnGOでは、Touch'n Go!が有効になっているかどうかを調べる関数と、Touch'n Go!を利用してアプリケーションを起動する関数が定義されています。それぞれの関数の詳細については、useTnGO.hを参照してください。
 また、ユーザは無保証を表明しているソフトウェア(Touch'n Go!自体)を使用することを好まないかもしれません。このような場合を想定して、Touch'n Go!を使用しなくても、それなりに動作するようにすることをおすすめします。あるいは、Touch'n Go!を利用するアプリケーションの作者がTouch'n Go!も含めて動作を保証するという形にしてもかまいません(ソースは作者のサイトで公開しています)。
 また、Touch'n Go!のバグを報告された場合、オリジナルの作者に連絡するか、各自で対処していただくようお願いします。

FAQ

Q:なぜ、Touch'n Go!という名前なのですか?「'n」のところが意味不明です。

A: 起動されてもすぐに別のアプリケーションに切り替えてしまうところから、Touch and Go!という名前を思いついたのですが、PalmOSの標準のランチャーで名前が表示しきれなかったので、省略形を用いることにしました。

Q:なぜ、無保証を強調するのですか?保証する努力をしないという態度は感心しません。

A:  呼びだす側のアプリケーションと呼びだされる側のアプリケーションの仕様を知る手段はないため、この2つのアプリケーション間での整合性を保証することはできません。

Q:動作確認されているアプリケーションはどれくらいありますか?

A: 互換性リストを参照してください。最新版は、オリジナルの作者のサイトで公開しています。

Q:最新情報はどこで知ることができますか?

A: オリジナルの作者のサイト(http://www.abplus.com/palmware/)を参照してください。

Q:なぜ、GPLで配布しないのですか?後から有料化しようとする魂胆ですか?

A: ソースコードについては、将来的に作者自身が他のプロダクトに流用するかもしれません。また、そのプロダクトはGPLにすると不都合のあるかもしれません(作者はソフトウェアの受託開発を本業としています)。GPLを適用してしまうと、自分の首をしめることになるおそれがあるからです。  もちろん、後から有料化することはありません。このソフトウェアは、他のアプリケーションから利用されることを前提としているため、それ自体を有料化してもあまり、得をすることはありません。

Q:バグを見つけました。誰に報告すればよいですか?

A: オリジナルの作者(mailto:kazhida@abplus.com)もしくは、何らかのアプリケーションに同梱されていた場合はその作者のいずれか(あるいは両方)に報告してください。

Q:自分の作ったアプリに同梱したいと思います。 どのような手続きをとればよいですか?

A: 自由に行ってください。ただ、バグがあった場合の連絡などを行いたいので、事後でもかまわないので、報告していただけると助かります。

最後に少し本音

 作者にとって、Palmの最大の魅力は、標準のPIMアプリケーションがそれなりにしっかりしていて(不満がないわけではない)、かつ、その仕様がソース公開という形でオープンになっているため、サポート・ユーティリティが比較的簡単に作れる、いわば、かゆいところは自分で掻けるというところにあります。
 ということで、作者は、そのようなユーティリティを中心に作っているのですが、前述のように、置き換えアプリケーションを使っている方も多く、それとの連携を要望されることも少なくありません。ところが、作者自身は置き換えアプリケーションがあまり好きでない(ROM内のアプリを使わないというのはもったいないとか、いらない機能が含まれているのが何となく無駄にかんじられるとかいう貧乏性な気質に起因しているようです)ので、それをサポートすることが困難です(使い込まなきゃわからないような不具合などに対処しきれない)。そこで、そのあたりのリスクをユーザに転嫁してしまうという意図もあったりします。
 そういう訳なので、事実をいってしまえば、置き換えアプリケーションのサポートについては、あまり積極的ではありません。現在でも完全互換でないためにうまく動作しないアプリケーションが存在していますが、それらについては有志の方の努力に期待するだけで、作者みずからが改善に努めることは期待しないでください。優れたPalmwareの中には海外の製品も多く、作者が外国語というものがからきし駄目なので、それらの作者にコンタクトをとれないというのも非常に大きな要因なのですが。
 最後になりましたが、このような素敵なプラットフォームを提供してくれたPalm Computingと、参考になるソースを公開してくださっている先達に感謝しています。また、拙作のソースを眺めてPalmwareを開発してみようと思ってくださる人が少しでも増えれば、それに勝る喜びはありません。

互換性リスト

テスト環境

注:このリストは、単に動かしてみたらこうなったという事例を集めているに過ぎないので、動作を保証するものではありません。

※上記以外の環境での動作レポートを募集しています。また、上記の環境でも下記と異なる状況の場合には、報告してくださると助かります。
Datebk3 とりあえず(A)環境では、予定表互換で動作するようです。
起動時にPOSEのWarningがでますが、直接動かした場合でも同様のWarningがでるので、問題ないでしょう。
ActionNames 作者が使用方法を理解していないのと、(A)環境で直接動かした場合でも、POSEのWarningがかなりでるので、ちゃんと使えるのかどうかがわかりません。
いきなり、クラッシュすることはないようです。
ToriAheadsとの組み合わせで、「致命的なエラー DataMgr.c, Line:8589,致命的なエラーが発生しました」→リセットという現象が起きているとの報告がありました。
ToriAheadsPR4では、うまくいくようになったとの報告もありましたので、ToriAheadsの側の問題だったかも知れません。
予定表+ (C)環境で動作しているという報告がありました。
ToDoPlus (A)環境でざっと動かしてみた範囲では、きちんとToDo互換の動作をするようです。
Touch'n Go!の開発途中で、MemoPlusと同様の不具合があったような気がするのですが、現在では再現しないので、気のせいかもしれません。
(B)環境で、ToriAheadsとの組み合わせで、「致命的なエラー DataMgr.c, Line:8589,致命的なエラーが発生しました」→リセットという現象が起きているとの報告がありました。
MemoPlusメモ帳互換なので、起動そのものについては問題ないようなのですが、レコード番号の管理が独自のようで、意図したレコードのデータを表示してくれません。
(B)環境で、ToriAheadsとの組み合わせで、「致命的なエラー DataMgr.c, Line:8589,致命的なエラーが発生しました」→(ダイアログ上の)リセットボタンも効かず、という現象が起きているとの報告がありました。
Snap!Memo (C)環境で動作しているという報告がありました。
AddressJ (A)環境でざっと動かしてみた範囲では、きちんとアドレス互換の動作をするようです。

Copyright (C) 1998-2000 ABplus Inc. kazhida.
All rights reserved.