browncat.org
  Top 
     >Palm Gadgetry 
     自宅サーバを立ち上げよう! 
     Linuxのページ 
     blog@browncat.org 
     wiki@browncat.org 
 Palm Gadgetry
     Top/日記 
       過去の覚え書き 
 HowTo
     FreeBSD+PalmIII 
     pilot-mailの使い方 
     with rta50i 
     Network HotSync with Unix 
     CLIE NR70とLinux 
 Development
>    gccでpalmware開発を 
     localizerの作り方 
     pilrc情報 
     Palmware開発ツールメモ 
       私家版pilot-template 
     Prc-tools情報 
     TRGpro Memo 
 Other
     Favorite Palmware 
     PalmOS3.3で気になること 
 Software
     My Palmwareの倉庫 
       MailViewer 
       PoplDA 
       TinyDAs 
       Dhrystone 
       DAManager 
       LockApp 
       Syncit 
 Social Bookmarks
 逆Links
  派楽天地 (中国語) 
  VAIO, Palm, Linux, 連珠... 
  AB+ (ABPlus.com) 
  Hoshi's Palm OS Page 
  わ〜ぱほりっく 
  Palmfan 
  Upup Palm Load! 
  (順不同.ご一報下されば追加します) 
 Contact
  このサイトの作者にMail! 
 Search

gccでpalmware開発を

2001/6/1
本ページは技術評論社様 Software Design誌2001/6月号に掲載された記事の校正前の原稿をもとに加筆訂正を行って作成しました。 Webへの掲載をご快諾いただいた技術評論社様に感謝致します。

はじめに

PDAがブームの昨今これをお読みの皆さんも 携帯情報機器に興味をお持ちと思います。

その中でもPalmは非力なハードウェアながら、 さまざまなサードパーティ製品によって とても使いやすいものとなっています。

本稿では、そのPalm向けのソフトウェアを LinuxなどのUnix系OS上で開発するための情報を prc-toolsというgccのクロス環境を中心に ご紹介したいと思います。

  1. 開発環境の構築
  2. 簡単なアプリケーションを作ってみる
  3. その他の開発環境
  4. 情報源

なを、具体例が必要な場合には、筆者がメインの環境としている Kondara/MNU Linux 1.2を使って説明します。 また、java、pythonなどの環境やツールについても 触れたいと思います。


開発環境の構築

PalmOS向けソフト開発ツールの概要

PalmOS向け開発の特徴は、そのほとんどがOpen Sourceのツールで行える点でしょう。 コンパイラはgcc,binutilsなどのGNU Tool Chain、ポストリンカーbuildprc、 リソースコンパイラpilrcなど、全てソースコードとともに入手できます。 また、サンプルのソース、ヘッダファイル、各種ライブラリ(zlib,sslなど)、 ドキュメントなど多数の開発リソースが公開され、自由に利用できます。 ちょっとwebなどで検索すれば容易に参考となるページなども見つけることが出来ます。

prc-toolsはPalm ComputingがOpen Sourceとしてリリースしている PalmOS向けにモディファイされたgccとbinutils, gdbなどの MC68000向けクロス開発ツールで、 crt,libcなどのランタイムライブラリ、 リソースデータベースファイルを生成するポストリンカーが含まれます。
開発を行うには他にヘッダファイルとリソースコンパイラが必要です。 また、ドキュメントも同じくダウンロードし、入手出来ます。
開発時にはホスト上でクロスコンパイル、リンクして 出来上がった実行ファイルをターゲットのPalm機にダウンロードして 実行します。

  • prc-tools (PalmOS向け GNU C、binutils、gdb)

    図1に開発環境の概要を図示します。

図1:開発環境の概要

図1:開発環境の概要

Palmの実行形式はプログラムコード、UIのリソースや 文字列などのデータをprc形式という独自の形式にまとめたものです。 gccでコンパイルした結果からプログラム部分をコードリソースとして 取り出し、リソースコンパイラで作成したリソースデータを ポストリンカbuild-prcで結合して作成します。 出来たファイルは実機にダウンロードしたりPose(PalmOS Emulator)に ロードしてデバッグします。 デバッグにはgdbが使用できます。

必要なもの

  1. 開発ホスト

    LinuxやFreeBSD,NetBSDなどのOSが導入済みであるものとします。

  2. pilot-link

    pilot-linkはpalmのバックアップ、インストールなどを行う コマンドラインツール(群)です。 ほとんどのOSでパッケージとして存在しますので 容易にインストール可能でしょう。 環境変数 PILOTPORTに/dev/cuaa0などと接続されているシリアルポートを 指定します。次に環境変数 PILOTRATEに115200などと通信のボーレートを 指定します。(通信が安定しない場合57600など) また、シリアルポートの読み書きができる必要がありますので /etc/groupを編集してuucpなどのグループにユーザ名を追加しておきます。

    入手
    http://www.gnu-designs.com/pilot-link/

開発環境の構築

  1. prc-tools
  2. pilrc
  3. pose
  4. その他のツール類

prc-tools

元々は開発者の有志がgcc 2.7.2をベースに修正を行った prc-tools 0.5.0が使われていました。 長い間、公式にバージョンアップされないままだったのですが、 現在はPalm,Inc.が引き継ぎgcc 2.95.2ベースの2.0がリリースされています。 浮動小数点周りに問題があるようですので、フィックスも同時に入手してください。 また、Source Forgeでは2.1のbeta版が配布されています。 簡単なプログラムてテストした限りでは問題なさそうです。 こちらのほうもお試し下さい。

入手
Palm,Inc.のデベロッパゾーンかSource Forgeから入手できます。
Palm,Inc. http://www.palmos-japan.com/dev/tech/tools/gcc/
SourceForge http://prc-tools.sourceforge.net/
インストール
rpmないしはports/packagesからインストールします。 インストールの詳細については上記ページと 付属のドキュメントBUILDING.htmlに詳しくありますので割愛します。

筆者の環境(Kondara-1.2)ではrpmをインストールしただけでは obj-res, buildprcの実行時にundefined symbolが出て実行に 問題がありました。prc-tools, binutilsだけを ソースからコンパイルして使用しています。 なを、2.1のbetaではこの問題は起きません。

ヘッダファイルなど
Palm,Inc.のDeveloper SeedingからPalmOS4.0に対応したSDKが配布されていますが これの入手には登録が必要です。 PalmOS1.0〜3.1、3.5に対応したSDKについては自由にダウンロードできます。 現在PalmOS SDK 3.5Update1が最新版です。 なを、異なるバージョンのSDK間で下位互換性は完全にはありません。 どちらかと言えば新しい版にあわせて変更されるので 対応したいバージョンにあったものを使用するのがいいと思います。

SDKを入手したら/usr/local/palmdevに展開してください。 gccの拡張オプションで-palmos3.5などと指定すればいいでしょう。

pilrc

PalmOSで使用する実行ファイルは MacOSに似たリソースデータベースという独自の構造を持ち、 リソースタイプとID番号で管理されるバイナリデータの集まりです。 FormやButtonなどのUIオブジェクトやバージョン情報、 ビットマップなどが含まれます。 このリソースデータをテキスト形式のソースからコンパイルし 作成するツールがpilrcです。

元はWes Cherry氏が作成され、現在はAaron Ardiri氏が引き継いで 開発されています。日本語もShiftJISで使用できます。

入手
Pilrc公式ページ http://www.ardiri.com/index.cfm?redir=palm&cat=pilrc
Source Forge Project Page http://sourceforge.net/projects/pilrc/
インストール
ダウンロードしたアーカイブを展開し、configure & makeします。 redhat系のLinuxをお使いの方は"rpm -ta pilrc_src.tar.gz"として rpmファイルを作成することもできます。 pilrcuiというプレビューツールのbuildにはgtkが必要です。
pilrcに関する情報

Pose

PoseはPalm,Inc.から配布されているPalmのエミュレータです。 Windows,Mac,Unix用の各バージョンがPalm,Inc.のホームページから入手できます。
これを使用することで作成中のアプリケーションを 実機にインストールすることなく実行、デバッグが出来ます。
なくてもプログラム開発は出来るのですが、 テストの自動実行機能(Gremlinsと呼ばれています)やメモリ関係の警告などの 機能があり、とても重宝するのでインストールをお薦めします。
この記事を書いている2001年3月の時点ではバージョン3.1がリリースされています。

インストールはちょっと手間がかかりますので、インストールの手順を示します。 付属のドキュメントにも目を通してインストールして下さい。

  1. インストールにFLTKとMesaが必要です。Mesa,次にFLTKの順にインストールしてください。
  2. Pose本体をインストールしてください
  3. PalmからROMを吸い出します
Mesa,FLTKのインストール

FLTKはqtやgtkと同じくGUIのToolkitです。 探せばバイナリパッケージが入手できるかもしれませんが、 ここはソースからコンパイルすることにします。 FLTKはOpenGLライブラリのMesaを必要とするので、 まずMesaをインストールしてください。 MesaはほとんどのOSで標準的に入手出来ると思いますので、 パッケージなどからインストールしておいてください。 RPMをお使いのかたはMesa-develも一緒にインストールしなくてはいけません。 fltk-1.0.10とMesa-3.2.2で動作を確認しました。

FLTK入手先
http://www.fltk.org
インストール
Redhat系Linuxの場合は rpm -ta fltk-1.X.XX.tar.gz, rpm -ivhなど。 FreeBSDなどではportsを使うか展開してconfigure,make,make installなどとして下さい。
Poseのインストール

Windows版、Mac版はバイナリがありますが、Unix版はソースのみの配布ですので 自分でコンパイルする必要があります。 ちなみに筆者のKondara 1.2環境では問題なく動作しましたが、 Jirai(glibc2.2,X4.0.1)環境ではコンパイルは通るのですが、 出来たバイナリが実行途中にSEGVで落ちて使えませんでした。

入手先
http://www.palmos.com/dev/tech/tools/emulator/
インストール
普通に展開、コンパイルすればOKなのですが、 Mesaのライブラリでリンクエラーが出たので configure, Makefileを修正するか、 以下のようにconfigure時にLIBSに指定することで回避できます。

      tar xvfz emulator_src_31.tar.gz
      cd Emulator_Src_3.1/BuildUnix/
      LIBS="-L/usr/X11R6/lib -lGL" ./configure
      make
        

無事コンパイルが終了すると、 Build_Unixディレクトリの下に"pose"が出来ます。 /usr/local/binなどにコピーしてください。

skinのインストール
次にエミュレータの顔であるskinのインストールです。 emulator_skins_16.tar.gzを展開したら

        mv Skins_v1.6 /usr/local/share/pose/Skins
        
ROMイメージの吸い出し

PoseでPalmのプログラムを実行するにはPalmOSのROMイメージが必要です。 ROMイメージは実機から吸い出すか、Palm,Inc.のDeveloper Seedingで 配布されているDebugROMを申し込むと入手できます。 ここでは比較的手軽な方法として実機のROMイメージを吸い出すことにします。

方法は2通りです。

  1. PoseのROMTransfer機能を使う。

    私のところでは、何度か挑戦したのですが、 残念ながらうまく吸い出せませんでした。

  2. pilot-linkに含まれるpi-getromプログラムを使う。 palmがttyS0に接続されているとして次のように実行します。 pi-getrom /dev/ttyS0 pilot.rom

    Palm側でHotSyncを行うとpilot.romにromイメージが吸い出せます。 このソフトの起動時に"Please back up..."などと メッセージが出ますので、吸い出しを行う前にバックアップを 取っておいたほうがいいかもしれません。 また、吸い出しには結構時間がかかりますので、 気長に待っていてください。 FlashにFlashProがインストールしてある場合ROMがうまく動作しません。 メーカのTRG(*2)からposefixをダウンロードしておきROMから 取り除く必要があります。残念ながら".exe"しかないのでご注意下さい。

    *2 http://www.trgpro.com/
Pose起動

poseを起動すると"Right click on ... "と書かれた白いWindowが出現します。 右クリックで"New"を"New"を選びメモリサイズなどとともに、さっき吸い出した ROMイメージを指定します。 全てうまくいっていると無事巨大なPalmが画面上で起動するはずです。(図2) あとは、pilot-xferでバックアップしたファイルをインストールしたり デバッグ中のプログラムを入れることが出来ます。 テスト中の不安定なプログラムで実機のデータを 破壊する危険性がなくなります。
最近の高速なAthronやPentiumIIIなどのホストですと ほとんど実機と同スピードかそれ以上の速度で動作します。 入力をキーボードから行えるので データの入力/編集にも重宝するかもしれません。

図2:pose起動画面

図2:Pose起動画面

その他のツール類

pilot-template

アプリケーションの雛形となるCソースとリソースファイル、Makefileなどを 生成してくれるperlスクリプトです。 もとはIan Goldberg氏が作成されGPLで公開されています。 ただし、このツールはprc-tools 0.5.0にしか対応しておらず、 メンテナンスもされていないようです。 いろいろな方が自分むけに手直しして使用されていますので インターネットで検索などすればすぐに見つかるでしょう。 筆者もprc-tools 2.X向けに若干手直ししたバージョンを公開していますので 参考にして下さい。

入手
Pilot stuff from the ISAAC Group http://www.isaac.cs.berkeley.edu/pilot/
http://browncat.org/palm/pilot-template.html prc-tools 2.0対応版
pilrcedit

java環境で動作するpilrc形式のリソースデータのWYSIWYGなエディタです。 RADツールのように部品を配置して画面のリソースが作成できます。 まだ全てのリソースが取り扱えるわけではありません。 必須ではありませんが、開発の初期段階では便利でしょう。 jdk 1.2.2で動作確認しました。

入手
本家 http://www.wn.com.au/rnielsen/pilrcedit/
SourceForge http://sourceforge.net/projects/pilrcedit/

本稿を書いている2001年3月に調べたときには 本家はバージョン0.42,SourceForgeでは0.41と 本家のほうが少し新しいバージョンが入手できます。

par

データベースやリソースファイルを分解したり組み立てたりできるツールです。 データベース周りのデバッグ時に便利です。

入手
http://www.djw.org/product/palm/par/
リソースディスコンパイラ
  • prc2pilrc
  • presdec

両方ともprcファイルからpilrc形式のソースコードを得ることが出来るツールです。 後述のRsrcEditなどと組み合わせて、実機での調整結果を ソースに反映したり、 英語のアプリケーションからリソースを取り出し、 文字を書き換えたり日本語化したり出来ます。 双方ともjava環境が必要です。

入手
presdec http://www.innot.de/presdec/
prc2pilrc http://www.vandenburg.net/Prc2pilrc.html
ptools
リソース、データベースの表示プログラムです。pilrcのソースコードに変換するのにも使えます。 java環境で動作します。 palmのデータはバイナリベースですので内容の確認に便利です。
入手
ptools http://www.sra.co.jp/people/hoshi/ptools.html
Palm上で動作するソフトウェア

Palm上で動作するツールです。 実際の画面表示で確認できるので重宝します。

fontap

フォントの一覧、幅、高さといった情報が実機上で見ることが出来ます。 リソースの作成時に重宝します。

RsrcEdit

Palm上のリソースを開くことが出来るので、画面の調整時に便利です。 他にもいろいろなアプリケーションを開いてみると勉強になるでしょう。 Sharewareです。

入手
IndiVideo http://www.individeo.net/

簡単なアプリケーションを作ってみる

Palmハードウェアの概要

Palm機のCPUはMotrola社のDragonBallシリーズを使用しています。 このCPUはコアにMC68000を用い、LCDコントローラやシリアルなどの I/Oをワンチップにしたものです。 メモリはOS搭載用のFlashROM又はMaskROMが2-4MByte、 ストレージとワークを兼ねたRAMが1M〜8M程度です。

CPU Motrola社 DragonBallシリーズ コアにMC68000を用い、LCDコントローラやシリアルなどの I/Oをワンチップにしたものです。
RAM 1-8M ストレージ/ワーク兼用
ROM 1-4M 日本語版は4M
外部記憶 SD,CF,メモリースティック 基本的にオプション
I/O 赤外線, シリアル その他USB、バーコードリーダなど

Hello World

この記事をお読みの読者の方々は既にUnix系のOSに精通されている方が 多いと思いますが、PalmOSでのプログラミングには特有の考え方と 制限があります。 "68KMacの頃のMacOSに非常によく似ている部分が多い" と書けばある程度想像がつかれる方も多いと思います。

ともあれ、実際のプログラムを見てみるのが一番です。 ここでは、おなじみの"Hello, World."を作成して 実際に動作するアプリケーションを例に 説明していきましょう。

  1. 画面などのリソースデータの作成
  2. プログラムの作成
  3. デバッグ

ソースをゼロから書くのは面倒なのでpilot-templateで雛形を作成し、 これに肉づけしていくと非常に楽です。 この雛形はコンパイルしてPalmにインストールしても 空のFormを表示するだけで何もしません。 この雛形はよく出来ていますので、これを使って説明します。

以下のようにpilot-templateを実行します。

pilot-template Hello.prc Hello Hello HeLo

引数は、それぞれmakeの結果出来る実行ファイル名、アプリケーション名、 ランチャー上のアイコンにつく名前、クリエータIDを示します。 以下のソースが生成されます。

  • Hello.c -- 最低限のイベントハンドリングをするCのソース
  • Hello.pbm -- 黒丸のICON
  • Hello.rcp -- 空っぽのFormとICONのリソース
  • HelloRsc.h -- ヘッダ
  • Makefile

#include "HelloRsc.h"

FORM MainForm 0 0 160 160
NOFRAME
BEGIN
    TITLE "Hello"
END

APPLICATIONICONNAME 1000 "Hello"
ICON "Hello.pbm"

VERSION 1 "0.0.1"
リスト1: リソースファイル

画面の中央に"Hello, World."と表示してみましょう。 エディタでHelloRsc.rscを開いてTITLE "Hello"のあとに


        Label "Hello, World." AUTOID AT (50 60 AUTO AUTO)
    

と追加します。 これでmakeすれば"Hello, World"の出来上がりです。 pilrcuiで画面の確認を行ってダウンロードすると 見事画面の中央付近に"Hello, World."が表示されます。

プログラムを見てみましょう。 Hello.cの一番最後の関数PilotMainから実行が始まります。 StartApplication関数で内部データやデータベースの読み込みを行い、 Formをロードします。 問題がなければイベントループへと進みます。


DWord PilotMain(Word cmd, Ptr cmdPBP, Word launchFlags)
{
    Word err;

    if (cmd == sysAppLaunchCmdNormalLaunch) {

        err = StartApplication();
        if (err) return err;

        EventLoop();
        StopApplication();

    } else {
        return sysErrParamErr;
    }

    return 0;
}
リスト2: PilotMain()

PalmOSのイベントループはとてもプリミティブで、 アプリケーションが直接OSからのイベントをハンドリングしなくては いけません。 そのためEveltLoop()ではイベント取得後、システムのハンドラ、 メニューのハンドラを呼び出し、 その後アプリケーション全体に関するハンドラ(Formの読み込みなど)を 処理し、最後にFormのハンドラを呼び出します。 各ハンドラは自分に関係のないイベントであったら戻り値にfalseを返し 次の処理へイベントを渡さなくてはならないことを示します。

FormはいわゆるコンテナでGUIの要素を含みます。 リソースでは"FORM <FormID>"から始まりBEGIN-ENDでくくられた間に ボタンなどを配置します。 個々のFormにはイベントハンドラが設定でき、FrmDispatchEventから呼び出されます。

MainFormHandleEvent関数を見てください。 frmOpenEventからmenuEvent,ctlSelectEventと各GUIのイベント処理がswitchで並びます。 ここで各UIに対応するイベントを処理するわけです。

ボタンを追加してみる

このままではつまらないので、ボタンを作り、押されるとHello, Worldが 表示されるようにしてみましょう。

先のLABELの後ろに以下の1行を加えてみます。


        Button "Hello!" ID 1000 AT (40 120 AUTO AUTO) FRAME USABLE

pilrcuiで確認してみると確かにbuttonが追加されています。 PalmOSではbuttonが押されたときにはctlSelectEventを通知してきます。 従ってHello.cのctlSelectEventに以下のようなコードを 書くことになります。


        case ctlSelectEvent:
            switch(e->data.ctlSelect.controlID) {
            case 1000:
                WinDrawChars("Hello, World.", 13, 50, 80);
                handled = true;
                break;
            }
            break;

これをコンパイルし、インストールし、"Hello!"ボタンを押すと、 画面に"Hello, World"と表示されます。(図3)

図3:Hello.prc

図3:Hello.prc

基本的にPalmにおけるGUIオブジェクトはリソースに納められた静的なもので、 Formの生成時にOSによって画面に配置されます。 GUIリソースはそれぞれユニークな4バイトのタイプと2バイトのIDで管理され、 プログラム参照できるようになっています。 実行時に動的なGUIのオブジェクトの生成も可能で、PalmOS 3.0以上からサポートされています。

PalmOSには上で説明した以外にもいろいろなUIオブジェクトがあります。 Popup、Selector、Field、ScrollBarなど、大半のオブジェクトは容易に 理解できると思います。が、Tableだけはちょっと難しいので、 SDKドキュメントだけでなく稿末に挙げたO'ReillyのDeveloper's GUIDEなどを読まれるとよいでしょう。

テンプレートの説明

もうすこし詳しくテンプレートを見ていきましょう。
アプリの起動

アプリーケーションが起動されると PalmOS -> crt0 -> PilotMain という順で制御が渡ってきます。 PilotMainには引数があり、 起動コードとパラメータブロックとフラグが渡されます。

PalmOSはアプリケーションのエントリをいろいろな局面で呼び出します。 起動コードとは、その"いろいろ"を示すコードで、 通常の起動、HotSyncやリセット、検索などの種類があります。 また、その時に必要なパラメータがパラメータブロックで引き渡されます。 詳細はPalmOS SDKのドキュメントを参照ください。

各関数を順を追って説明すると

PilotMain()
  • StartApplication -- アプリケーション全体の初期化処理
  • EventLoop -- イベントループ
  • StopApplication -- アプリケーション全体の終了処理
StartApplication()

ここではメインのFormを開きます。 実際のFormの初期化処理は行われず、イベントだけが発生し、 後述のイベントループ内で実際の処理をします。

EventLoop()

イベントはスクリーンタップやグラフィティの文字入力、ボタンの押下などで 発生します。以下のように、そのイベントを処理してやります。

  1. システム
  2. メニュー処理
  3. アプリケーション
  4. Formのイベントハンドラ

システムやアプリは自分に関係のないイベントならば戻り値にfalseを返し、 まだ処理する必要があることを示します。 システムやメニュー処理では、ハードウェアボタンやシルクボタン、 画面上部のタップ、ショートカットなどさまざまな処理が行われます。 実際のメニューの内容の処理はmenuEventで行います。

StopAllication() -- 終了処理

開かれているFormのハンドラに対しデータのセーブを指示 開かれているFormを全て閉じる

ApplicationHandleEvent() --Applicaionのイベント処理

先のFrmGotoFormで発生したfrmLoadEventを処理します。 Formをリソースから読み込み初期化(FrmInitForm()) アクティブなFormにセットします。アクティブなFormとは 現在画面の一番上に表示されているFormのことです。 また、eventのformIDからその画面に必要な初期化やForm毎のイベントハンドラを セットします。

MainFormHandleEvent() -- フォーム毎のイベント処理

FrmInitFormで初期化されたFormにはfrmOpenEventが発生します。 FrmGetActiveFormで発生したFormを取得し、描画(FrmDrawForm)を行います。

ボタンの押下、メニューの選択、画面のタップ、リストの選択などの 主要なイベントを処理します。イベントと対象のIDを判断し適当な処理を行います。

データベースとメモリ管理

テンプレートには出てきませんでしたが、 PalmOSプログラミングのもう一つの重要な部分である データベースとメモリ管理を簡単に説明します。

メモリの構成

PalmOSに管理されるメモリは2種類にわかれます。 アプリケーションの実行時に使用されるダイナミックヒープと保存データのための ストレージヒープです。

スタック領域

ローカル変数を納めるための領域です。 大きさは固定でOSのバージョンにより2.5-3.2Kバイトほどですので 大きな配列などを取らないようにして下さい。

ダイナミックヒープ

ダイナミックヒープは実行時に確保される領域で使用方法はmallocと似ています。 違うのはHandleと呼ばれる間接ポインタで管理されていることで、 メモリはロックされてポインタとして使用されるまで、 メモリ不足などによりOSが移動する可能性があります。 大きさはやはりOSのバージョンにより異なり32K-256Kバイト程度です。

ストレージヒープ

ストレージヒープにはデータベースと呼ばれるファイルのようなものがあります。 データベースは管理のための情報とユーザ定義のレコードの集まりで、 アプリケーションのためにAppInfo,SoftInfoなどの情報を持っています。

各レコードは64Kまでの大きさの可変長な領域です。 おのおののレコードが3バイトのUniqueIDと1バイトのフラグ(カテゴリなど)を持ちます。 基本的に通番でアクセスします。

レコードはファイルと異なっておりダイナミックヒープ上のメモリと似ています。 データベースからハンドルを取得し、ロックして使用します。 ただし、ストレージヒープは書き込み保護されており システムコールを介して書き込み可能です。 また、当然ながらアプリケーションが終了しても内容は保存されます。

機種依存機能の使用について

Palm, Visor, TRGPro, CLIEなど、それぞれメーカごとに機能が拡張されています。 アプリケーションはできる限り機種依存がないほうがいいのですが、 拡張機能も魅力的です。 PalmOS4.0はまだ見ていませんが、 他機種の拡張機能はおおむね以下の様にして実装されています。

  1. CLIEのJogDialなどの様に拡張イベントが発生するもの
  2. 拡張ライブラリなどを経由してアクセスするもの(SM,CFなど)

各メーカからSDKがダウンロードできますので、ご覧ください。

拡張機能を使ったプログラムを作製する際は、他機種との互換性に注意してください。 機種の判別がはっきり出来るようなAPIはありませんので、 JogDialのような操作系の拡張を使用する場合、 操作を完全に拡張部分に依存しないようにしたほうがいいでしょう。 また、拡張ライブラリを必要とするものに関しては、 SysLibFind,SysLibLoad関数などを使用してライブラリを 読み込む必要がありますので、見つからない場合にはその機能をDisableにします。 拡張機能が必須のアプリケーションでもプログラムを終了することはせず、 エラーを表示して、ユーザの終了を待つようにしたほうがいいでしょう。


err = SysLibFind("exLib", &exlib);
if (!err) {
    err = SysLibLoad(ExLibTypeID, ExLibTypeCR, &exlib);
    if (err != 0) {
        /* 読み込めなかった場合の処理 */
	...
    }
}
    

なを、PalmOS 4.0では標準で拡張ストレージをサポートしましたので、 今後発表される機種では共通化されていくと思います。


gdbでデバッグする

アプリケーションの作成時に "-g" オプションをつけてコンパイルしておくと gdbを使ってソースレベルデバッグが出来ます。 当然クロスデバッグです。

デバッガを"m68k-palmos-gdb Hello"などとして起動。

  1. 実機の場合

    "target pilot /dev/ttyS0" などとしてターゲットを待ちます。

    gdbpanel.prcをインストールし、デバッグ機能をOnにしておいてから ターゲットのアプリケーションを起動します。

  2. Poseの場合

    "target pilot localhost:2000" としてターゲット待ち状態にします。

    Poseでインストールしたターゲットのアプリケーションを起動すると gdbとPoseの間でデバッグのセッションが開始されます。(*実行例)

gdbとターゲットが繋がれば、あとは通常のgdbと同様にデバッグが出来ます。 emacsの中から

      (defun pi-gdb () "gdb for palm"
        (interactive)
        (setq gdb-command-name "m68k-palmos-gdb")
        (call-interactively 'gdb))
    

などとして使うと便利です。 開発ディレクトリに".gdbinit"を作成し"target pilot /dev/ttyS0"などとしておくと、 更にいいかもしれません。


      GNU gdb 4.18
      ... <略> ...
      This GDB was configured as "--host=i686-pc-linux-gnu --target=m68k-palmos"...
      Quit
      (gdb) target pilot localhost:2000
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~
      Remote debugging under PalmOS using localhost:2000
      Waiting... (Press Ctrl-C to connect to halted machine)

      Program received signal SIGTRAP, Trace/breakpoint trap.
      PilotMain (cmd=0, cmdPBP=0x0, launchFlags=142) at Hello.c:1415
      1415        if (cmd == sysAppLaunchCmdNormalLaunch) {
      (gdb)
    
*実行例

CreatorIDの登録

CreatorIDとは、データベースに付加されている情報の1つで、 リソースタイプなどと同じような、全てのアプリでユニークな4バイトの識別コードです。 PalmOSはこのIDを用いてアプリケーションの識別を行います。 また、アプリケーションが作成するデータベースのCreatorIDも同じものとなり、 ランチャやメモリ管理ツールが一覧を表示する際、 データベースをまとめるのに使用したりします。 CreatorIDは大文字小文字の区別があり、全て小文字のIDはPalm Incが 予約しています。従ってそれ以外の文字の組み合わせとなります。

www.palmos.comのDevelopersのページに行き、"Quick Index"から"Creator ID"を選ぶと CreatorIDのページにたどり着きます。 他のアプリケーションが使っていないか重複を確認して登録してください。

全てのアプリケーションでユニークでないといけないので プログラムを公開するような場合には必須となります。
デバッグ中や、自分のみしか使用しないようなプログラムには 登録の必要性は低いのですが、 重複があるとOSの挙動がおかしくなりますので、 プログラム作成を開始する際には、 登録はしないまでも、重複のチェックくらいはしたほうがいいでしょう。


その他の開発環境

ご紹介したprc-tools以外にも以下のようなフリーの開発ツールがあります。 メモリが少ない分機能が縮小されたりしていますが、 結構遊べるものも多いので楽しんでみてください。

マクロアセンブラ
Pila 独自形式のマクロアセンブラ http://www.fh-wilhelmshaven.de/~akcaagaa/index_palmpower.html
Java
Jump ネイティブコンパイラ(要Pila) http://sourceforge.net/projects/jump
WabaJump Jump用のWaba互換クラスライブラリ http://wabajump.org
Waba PDA向けVMとクラスライブラリ http://waba.sourceforge.net, http://www.wabasoft.com
SuperWaba 拡張版Waba http://www.superwaba.org
Smalltalk
Pocket Smalltalk Smalltalk開発環境
(要squark)
http://www.pocketsmalltalk.com/new/
Python
Pippy pythonサブセット http://www.endeavors.com/pippy/

Palm本体で動作する開発環境などもあります。 "PalmPilot Software Development - Alternatives to C" -- http://www.winikoff.net/palm/dev.htmlなど を参考にしてください。


情報源

やはりPalmのSDKのドキュメント、英文ですが。 少し内容的に古い部分もありますが、GNU Pilot How toなど。

メーカの開発者サポートサイト

Palm,Inc. http://www.palmos.com/dev/
CLIE http://www.jp.sonypdadev.com/
TRGPro http://www.trgpro.com/developer/

オンラインで入手できるドキュメントなど

PalmOS Software Documentationなど http://www.palmos.com/dev/tech/docs/
O'REILLYのPalm Programming: The Developer's Guide http://www.palmos.com/dev/tech/docs/devguide/TableOfContents.htm
GNU Pilot SDK FAQ http://www.io.com/~jsproat/
GCC チュートリアル日本語版 http://www.geocities.co.jp/SiliconValley/7074/
Wade's PalmPilot Programming FAQ http://www.wademan.com/Pilot/Program/FAQ.htm
PalmOSアプリケーション開発 http://www.linux.or.jp/JF/JFdocs/PalmDevelopment-HOWTO.html
その他多数

日本語の開発者向けメーリングリスト

palm-tech-ml http://www.palm-jp.net/
java on the Palm http://www.fujisawa.org/palm/mailinglist.html
palm-unix-j http://www.daionet.gr.jp/~knok/ml/palm-unix-j/
clie-dev-ml http://www.egroups.co.jp/group/CLIE-DEV-ML

英語の情報源

Palm,Inc.の開発者Forum http://www.palmos.com/dev/tech/support/forums/
massena.comのnews group http://www.massena.com/darrin/pilot/index.html

更新履歴

  • 2001/8/20 pilrcの紹介に少し記述を加えた
  • 2001/6/1 リンク切れを修正
  • 2001/5/29 公開


ご意見ご要望などは yamap@browncat.org まで
このページは以下のソフトウェアを使用して作成しました:
Kondara/MNU Linux,FreeBSD,XEmacs,Mule,jed,w3m,Netscape Communicator,MetaHTML,apache,jweblint,efstat,Namazu...
Thank you for visiting this page