iziBasic のトップへ

PP Applets 紹介


HTTP
Chr(0)iziBasic_FR
5WayRocker_FR
DateTime
SoundPref
FLUSHQUEUE
PP アプレットと iziBasic のパラメータの受け渡し
iBSleep
ResEdit
FileApplet






HTTP

詳しい中身は分かりません。
iziBasic と PPアプレットとのパラメータのやり取りが、参考になりました。

複数のパラメータを渡す時に CHR$(10) で区切っています。
「:」や「/」、「,」、「 」(スペース)などで区切る方法を考えていましたが、改行コードをはさむのは盲点でした。

改行コードが現れるたびに、格納場所を変える処理もスマートです。



Chr(0)iziBasic_FR

'MultiMail Messages'というファイルを調べています。
各レコードの9文字目(?)が CHR$(5) ならカウントしているようです。

このコードを参考にすると、ファイルの読み込みや文字のチェックなどの処理を作れそうです。

DmOpenRef
DmFindDatabase()
DmOpenDatabase()
DmNumRecords()
DmGetRecord()
DmCloseDatabase()

この辺の関数がポイントのようですね。



5WayRocker_FR

//Declaration de l'applet

type iBasFunType=function(S:string):string;
var iBasCallPP:iBasFunType;

function CallPP(S:string):string;
var c:UInt32;

begin
  c:=keyCurrentState;
  StrIToA(S,c);
  CallPP:=S;
end;

begin
  iBasCallPP:=CallPP;
end.
フランス語でコメントが書かれていましたが、省略してあります。
「var c:UInt32;」がコメントに入ってしまっていました。

キー状態をそのまま iziBasic に渡しています。
この方法だと、Basic 側の処理が少し面倒になります。

5Wayキーも keyCurrentState でチェックできるようですね。

'kTouch.ibas'

BEGIN
REPEAT
  A$=CALLPP$(100)
  IF A$="2" PRINT "Bouton Haut"
  IF A$="4" PRINT "Bouton Bas"
  IF A$="524288" PRINT "Bouton Droite"
  IF A$="262144" PRINT "Bouton Bas"
  IF A$="1048576" PRINT "Bouton Central"
  E=DOEVENTS
UNTIL E=-1
END
PPアプレットは「code 100」に入れることを想定しているようです。

「1048576」がセンターキーのようです。
フランス語なので、他のキーについては分かりません。

Le bouton de droite : 33554432
Le bouton de gauche : 16777216
Le bouton central : 67108864
T3 だと戻り値が違うようです。

実機があれば、実際にキーを押して値をチェックできます。
エミュレータでチェックしてもいいですね。



DateTime

iB_PPA_DT.pas を見ると配列変数の扱い方が分かります。

type
monthtype=
 record
  mname:string[9]
 end;
1つレコードに9文字まで入れられるようにします。

var
monthdata:array[1..12] of monthtype;
配列の要素数を12個にします。

// define month name array
monthdata[1].mname:='January';
monthdata[2].mname:='February';
monthdata[3].mname:='March';
monthdata[4].mname:='April';
monthdata[5].mname:='May';
monthdata[6].mname:='June';
monthdata[7].mname:='July';
monthdata[8].mname:='August';
monthdata[9].mname:='September';
monthdata[10].mname:='October';
monthdata[11].mname:='November';
monthdata[12].mname:='December';
各要素に名前を代入します。


その他、PP_Lib_TypesVar.pas と PP_API_Ext1.pas が入っています。

//-----
//MATH ROUTINES
//-----
//function BoolToInt(B:boolean):integer;
//function IntToBool(N:integer):boolean;
//function IntToHexChar(H:integer):char;
//function IntToString(N:integer):string;
//function RealToString(R:real):string;
//function Spc(N:integer):string;
//function StringToInt(S:string):integer;
//function StringToReal(S:string):real;
PP_Lib_TypesVar.pas

8個の関数が入っています。

PP_API_Ext1.pas には12個のAPIが定義されています。



SoundPref

ppapplets.zip に収録されていた、SoundPref です。
サウンドプリファレンスを確認できます。

{$code appl,LDSP,code,100}
program SoundPref;
type iBasFunType=function(S:string):string;
var iBasCallPP:iBasFunType;

type
 SystemPreferencesChoice=(
  prefVersion,
  prefCountry,
  prefDateFormat,
  prefLongDateFormat,
  prefWeekStartDay,

  (省略)

  prefAnimationLevel,
  prefSysSoundVolume,
  prefGameSoundVolume,
  prefAlarmSoundVolume,
  prefBeamReceive,
  prefCalibrateDigitizerAtReset,

  (省略)

  // Additions for PalmOS 5.3
  prefHandednessChoice,
  prefHWRCreator);

function PrefGetPreference(whichPref:SystemPreferencesChoice):integer; inline($4E4F,$A2D1);
procedure StrIToA(var S:string;N:integer); inline($4E4F,$A0C9);

function IntToString(i:integer):string;
var
 sResult:string;
begin
 StrIToA(sResult,i);
 IntToString:=sResult;
end;

function CallPP(S:string):string;
var
 MySound:integer;
begin
 if S='System' then
  MySound:=PrefGetPreference(prefSysSoundVolume)
 else
  if S='Game' then
   MySound:=PrefGetPreference(prefGameSoundVolume)
  else
   if S='Alarm' then
    MySound:=PrefGetPreference(prefAlarmSoundVolume)
   else
    MySound:=-1; // error
    CallPP:=IntToString(MySound);
end;

begin
 iBasCallPP:=CallPP;
end.

プリファレンスの定義部分が長いですが、実際に値を確認するコードは簡潔です。
サウンド以外のプリファレンスも、このコードを応用して簡単に確認できそうですね。



FLUSHQUEUE

aldweb のフォーラムで公開されているPP アプレットです。

FLUSHEVENTS はイベントを実行する命令ですが、
イベントをキャンセルするかのような、勘違いしやすい名前です。

開発者も悪い名前だと認めています。
PROCESSEVENTS という名前の方が、ふさわしいようです。

JoeV さんがイベントキューをクリアするアプレットを公開しています。

{ 13-Apr-2007
This applet flushes the event queue.
Call the applet from izibasic using the format: R$=CALLPP(161)
R$ always returns "Events Cleared"
}

{$code appl,JVxx,code,161} //required by iziBasic
program ppcall161;

{$i PalmAPI.pas}
type
iBasFunType=function(S:string):string; //required by iziBasic

var iBasCallPP:iBasFunType; //required by iziBasic

function EvtFlushKeyQueue:Err;inline(SYSTRAP,$A12C);
function EvtFlushPenQueue:Err;inline(SYSTRAP,$A125);
function EvtFlushNextPenStroke:Err;inline(SYSTRAP,$A129);

function CallPP(S:string):string;

begin

EvtFlushKeyQueue;
EvtFlushPenQueue;
EvtFlushNextPenStroke;
callpp:='Events Cleared'; //return string

end;

//Main. Required by iziBasic
begin
iBasCallPP:=CallPP;
end.




PP アプレットと iziBasic のパラメータの受け渡し

aldwebでの、 GPRINT命令が無かった頃(?)の掲示板のやり取りが参考になります。

' ColorText.ibas
{CREATORID "LDTE"}
{VERSION "1.0"}
BEGIN
 C=COLORRGB(0,0,204)
 D=COLORRGB(255,153,51)
 GPRINT "Hello in Color",55,70,C,D
 W=WAITEVENT
END

上のコードと同じことをPPアプレットで実現しています。
なぜか、コードをグラフィックで掲載していました。

文字を切り出して、数値に変換しています。

それ以外にも、色を変更するところと、描画状態をPush/Popするところが参考になります。

iziBasic

PP Compiler



iBSleep

aldweb のフォーラムで紹介されているPP アプレットです。

電源をオフにできるようですが、PalmOS バイブルを見ても SysSleep を見つけられませんでした。
126ページの「パワー管理コール」でちょっと触れられていますが、引数の意味などの解説は無いようです。

//iBSleep.pas
{$code appl,LDxx,code,100}
program iBSleep;
type iBasFunType=function(S:string):string;
var iBasCallPP:iBasFunType;
procedure SysSleep(untilReset,emergency:Boolean); inline($4E4F,$A0B2);
function CallPP(S:string):string;
begin
  SysSleep(false,false);
end;
begin
  iBasCallPP:=CallPP;
end.

' iBSleep.ibas
{CREATORID "LDxx"}
{VERSION "1.0"}
BEGIN
  A$=CALLPP$(100,"")
  A=WAITEVENT
END




ResEdit

リソースファイルを iziBasic で操作できます。

リソースファイルがあるかどうかのチェックや、ファイルの作成・削除ができます。
リソースがあるかどうかのチェックや、リソースの作成・削除・コピー・読み込みなどができます。

ソースコードを見ると、リソースを操作する方法が分かります。



FileApplet

ファイルを操作するアプレットです。

ファイルのコピーと削除のサンプルが入っています。
MemoDB と iziBasic をそれぞれコピー・削除することができます。

削除は簡単な手続きで済んでいますが、コピーはやることが多くて大変です。
コピーするファイルがあるかチェックしたり、バックアップビットをセットしたり…。

それらの操作を見ることができます。