[PR]テレビ番組表
今夜の番組チェック

Mouse's Monologue - Palm

マウスの独り言 > Palm > OnBoardCでMathLibを使う

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

Copyright(C) 2000-2006 alg, all rights reserved.
alg_dot_info_atmark_gmail_dot_com