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) 数学関数を使いまくる

準備は整いました。
あとは欲望の赴くままに、数学関数を使いまくりましょう。

サンプル

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