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で使う方法をご紹介します。
サイトから、「MathLib.Src.zip」をダウンロードします。
解凍すると色々と出てきます。
ドキュメントには目を通しておきましょう。
Palm本体にMathLib.prcをインストールします。
これがMathLibの本体です。
テキストファイルをDOC形式に変換できるツール(pigydoc等)を使って、下記のファイルをDOC形式ファイルとしてPalm本体にインストールします。
・MathLib.c
・MathLib.h
MathLib.cの
#include <PalmOS.h>
という部分を削除します。
OnBoardCでは不要な部分なので。
プログラムの最初で、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;
}
準備は整いました。
あとは欲望の赴くままに、数学関数を使いまくりましょう。

OnBoardC用にサンプルプログラムを用意しました。
変な図形が表示されるので、PageUp/Downキーや画面のタップ&ドラッグでグリグリ動かしてみてください。
3Dっぽく見えると思います。
ていうか見えて。
あ、ちなみにOS5搭載機でないとまともに動かないと思います。
手元のm505で試したらヒドいことになりました。