OnBoardCでMathLibを使う
Palmware開発をしていると、たまーに数学的な関数を使いたくなることがあります。平方根とか、三角関数とか。普通のC言語なら、その辺の命令は普通に備わっています。平方根ならsqrt(2)とすればルート2になるし、三角関数ならsinもcosもtanも使いたい放題です。
しかし残念なことに、Palmの標準APIではそういった数学関数は用意されていません。前述のようにsqrt(2)などと書いても、無常なエラーメッセージが返されるだけです。命令が無いのなら仕方が無い、と平方根を求めるプログラムを書くこともできるでしょう。ですが、それは目的ではないはず。目的ではなく手段のために労力をかけるのは、もったいない。それに、車輪の再発明みたいでなんだか納得がいかない。そんな方のために(?)、Palmで数学関数を使う方法があります。
MathLib(http://www.radiks.net/~rhuebner/mathlib.html)を利用するんです。
MathLibとは、Palmで各種数学関数を使うためのライブラリです。GPLに基づいて配布されています。ということで、前置きが長くなりましたが、MathLibをOnBoardCで使う方法をご紹介します。
(1) 各種ファイルをダウンロード
サイトから、「MathLib.Src.zip」をダウンロードします。
解凍すると色々と出てきます。
ドキュメントには目を通しておきましょう。
(2) MathLib.prcをインストール
Palm本体にMathLib.prcをインストールします。
これがMathLibの本体です。
(3) ソースファイルをDOC形式に変換してインストール
テキストファイルをDOC形式に変換できるツール(pigydoc等)を使って、下記のファイルをDOC形式ファイルとしてPalm本体にインストールします。
・MathLib.c
・MathLib.h
(4) ヘッダファイルに手を入れる
MathLib.cの
#include <PalmOS.h>
という部分を削除します。
OnBoardCでは不要な部分なので。
(5) 自分のプログラムにMathLibを利用する旨記述する
プログラムの最初で、MathLib.hをインクルードしておきます。
#include "MathLib.h"
次に、最初に実行される命令(OnBoardC標準スケルトンだとstartApp())で、MathLibを利用する旨を宣言します。
例えばこんな感じ。
static void startApp(){
Err error;
error=SysLibFind(MathLibName,&MathLibRef);
if (error)
error=SysLibLoad(LibType,MathLibCreator,&MathLibRef);
if (error) FrmCustomAlert(DebugAlert,"Can't find MathLib.","","");
error=MathLibOpen(MathLibRef,MathLibVersion);
if (error) FrmCustomAlert(DebugAlert,"Can't open MathLib.","","");
return;
}
そして、最後に実行される命令(OnBoardC標準スケルトンだとstopApp())で、MathLibを開放します。
こんな感じ。
static void stopApp() {
Err error;
UInt16 usecount;
error=MathLibClose(MathLibRef,&usecount);
if (error) FrmCustomAlert(DebugAlert,"Can't close MathLib.","","");
if (usecount==0) SysLibRemove(MathLibRef);
return;
}
(6) 数学関数を使いまくる
準備は整いました。
あとは欲望の赴くままに、数学関数を使いまくりましょう。
サンプル
OnBoardC用にサンプルプログラムを用意しました。
変な図形が表示されるので、PageUp/Downキーや画面のタップ&ドラッグでグリグリ動かしてみてください。
3Dっぽく見えると思います。
ていうか見えて。
あ、ちなみにOS5搭載機でないとまともに動かないと思います。
手元のm505で試したらヒドいことになりました。