from 和ジオ

gcc による Palm アプリケーション開発 (CodeWarrior移植/ATOK入力パネルの作成)

ソフトをつくる

gcc による Palm アプリケーション開発 (CodeWarrior移植/ATOK入力パネルの作成)

Palm の開発環境では、 CodeWarrior for Palm OS が有名ですが、Palm社 が提供している クロスコンパイラ(prc-tools)を利用すると 無料で開発環境を作ることができます。

開発環境のインストール方法は、素晴らしいもの( Palm:CygwinとGCCで開発 )がありますので、ここではインストール以外で参考になりそうなことを書いてみます。

現在は、 Palm OS 5系になっていますが、もっている CLIE PEG T-400 は、 日本語版Palm OS(R) Ver.4.1 なので、それに合わせたメモです。

開発環境

利用しているソフトウェアを紹介します。

Linux 上でコンパイル、実行確認は Windowsという変則的な方法をとっています。 ソースディレクトリを samba で共有して Windows から編集、 teraterm で Linux に接続し、m68k-palmos-gcc や make を使って コンパイル。Windows用のCLIE シミュレータで確認を行っています。

コンパイラ prc-tools prc-tools-2.3-1.i386.rpm -
リソースコンパイラ pilrc pilrc-3.2-1.i386.rpm -
make GNU Make 3.80 - Fedora CORE2
Palm OS SDK Core Palm OS SDK sdk40.tar.gz 要ユーザ登録
Palm OS SDK update Core Palm OS SDK sdk40upd1.tar.gz 要ユーザ登録
Sony CLIE(Palm OS 4.0)用 SDK Sony SDK 3.0 cliesdk30j.zip -
Palm OS エミュレータ Palm OS Emulator CLIEpose.zip -
Palm OS エミュレータ用 ROM PEG-T400 ROMイメージ T400.ROM -
CLIE用シミュレータ CLIE Palm OS Simulator CLIE_PalmSim.zip -
リソース変換 rsrc2rcp Rsrc2Rcp_v219 CodeWarriorリソース(.rsrc) を pilrc(.rpc)で扱えるようにするコンバータ
PRC の中身を閲覧する PRCExplorer PRCExplorer1.0.19.1 クリエイターIDやリソースの登録状況等がみれて便利

【メモ】

コンパイラ、SDK を入れた後に、palmdev-prep を実行しなければいけない。 これで、コンパイラが SDK を認識するようになります。


# palmdev-prep

Checking SDKs in /opt/palmdev
sdk-4         headers in 'include', libraries in 'lib'

When GCC is given no -palmos options, SDK '4' will be used by default

Writing SDK details to configuration files...
...done

あと、hello world を作る上でちょっとはまったのが、 include するファイル。

Pilot.h ではなく、PalmOS.h をインクルードすること。

#include <Pilot.h>

だと、

warning: #warning use PalmOS.h instead if you are using the 3.5 SDK or later;
you may need to run palmdev-prep or use a suitable -palmosN option
-- see "http://prc-tools.sourceforge.net/cgi-bin/info/ palmdev-prep" for details

と、怒られます。

ATOKパネルSDKサンプルのコンパイル

gcc 環境である程度大きいプログラムをコンパイルしてみた時のメモです。 CodeWarriorコードから gccへの移植を行う場合も参考になるかもしれません。

ATOK for Palm OS に、 入力パネルを作成するSDK というのがあるので、こちらのサンプルをコンパイルしてみました。 パネルSDKは適宜インストールしてください。

入力パネルサンプルは、CodeWarrior for PalmOS R6 用なので、若干の修正が必要です。 サンプルは2つついてくるのですが、「顔文字(ATIPFac2)」の方を使ってみました。

最初に、CodeWarrior用のリソースファイル (InputPanel.rsrc)を pilrc でコンパイルできるように、 rsrc2rcp.exe 使って変換します。 InputPanel.rsrc と InputPanelRsc.h を rsrc2rcp.exe と同一ディレクトリに格納し、

> Rsrc2Rcp.exe -rsrc InputPanel.rsrc -F Jp -I InputPanelRsc.h -oRcp InputPanel.rcp

Rsrc2Rcp: Generating resource: 'InputPanel.rcp'.

とし、InputPanel.rpc を得ます。また、CodeWarrior用のリソースファイルに OtherRes.r という外部定義ファイルがあるので、これと同様なことをする記述を、 作成した InputPanel.rpc に書き込みます。

// --------------- Resources of type 'RANK' ---------------
HEX "RANK" ID 1000
0x84 0x10

上記を、InputPanel.rpc の上に書き足してください。 あわせて、ソースディレクトリに「InputPanelRsc.h」をコピーしておきます。

これでコンパイルできるようなりましたが、ファイル数もバイナリ作成までの 手数も多いので makefile をつくります。

TARGET = atokpocketbell

CC = m68k-palmos-gcc
CFLAGS = -O2 -g

PILRC = pilrc
BUILDPRC = build-prc
OBJRES = m68k-palmos-obj-res

LIBS = -lc

OBJS = ¥
InputPanel.o ¥
Face2Pref.o ¥
Globals.o ¥
MainForm.o ¥
Message.o

ICONTEXT = "ATPB"
APPID = ATOK

all: atokpocketbell.prc

$(TARGET).prc: code0000.$(TARGET).grc code0001.$(TARGET).grc data0000.$(TARGET).grc pref0000.$(TARGET).grc rloc0000.$(TARGET).grc Inputpanel.res
$(BUILDPRC) atokpocketbell.def code0001.$(TARGET).grc code0000.$(TARGET).grc data0000.$(TARGET).grc pref0000.$(TARGET).grc rloc0000.$(TARGET).grc  *.bin
rm -f *.bin *.grc *.res

# オブジェクトの作成
code0000.$(TARGET).grc: $(TARGET)
$(OBJRES) $(TARGET)
code0001.$(TARGET).grc: code0000.$(TARGET).grc
data0000.$(TARGET).grc: code0000.$(TARGET).grc
pref0000.$(TARGET).grc: code0000.$(TARGET).grc
rloc0000.$(TARGET).grc: code0000.$(TARGET).grc

# ソースコードのコンパイル
$(TARGET): $(OBJS)
$(CC) $(CFLAGS) $(OBJS) -o $(TARGET) $(LIBS)

# リソースのコンパイル / 名前不定の *.bin 作成
Inputpanel.res: InputPanel.rcp
rm -fr *.bin
$(PILRC) -Fj -Loc jpJP -R InputPanel.res InputPanel.rcp

clean:
rm -f *.bin *.grc *.res

内容中、「atokpocketbell」が最終的に作成される .prc ファイル名です。ICONTEXTも適宜変えてください。

また、アプリケーション属性を atokpocketbell.def として別ファイルにしたので、これも作成します。

/*
* @(#)atokpocketbell.def
*
*/

application ipnl { "ATPB" ATOK }
multiple code { RANK }

ATOK がクリエイターIDで、ipnl というのが、ATOKパネルの type を示します。 ATPBがICONTEXTです。これは適宜変更してください。

あとは、

# make

で、コンパイルとリソース作成/バイナリ作成がされます。ただ、いくつかコンパイルエラーがでますので ソースファイルを修正します。 エラー該当部分にあるコメントをはずせばOKです。

修正し、コンパイルが通れば .prc ファイルが作成されると思います。 CLIEシミュレータには、ATOK が入っていないので、エミュレータのほうを使って動かしてみます。

ATOK簡易顔文字実行画面結果

無事動きました。 よかった。

ATOKを例にしてみましたが、ATOK に限らずこの辺が gcc 環境でのひな形に使えるとかと思います。

最近、Palm のソフトが少ないような気ががしますが、PalmOS 4以前であれば、 枯れてきて安心して作れるような時期でもありますね。ばんばんつくりましょう。:-)

※パネルSDKを gcc でコンパイルすることはサポート外だと思いますので、 Justsystemさんへの問い合わせはさけてください。