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で試したらヒドいことになりました。
