Palm Programmer's Laboratory

トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

Palm OS Programmer's API Reference/B-2

← 付録 A に戻る ↑トップへ 付録 C に進む →

B 互換性ガイド (ページ 2)

← 付録 B のページ 1 へ ↑ 付録 B のトップへ

※一部未訳

Bluetooth Library Feature Set ^TOP^

すべてのシステムが Bluetooth ライブラリ サービスを持っている(必要としている)わけではないので、これらのサービスを使用することを望むアプリケーションは、Buletooth ライブラリ サービスを呼び出す前に、それらが存在していることをチェックすべきです。これは、Bluetooth ライブラリのシステム Feature をチェックすることによって行います。チェックは FtrGet()|Palm OS Programmer's API Reference/34 呼び出しで btLibFeatureCreator に対して Feature 作成者を、btLibFeatureVersion に対して Feature 番号を提供します。

以下のコードは、Buletooth ライブラリの存在をチェックする方法を示しています。

UInt32 btVersion;

// Make sure Bluetooth components are installed
// This check also ensures Palm OS 4.0 or greater
if (FtrGet(btLibFeatureCreator, btLibFeatureVersion,
    &btVersion) != errNone) {
    // Alert the user if it's the active application
    if ((launchFlags & sysAppLaunchFlagNewGlobals) &&
        (launchFlags & sysAppLaunchFlagUIApp))
        FrmAlert (MissingBtComponentsAlert);
    return sysErrRomIncompatible;
}

Palm OS Programmer's Companion, vol.II, 通信第 6 章 「Bluetooth」 を読むことによって、Bluetooth ライブラリについて更に学ぶことができます。

関数 ^TOP^

この Feature Set は以下の関数を追加します。


Bluetooth ライブラリ セキュリティ関数


Bluetooth ライブラリ ユーティリティ関数とマクロ


Bluetooth ライブラリ マネージメント関数


Bluetooth ライブラリ ソケット関数


Bluetooth ライブラリ サービス ディスカバリ プロトコル関数

高密度ディスプレイ Feature Set ^TOP^

あなたはこの Feature Set が実装されていることをウィンドウ マネージャのバージョンをチェックすることで検証することができます。ウィンドウ マネージャのバージョンが 4 以上である場合、高密度ディスプレイ Feature Set はサポートされます。ウィンドウ マネージャのバージョンをチェックするには、以下の呼び出しを使用します:

err = FtrGet(sysFtrCreator, sysFtrNumWinVersion, &version);

返り時に、version の値が 4 以上である場合、高密度ディスプレイ Feature Set が存在します。高密度ディスプレイ Feature Set が存在しているだけなので、必ずしもそれが使用されているわけではありません。スクリーンの密度をチェックすることを望むかもしれません。その場合、以下のようにします:

WinScreenGetAttribute(winScreenDensity, &attr);
if (attr == kDensityDouble) {
  //the screen is double density (スクリーンは倍密度)
}

5.0 New Feature Set は高密度ディスプレイ Feature Set の機能をすべて組み込んでいます。そのため、あなたのアプリケーションが Palm OS Garnet で実行されている場合、高密度ディスプレイ Feature Set も存在していると見なすことができます。

新データ タイプ ^TOP^


ビットマップ データ タイプ

さらに、BitmapType|Palm OS Programmer's API Reference/26 の定義も変更されます。


フォント データ タイプ

さらに、この Feature Set は新しい 拡張フォント リソース|Palm OS Programmer's API Reference/37 を定義します。


ウィンドウ定数

この Feature Set は ウィンドウ座標システム定数|Palm OS Programmer's API Reference/59-1 という新しいセットを追加します。

訳者: 高密度ディスプレイでは標準座標ごとに複数のピクセルがあるため、描画するデータの座標変換が必要になるようです。その変換方法を指定する定数が「ウィンドウ座標システム定数」です。

関数 ^TOP^

この Feature Set は以下の関数を追加します。


ビットマップ関数


システム イベント マネージャ関数


ウィンドウ関数

1.5x ディスプレイ Feature Set ^TOP^

あなたはこの Feature Set が実装されていることをウィンドウ マネージャのバージョンをチェックすることで検証することができます。ウィンドウ マネージャのバージョンが 5 以上である場合、1.5x ディスプレイ Feature Set はサポートされます。ウィンドウ マネージャのバージョンをチェックするには、以下の呼び出しを使用します:

err = FtrGet(sysFtrCreator, sysFtrNumWinVersion, &version);

返り時に、version の値が 5 以上である場合、1.5x ディスプレイ Feature Set が存在します。1.5x ディスプレイ Feature Set が存在しているだけなので、必ずしもそれが使用されているわけではありません。スクリーンの密度をチェックすることを望むかもしれません。その場合、以下のようにします:

WinScreenGetAttribute(winScreenDensity, &attr);
if (attr == kDensityOneAndAHalf) {
  //the screen is one-and-a-half density (スクリーンは 1.5 倍密度)
}

新データ タイプ ^TOP^

この Feature Set は以下の新しいデータ タイプを追加します。


ウィンドウ定数

この Feature Set は スケーリング モード値|Palm OS Programmer's API Reference/59-1 という新しいセットを追加します。

関数 ^TOP^

この Feature Set は以下の関数を追加します。


ウィンドウ関数

サウンド ストリーム Feature Set ^TOP^

サウンド ストリーム Feature Set はサウンド マネージャに多くの「ストリーム」関数と定数を追加します。あなたはこの Feature Set が実装されていることをサウンド マネージャのバージョンをチェックすることで検証することができます。サウンド マネージャのバージョン Feature が定義されている場合、サウンド ストリーム Feature Set はサポートされます。

以下のコードは、サウンド マネージャの存在と正確なバージョンをチェックする方法を示しています。expectedSndMgrVersionNum はあなたが予期する実際のバージョン番号(通常は sndMgrVersionNum)で置き換えるべきです。

UInt32 version;
Err err;
 
err = FtrGet(sysFileCSoundMgr, sndFtrIDVersion, &version);
if(err){    
    // Sound Stream Feature Set not present
} else {
    // The Sound Stream Feature Set is present.
    // Check version number of Sound Manager,
    // if necessary
    if(version == expectedSndMgrVersionNum)
        // everything is OK
}

サウンド ストリーム データ構造体とタイプ ^TOP^

この Feature Set は以下のデータ構造体を追加します:

サウンド ストリーム列挙体と定数 ^TOP^

この Feature Set は以下の列挙体と定数を追加します:

サウンド ストリーム列挙体と定数

サウンド ストリーム関数 ^TOP^

この Feature Set は以下の関数を追加します。

サウンド ストリーム関数

さらに、サウンド ストリーム Feature Set は以下のコールバック関数を定義します:

5.0 New Feature Set ^TOP^

あなたはこの Feature Set が実装されていることをシステム バージョンが 5.0 かそれ以上であることをチェックすることでチェックすることができます。以下のように FtrGet()|Palm OS Programmer's API Reference/34 呼び出しを使用してチェックすることができます:

err = FtrGet(sysFtrCreator,
sysFtrNumROMVersion, &romVersion);

romVersion パラメータは 0x05003000 かそれ以上であるべきです。これは sysMakeROMVersion マクロを使って構築することができます:

sysMakeROMVersion(5,0,0,sysROMStageRelease,0)

この Feature Set は Palm OS Garnet のバージョン 5.0 に対応します。

Palm OS アプリケーション互換性環境(PACE)はそれに関連付けされたそれ自身のバージョンを持ちます。あなたはそのバージョン番号を以下のようにして取得することができます:

err = FtrGet('pace', 0, &paceVersion); 

通知 ^TOP^

この Feature Set は以下のデータベース関連の通知を追加します:

さらに、以下の通知をブロードキャストします:

関数 ^TOP^

この Feature Set は以下の関数を追加します:


ARM-ネイティブ関数

PceNativeCall()|Palm OS Programmer's API Reference/60

仮想ポート ^TOP^

仮想ドライバと仮想シリアル ポートは Palm OS Garnet ではサポートされません。

PACE でサポートされない関数とトラップ ^TOP^

さまざまな理由で多くの関数とトラップが PACE ではサポートされません。以下の節ではそれらの関数を実装されない理由に関連付けてグループ分けしています。


実装されない「システムのみが使用する」関数

「システムのみが使用する」ものとしてドキュメント化されている以下の関数は Palm OS アプリケーション互換環境 (PACE) ではサポートされません。

  • AlmAlarmCallback
  • AlmCancelAll
  • AlmDisplayAlarm
  • AlmInit
  • AlmTimeChange
  • DmInit
  • EvtDequeueKeyEvent
  • EvtGetSysEvent [1]
  • EvtInitialize
  • EvtSetKeyQueuePtr
  • EvtSetPenQueuePtr
  • EvtSysInit
  • ExgInit
  • FrmAddSpaceForObject
  • FtrInit
  • GrfFree
  • GrfInit
  • InsPtCheckBlink
  • InsPtInitialize
  • IntlInit
  • MemCardFormat
  • MemHandleFlags
  • MemHandleOwner
  • MemHandleResetLock [1]
  • MemHeapFreeByOwnerID
  • MemHeapInit
  • MemInit
  • MemInitHeapTable
  • MemKernelInit
  • MemPtrFlags
  • MemPtrOwner
  • MemPtrResetLock
  • MemStoreSetInfo
  • PenClose
  • PenGetRawPen
  • PenOpen
  • ScrCompressScanLine
  • ScrCopyRectangle
  • ScrDeCompressScanLine
  • ScrDrawChars
  • ScrDrawNotify
  • ScrLineRoutine
  • ScrRectangleRoutine
  • ScrScreenInfo
  • ScrSendUpdateArea
  • SlkProcessRPC
  • SlkSysPktDefaultResponse
  • SndInit
  • SysBatteryDialog
  • SysColdBoot
  • SysDoze
  • SysInit
  • SysNewOwnerID
  • SysSemaphoreSet
  • SysUILaunch
  • SysWantEvent
  • TimInit
  • UIInitialize
  • UIReset
  • WinAddWindow
  • WinRemoveWindow


[1] リリース ROM では実装されていますが、デバッグ ROM では不当であるとフラグされています。

原則として、ドキュメント化されていない関数とトラップは実装されていないものとして、アプリケーションで使用すべきでないものとして扱われるべきです。


実装される「システムのみが使用する」関数とトラップ

多くの関数とトラップは、「システムのみが使用する」とされていますが、ROM の中のアプリケーション、Palm デバッガ、テスト アプリケーション、スクリプト、いくつかのポピュラーなアプリケーションで必要とされます。このため、以下の「システムのみが使用する」関数とトラップは PACE でサポートされます。しかしながらそれらはシステムのみが使用することを意図したものなので、アプリケーションはそれらの使用を避けることができるならばそうすべきです。

  • AlmEnableNotification
  • AttnAllowClose
  • AttnEnableNotification
  • AttnIndicatorAllow
  • AttnIndicatorAllowed
  • AttnIndicatorGetBlinkPattern
  • AttnIndicatorSetBlinkPattern
  • AttnReopen
  • DmResetRecordStates
  • EvtEnqueuePenPoint
  • EvtGetSilkscreenAreaList()|Palm OS Programmer's API Reference/53
  • FileReadLow
  • Find
  • FrmActiveState
  • FrmHandleEvent()
  • HwrDelay
  • HwrDockStatus
  • HwrLEDAttributes
  • HwrMemReadable
  • HwrMemWritable
  • HwrVibrateAttributes
  • MemChunkNew
  • MemHeapPtr
  • PenRawToScreen
  • PenScreenToRaw
  • SysGetAppInfo
  • SysLaunchConsole
  • SndSetDefaultVolume
  • SysLCDContrast
  • SysSetA5
  • SysSetPerformance
  • SysSleep
  • SysUIBusy
  • WinDrawWindowFrame


旧式の関数とトラップ

以下の関数は、旧式となったため、PACE ではサポートされません。


[1] リリース ROM では実装されていますが、デバッグ ROM では不当であるとフラグされています。


'NOP' 関数とトラップ

これらの関数とトラップはアプリケーションによって呼び出されるべきではありません(多くは「システムのみが使用する」ものとしてドキュメント化されています)。サード-パーティ アプリケーションのあるものはそれらを呼び出すため、下位互換性のためにそれらは NOP (訳者: NOP = No OPeration: 何もしないコードのこと)として振舞います。

  • FplFree()
  • FplInit()
  • HwrEnableDataWrites
  • HwrDisableDataWrites
  • HwrTimerSleep
  • HwrTimerWake
  • KeyResetDoubleTap
  • KeySleep
  • KeyWake
  • PenSleep
  • PenWake
  • SerReceiveISP
  • SrmSleep
  • SrmWake
  • SysDisableInts
  • SysRestoreStatus
  • TimHandleInterrupt
  • TimSleep
  • TimWake
  • WinDisableWindow
  • WinEnableWindow
  • WinInitializeWindow


実装されない少数の関数とトラップ

こららの関数とトラップは Palm OS、シリアル ドライバ、OEM 拡張などによって内部的にのみ使用されます。それらは PACE では実装されません。


[2] OEM がそのトラップをサポートする場合、サポートされます。

5.1 New Feature Set ^TOP^

あなたはこの Feature Set が実装されていることをシステム バージョンが 5.1 かそれ以上であることをチェックすることでチェックすることができます。以下のように FtrGet()|Palm OS Programmer's API Reference/34 呼び出しを使用してチェックすることができます:

err = FtrGet(sysFtrCreator,
sysFtrNumROMVersion, &romVersion);

romVersion パラメータは 0x05103000 かそれ以上であるべきです。これは sysMakeROMVersion マクロを使って構築することができます:

sysMakeROMVersion(5,1,0,sysROMStageRelease,0)

この Feature Set は Palm OS Garnet のバージョン 5.1 に対応します。

ネット ライブラリ インターフェイス設定 ^TOP^

この Feature Set は以下の ネット ライブラリ インターフェイス設定を追加します:

  • DriverVersion
  • FirmwareVersion
  • FirmwareDate
  • 80211Device
  • 80211ESSID
  • 80211AccessPointBSSID
  • 80211AssociationStatus
  • 80211MKKCallSign
  • 80211CountryTest

上記の各設定の説明は NetLibIFSettingGet()|Palm OS Programmer's API Reference/66 を参照してください。

CPM ライブラリ ^TOP^

この Feature Set は暗号プロバイダ マネージャ (CPM) 共有ライブラリを含みます。CPM ライブラリは、システム ブート時に自動的には読み込まれません: CPM ライブラリを使用する前に、あなたはまず SysLibFindSysLibLoad を使ってそれを読み込まなければなりません。

CPM ライブラリは多くの定数を定義しています:

以下の構造体が CPM ライブラリの一部として定義されます:

最後に、CPM ライブラリは以下の関数を持ちます:

SSL ライブラリ ^TOP^

5.1 New Feature Set はセキュア ソケット レイヤ (SSL) 共有ライブラリを含みます。SSL ライブラリは、システム ブート時に自動的には読み込まれません: SSL ライブラリを使用する前に、あなたはまず以下のようなコードを使ってそれを読み込み、オープンしなければなりません:

Err error;
UInt16 libRef;

if ( SyLibFind( kSslDBName, &libRef ) != 0 )
{
  error = SysLibLoad(kSslLibType, kSslLibCreator, &libRef);
}
/* error checking goes here. */

error = SslLibOpen( libRef );
...


SSL ライブラリ構造体とデータ タイプ

SSL ライブラリは多くの構造体とデータ タイプを定義します:


SSL ライブラリ関数

さらに、SSL ライブラリは 1 つのコールバック関数を定義します:


SSL ライブラリ属性とマクロ

SslLibMac.h で宣言されているマクロを使用して SLL 属性に対する処理を行います。属性自体は Palm OS Programmer's Companion, vol. II, 通信第 8 章 「セキュア ソケット レイヤ (SSL)」ドキュメント化されています。

ペン入力マネージャ Feature Set ^TOP^

デバイスがペン入力マネージャによって制御されるダイナミック入力エリアを持つかどうかを確認するには、コード 89.1 で示されているように pinFtrAPIVersion をチェックします。


コード 89.1 ダイナミック入力エリア Feature のチェック

err = FtrGet(pinCreator, pinFtrAPIVersion, &version);
if (!err && version) {
   //PINS exists (PINS は存在する)
}

ペン入力マネージャ バージョン 1.0 ^TOP^

ペン入力マネージャ Feature の値が pinAPIVersion1_0 である場合、以下の関数が定義されます:

さらに、以下の通知が定義されます:

ペン入力マネージャ バージョン 1.1 ^TOP^

訳者: 原文では Pen Input Manager Version 1.0 となっていましたが、文脈から Version 1.1 の誤りと思われます。

ペン入力マネージャ Feature の値が pinAPIVersion1_1 である場合、前の小節でリスト アップしたものに加えて、以下の関数が定義されます:

さらに winDisplayChangedEvent も定義されます。

Graffiti 2 Feature Set ^TOP^

Palm OS のバージョン 4.1.2 と Palm OS Garnet のバージョン 5.2 は、Graffiti 2 手書き認識エンジンを使用します。これは Jot テクノロジをベースにしています。Graffiti マネージャは依然として新しいエンジンにインターフェイスを提供します; しかしながら、いくつかの関数は使用を推奨されないものとされています。

あなたはこの Feature Set の実装を、Graffiti 2 ライブラリによってセットされる Graffitit 2 ダイナミック ID の存在をチェックすることで、チェックすることができます。以下のようなコードを使用します:

if (!FtrGet('grft', 1110, &g2DynamicID) || 
  !FtrGet('grf2', 1110, &g2DynamicID)) {
    // Graffiti 2 feature set is present. (Graffiti 2 Feature Set は存在する)
}

Graffiti 2 作成者コードはバージョン 4.1.2 とバージョン 5.2 で異なるため、両方の 呼び出しが必要であるということに注意してください。


使用を推奨されなくなった関数

以下の関数はこの Feature Set が存在する場合、使用を推奨されません:

さらに、GrfSetState()|Palm OS Programmer's API Reference/38GrfGetState()|Palm OS Programmer's API Reference/38 で使用される capsLock パラメータと numLock パラメータは Graffiti 2 認識システムでは無視されます。

Graffiti シフト インジケータ API は通常通りに機能するということに注意してください。

5.3SC New Feature Set ^TOP^

あなたはこの Feature Set が実装されていることをシステム バージョンが 5.3 かそれ以上であることをチェックすることでチェックすることができます。以下のように FtrGet()|Palm OS Programmer's API Reference/34 呼び出しを使用してチェックすることができます:

err = FtrGet(sysFtrCreator, sysFtrNumROMVersion,
   &romVersion);

romVersion パラメータは 0x05303000 かそれ以上であるべきです。これは sysMakeROMVersion マクロを使って構築することができます:

sysMakeROMVersion(5,3,0,sysROMStageRelease,0)

この Feature Set は Palm OS Gartnet のバージョン 5.3SC に対応します。

関数 ^TOP^

この Feature Set は以下の関数を追加します。


Glue 関数

通知 ^TOP^

この Feature Set は以下の通知を追加します。

変更された既存の関数 ^TOP^

5.3SC より前で存在していた以下の関数はリリース 5.3SC で変更されました:

GrfSetState()|Palm OS Programmer's API Reference/38GrfGetState()|Palm OS Programmer's API Reference/38 で使用される capsLock パラメータと numLock パラメータは Graffiti 2 認識システムに適用されます。Palm OS Garnet オペレーティング システムのバージョン 5.2で Graffiti 2 が導入されました。最初の実装では、これら 2 つのパラメータは無視されていました。

バージョン 5.2 では、GrfInitState()|Palm OS Programmer's API Reference/38 は使用を推奨されず、機能を持ちませんでした。この関数はバージョン 5.3SC で再びサポートされるようになりました。(実際は、バージョン 5.2.1 以降で復帰させられました。)

以下に挙げる関数では、numOfElements パラメータは UInt16 タイプに変更されました: SysBinarySearch()|Palm OS Programmer's API Reference/54, SysInsertionSort()|Palm OS Programmer's API Reference/54, SysQSort()|Palm OS Programmer's API Reference/54

5.4 New Feature Set ^TOP^

あなたはこの Feature Set が実装されていることをシステム バージョンが 5.4 かそれ以上であることをチェックすることでチェックすることができます。以下のように FtrGet()|Palm OS Programmer's API Reference/34 呼び出しを使用してチェックすることができます:

err= FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion);

romVersion パラメータは 0x05403000 かそれ以上であるべきです。これは sysMakeROMVersion マクロを使って構築することができます:

sysMakeROMVersion(5,4,0,sysROMStageRelease,0)

この Feature Set は Palm OS Garnet のバージョン 5.4 に対応します。

新しいデータ タイプ、列挙体、定数 ^TOP^

以下のデータ タイプ、列挙体、定数が新たに追加されます。これらはソケット通知をサポートします:

ソケット通知についての詳細は、Palm OS Programmer's Companion, vol. II, 通信第 7 章 「ソケット通知」 を参照してください。

変更された既存の関数 ^TOP^

5.4 より前に存在していた以下の関数はリリース 5.4 で変更されました:

(未訳)The optionValueP parameter of NetLibSocketOptionSet()|Palm OS Programmer's API Reference/66 is now of type NetSocketNoticeType|Palm OS Programmer's API Reference/66 when you are also passing in parameters netSocketOptLevelSocket and netSocketOptSocketNotice. この呼び出しは、あなたがソケット通知を受け取るために登録を行うときに、作成されます。

その他の変更点 ^TOP^

以前にあった以下の 2 つの Palm OS の制限はもはや PalmSource 社によって制限されません: 同時にアクティブとなるソケットの最大数とネット ライブラリが使用可能なスタックの最大サイズです。ライセンシはソケットの数とスタックのサイズを彼らが適切と考える数とサイズに合わせて決定します。

Bluetooth スリープとウェイクのスケジューリング Feature Set ^TOP^

あなたはこの Feature Set が実装されていることを sysFtrBtSupportsScheduledWakeup Feature をチェックすることでチェックすることができます。以下のように FtrGet()|Palm OS Programmer's API Reference/34 呼び出しを使用してチェックすることができます:

err = FtrGet(sysFtrCreator,
sysFtrBtSupportsScheduledWakeup, &value);

Bluetooth スリープとウェイクのスケジューリングが使用可能な場合、value パラメータは非 0 となり、返されるエラーは 0 となります(エラーが無い場合)。

スリープとウェイクのスケジューリングについての更なる情報は、第 6 章 「ラジオ パワー管理」 を参照してください。

ARM デバッグ Nub Feature Set ^TOP^

あなたはこの Feature Set が実装されていることを adnFtrCreator Feature をチェックすることでチェックすることができます。以下のように FtrGet()|Palm OS Programmer's API Reference/34 呼び出しを使用してチェックすることができます:

err = FtrGet(adnFtrCreator, adnFtrNumVersion, &value);

ARM デバッグ Nub Feature Set が存在する場合、返されるエラーは errNone となります。


ARM デバッグ Nub 関数とマクロ

Palm OS Cobalt Feature Set ^TOP^

あなたはこの Feature Set が実装されていることをシステム バージョンが 6.0 かそれ以上であることをチェックすることでチェックすることができます。以下のように FtrGet()|Palm OS Programmer's API Reference/34 呼び出しを使用してチェックすることができます:

err= FtrGet(sysFtrCreator, sysFtrNumROMVersion, &romVersion);

romVersion パラメータは 0x06003000 かそれ以上であるべきです。これは sysMakeROMVersion マクロを使って構築することができます:

sysMakeROMVersion(6,0,0,sysROMStageRelease,0)

この Feature Set は Palm OS Cobalt のバージョン 6.0.1 に対応します。

PACE ^TOP^

Palm アプリケーション互換環境 (PACE) は、ARM プロセッサを使用するデバイス上できちんと作られた(原文: well-behaved)68K ベース Palm アプリケーションの実行をサポートする 68K エミュレータです。

PACE は既存の 68K ベース Palm OS アプリケーションを ARM プロセッサを使用するデバイス上で実行することを可能にします。ユーザはアプリケーションを 68K デバイスから ARM ベース デバイスにビーム(無線通信)して、そのアプリケーションを実行することができます。Palm ありケーション互換環境は開発者にアプリケーションの移行手段を提供します。開発者はアプリケーションをビルドするために既存の 68K ベース ツールを使い続けることができます。

NOTE
Palm OS Garnet と Palm OS Cobalt は両方とも 68K エミュレーションを提供するために PACE を使用します。PACE はその機能の多くを提供するために基本的なオペレーティング システムに依存します。Palm OS Garnet はアーキテクチャ上 Palm OS の 68K ネイティブ バージョンに非常によく似ているため、Palm OS Garnet 上で実行される PACE は 68K ファミリ プロセッサ搭載の Palm デバイスと高い互換性を持ちます。しかしながら、Palm OS Cobalt はアーキテクチャ上それ以前の Palm OS とは非常に異なります。そのため、Palm OS Cobalt 上の PACE は Palm OS Garnet 上の PACE ほどには互換性が良くありません。あなたの 68K アプリケーションをさまざまな Palm デバイス上で機能させるには、Palm OS Cobalt 上の PACE の振る舞いについて説明している以下の小節の注意書きに注意してください。

設計目標 ^TOP^

Palm アプリケーション互換環境は、最低限のコードとメモリのオーバヘッドで、きちんと作られた 68K アプリケーションを ARM ベース デバイス上で 68K と同等かそれ以上のスピードで実行することを可能にするように設計されています。きちんと作られたアプリケーションとは以下のようなものです:

  • ドキュメント化されている Palm OS API のみを使用している
  • ハードウェアに直接アクセスしていない
  • ディスプレイ メモリに直接アクセスしていない
  • 低レベル メモリ グローバル(訳者: 変数?)にアクセスしていない
  • Palm OS 構造体のフィールドに直接アクセスしていない
  • デバッグ Palm OS Garnet ROM を使用してる Palm OS エミュレータ上でエラー無しで実行される


パフォーマンス

68K アプリケーションのパフォーマンスは、そのアプリケーションが 68K 命令(インストラクション)を実行するのにかかる時間が Palm OS 関数呼び出すのにかかる時間に比べてどれくらい大きいかに非常に大きく依存します。

素数生成といった 68K 命令だけで構成されたコードは、68K 命令がエミュレートされるため、同じコードの ARM ネイティブ バージョンと比べて実行スピードは遅くなります。参考までに、70 MHz の ARM デバイス上でエミュレートされる 68K 命令を実行するのにかかる時間は大雑把に言って Palm Vx デバイス上で同じ命令を実行するのにかかる時間と同じくらいです。しかしながら、たいていのアプリケーションはオペレーティング システムの内部呼び出しに多くの時間を割き、それらの呼び出しは ARM プロセッサのフル スピードで実行されます(いくつかの Palm OS 関数では、ネイティブ 関数の API がどれくらい 68K API に似通っているかに依存して、余分なオーバヘッドが存在するかもしれないということに注意してください)。そのため、PACE で実行されるたいていの 68K アプリケーションは実際上 68K プロセッサを持つデバイス上で実行されるよりもずっと速くなります。


開発者 SDK

アプリケーション作成時は、PACE で実行されるアプリケーションは他の 68K アプリケーションと同様に、あなたが 68K ベース Palm OS アプリケーションを作成するのに使用しているツールとヘッダを使い続けます。

アプリケーションはもはや多くの内部的、パブリックに定義された構造体(例えば、ControlType 構造体など)にあく精することを許可されません。これの埋め合わせをするために、いくつかのアクセサリ関数が Palm OS 4.0 で追加され、さらに Palm OS SDK には Palm OS Glue ライブラリが追加されました。

68K Palm デバッガと 68K デバッガ API に依存する他のツール(Metrowerks デバッガなど)は Palm アプリケーション互換環境によってサポートされます。

API 制限 ^TOP^

たいていのきちんと作られたアプリケーションは PACE の Palm OS Garnet バージョンで問題なく動作します。しかしながら、Palm OS Cobalt の基本的なオペレーティング システムの違いにより、Palm OS Cobalt デバイスで PACE は制限がきつくなります。以下の小節はそれらの制約についての詳細です。


使用を推奨されない API

ごくわずかの使用を推奨されない API (CategoryEditV20() など) がネイティブ ARM アプリケーションでサポートされます。Palm アプリケーション互換環境もこれらの使用を推奨されない API をサポートします - ただし、表 89.2 に載せられていないものに限ります。


サポートされない API

多くの Palm OS API は PACE ではサポートされません。それらはプライベートなものとしてドキュメント化されている API であるか、あるいは内部的に使用されるだけの API (パブリックなヘッダ ファイルの中にあるとしても) であるか、開発サポートが開発者に使用しないようにアドバイスしている API であるかのいずれかです。サポートされない API のリストは 「サポートされない Palm OS 関数」 にあります。


カード番号引数

Palm OS のネイティブ ARM バージョンはもはやメモリ カードというコンセプトを持ちません。この理由から、カード番号コンセプトはエミュレートされる 68K アプリケーションのために擬似的に実装されます(原文: faked)。アプリケーションが MemNumCards() を呼び出した場合、常に値 1 が返されます。アプリケーションが、引数として cardNum をとる関数のいずれかを呼び出し、cardNum の値が 0 でない場合、アプリケーションにはエラーが返されます。


レコード固有 ID

Palm OS の以前のバージョンでは、レコードの固有 ID の 24 ビットだけがレコード ヘッダに保存されていました。しかしながら Palm OS Cobalt では、32 ビットすべてが固有です。レコードの固有 ID を返す関数は 32 ビットの値を返します; 最大限の互換性を保証するためにアプリケーションはレコードの固有 ID の 32 ビットすべてを保存すべきであり、結果を 24 ビットに切り詰めるべきではありません。


サポートされない、または、推奨されない Palm OS 関数呼び出しの結果

68K アプリケーションがサポートされない、または、使用を推奨されない Palm OS 関数を呼び出した場合、アラートが表示され、アプリケーションは停止させられます。アラートは、「あなたが使用しているアプリケーションでエラーが発生しました。エラー コードを書き取り、このアプリケーションの開発者に連絡してください」というメッセージと、その後に続いて括弧で囲まれたエラー番号を表示します。ユーザが OK ボタンを押すと、そのアプリケーションは強制終了されます。このエラー アラートのデバッグ バージョンはさらに 2 つの番号を表示し(あなたが問題を突き止めるのを手助けするために)、Cancel ボタンを表示します。あなたが Cancel ブタンを押すと、あなたがなぜ、どこでエラーが発生しているかを突き止められるように PACE は 68K Palm デバッガに接続しようと試みます。


サポートされない Palm OS 関数

表 89.2 は Palm OS Cobalt の PACE ではサポートされない Palm OS 関数のリストです。以下はそれらの関数がなざサポートされないかの理由を示しています。

  • 「システムのみが使用する」とドキュメントに書かれている
    • これらの関数は Palm OS Programmer's API Reference に「システムのみが使用する」と書かれており、それゆえアプリケーションは決してそれらを呼び出すべきではありません。
  • 「システムのみが使用する」とドキュメントに書かれているべき
    • これらの関数は内部的に PalmSource が使用することだけを意図したものでしたが、ドキュメントに書かれています。
  • 旧式
    • これらの関数は、ずっと以前に旧式になったため、実装されていません。現在の Palm OS アプリケーションはもはやそれらを使用すべきではありません。
  • "NOP" 関数 (訳者補足: No OPeration)
    • たいてい、これらの関数はアプリケーションによって呼び出されるべきではありません。しかしながら、あるアプリケーションはそれらを呼び出すかもしれないので、PACE はそれらをサポートしています。しかしながら、それらは何もせずにただ単に返るだけです。
  • ほとんど使用されない関数
    • Palm OS によって、シリアル ドライバによって、あるいは OEM 拡張によって内部的に使用されるだけの関数です。これらはアプリケーションが使用する関数ではありません。PACE はそれらの関数を実装しません。
  • Palm OS Cobalt では実装されない
    • Palm OS Garnet の PACE ではサポートされていましたが、Palm OS Cobalt の PACE ではもはやサポートされません。これらの大半はシステムのみが使用することを意図したものであり、残っているわずかのものがごくまれにアプリケーションによって使用されます。


表 89.2 サポートされない Palm OS 関数

関数 以下の理由によりサポートされません
AlmAlarmCallback() 「システムのみが使用する」とドキュメントに書かれている
AlmCancelAll() 「システムのみが使用する」とドキュメントに書かれている
AlmDisplayAlarm() 「システムのみが使用する」とドキュメントに書かれている
AlmTimeChange() 「システムのみが使用する」とドキュメントに書かれている
ConGetS() ほとんど使用されない関数
ConPutS() ほとんど使用されない関数
DayDrawDays() ほとんど使用されない関数
DayDrawDaySelector() ほとんど使用されない関数
DayHandleEvent() 「システムのみが使用する」とドキュメントに書かれているべき
DbgCommSettings() ほとんど使用されない関数
DbgGetMessage() ほとんど使用されない関数
DlkControl() ほとんど使用されない関数
DlkDispatchRequest() ほとんど使用されない関数
DlkStartServer() ほとんど使用されない関数
DmInit() 「システムのみが使用する」とドキュメントに書かれている
EvtDequeueKeyEvent() 「システムのみが使用する」とドキュメントに書かれている
EvtEnqueuePenPoint() 「システムのみが使用する」とドキュメントに書かれていました。Palm OS Cobalt では、sysErrNotAllowed を返します。デバッグ ROM では、致命的なアラートを表示します。
EvtGetPenBtnList()|Palm OS Programmer's API Reference/53 ほとんど使用されない関数
EvtGetSilkscreenAreaList()|Palm OS Programmer's API Reference/53 ほとんど使用されない関数
EvtGetSysEvent() 「システムのみが使用する」とドキュメントに書かれている
EvtKeyQueueSize()|Palm OS Programmer's API Reference/53 Palm OS Cobalt では、sysErrNotAllowed を返します。デバッグ ROM では、致命的なアラートを表示します。
EvtPenQueueSize()|Palm OS Programmer's API Reference/53 Palm OS Cobalt では、sysErrNotAllowed を返します。デバッグ ROM では、致命的なアラートを表示します。
EvtProcessSoftKeyStroke()|Palm OS Programmer's API Reference/53 Palm OS Cobalt では、sysErrNotAllowed を返します。デバッグ ROM では、致命的なアラートを表示します。
EvtSetKeyQueuePtr() 「システムのみが使用する」とドキュメントに書かれている
EvtSetPenQueuePtr() 「システムのみが使用する」とドキュメントに書かれている
EvtSysInit() 「システムのみが使用する」とドキュメントに書かれている
ExpCardGetSerialPort()|Palm OS Programmer's API Reference/33 Unimplemented in Palm OS Cobalt
ExpCardInserted() 「システムのみが使用する」とドキュメントに書かれている
ExpCardRemoved() 「システムのみが使用する」とドキュメントに書かれている
ExpSlotDriverInstall()|Palm OS Programmer's API Reference/33 Palm OS Cobalt では実装されない
ExpSlotDriverRemove()|Palm OS Programmer's API Reference/33 Palm OS Cobalt では実装されない
ExpSlotLibFind()|Palm OS Programmer's API Reference/33 Palm OS Cobalt では実装されない
ExpSlotRegister() 「システムのみが使用する」とドキュメントに書かれている
ExpSlotUnregister() 「システムのみが使用する」とドキュメントに書かれている
FplAdd() 旧式
FplAToF() 旧式
FplBase10Info() 旧式
FplDiv() 旧式
FplFloatToLong() 旧式
FplFloatToULong() 旧式
FplFree() "NOP" 関数として実装されている
FplFToA() 旧式
FplInit() "NOP" 関数として実装されている
FplLongToFloat() 旧式
FplMul() 旧式
FplSub() 旧式
FrmAddSpaceForObject() 「システムのみが使用する」とドキュメントに書かれている
FtrInit() 「システムのみが使用する」とドキュメントに書かれている
GrfFree() 「システムのみが使用する」とドキュメントに書かれている
GrfInit() 「システムのみが使用する」とドキュメントに書かれている
InsPtCheckBlink() 「システムのみが使用する」とドキュメントに書かれている
InsPtEnable() "NOP" 関数として実装されている
InsPtEnabled() "NOP" 関数として実装されている
InsPtGetHeight() "NOP" 関数として実装されている
InsPtGetLocation() "NOP" 関数として実装されている
InsPtInitialize() 「システムのみが使用する」とドキュメントに書かれている
InsPtSetHeight() "NOP" 関数として実装されている
InsPtSetLocation() "NOP" 関数として実装されている
KbdDraw() 「システムのみが使用する」とドキュメントに書かれている
KbdErase() 「システムのみが使用する」とドキュメントに書かれている
KbdGetLayout() 「システムのみが使用する」とドキュメントに書かれている
KbdGetPosition() 「システムのみが使用する」とドキュメントに書かれている
KbdGetShiftState() 「システムのみが使用する」とドキュメントに書かれている
KbdHandleEvent() 「システムのみが使用する」とドキュメントに書かれている
KbdSetLayout() 「システムのみが使用する」とドキュメントに書かれている
KbdSetPosition() 「システムのみが使用する」とドキュメントに書かれている
KbdSetShiftState() 「システムのみが使用する」とドキュメントに書かれている
KeyboardStatusFree() 「システムのみが使用する」とドキュメントに書かれている
KeyboardStatusNew() 「システムのみが使用する」とドキュメントに書かれている
MemCardFormat() 「システムのみが使用する」とドキュメントに書かれている
MemHandleFlags() 「システムのみが使用する」とドキュメントに書かれている
MemHandleOwner() 「システムのみが使用する」とドキュメントに書かれている
MemHandleResetLock() 「システムのみが使用する」とドキュメントに書かれている
MemHeapFreeByOwnerID() 「システムのみが使用する」とドキュメントに書かれている
MemHeapInit() 「システムのみが使用する」とドキュメントに書かれている
MemInit() 「システムのみが使用する」とドキュメントに書かれている
MemInitHeapTable() 「システムのみが使用する」とドキュメントに書かれている
MemKernelInit() 「システムのみが使用する」とドキュメントに書かれている
MemPtrFlags() 「システムのみが使用する」とドキュメントに書かれている
MemPtrOwner() 「システムのみが使用する」とドキュメントに書かれている
MemPtrResetLock() 「システムのみが使用する」とドキュメントに書かれている
MemSemaphoreRelease() 「システムのみが使用する」とドキュメントに書かれている
MemSemaphoreReserve() 「システムのみが使用する」とドキュメントに書かれている
MemStoreSetInfo() 「システムのみが使用する」とドキュメントに書かれている
OmGetIndexedLocale() Palm OS Cobalt では実装されない
OmGetNextSystemLocale() Palm OS Cobalt では実装されない
OmSetSystemLocale() Palm OS Cobalt では実装されない
PenCalibrate()|Palm OS Programmer's API Reference/47 "NOP" 関数として実装されている
PenClose() 「システムのみが使用する」とドキュメントに書かれている
PenGetRawPen() 「システムのみが使用する」とドキュメントに書かれている
PenOpen() 「システムのみが使用する」とドキュメントに書かれている
PenRawToScreen() 「システムのみが使用する」とドキュメントに書かれていました。Palm OS Cobalt では、sysErrNotAllowed を返します。デバッグ ROM では、致命的なアラートを表示します。
PenResetCalibration()|Palm OS Programmer's API Reference/47 "NOP" 関数として実装されている
PenScreenToRaw() 「システムのみが使用する」とドキュメントに書かれていました。Palm OS Cobalt では、sysErrNotAllowed を返します。デバッグ ROM では、致命的なアラートを表示します。
PenSleep() 「システムのみが使用する」とドキュメントに書かれていました。Palm OS Cobalt では、"NOP" 関数として実装されています。
PenWake() 「システムのみが使用する」とドキュメントに書かれていました。Palm OS Cobalt では、"NOP" 関数として実装されています。
ResLoadForm() ほとんど使用されない関数
SerReceiveISP() "NOP" 関数として実装されている
SlkProcessRPC() 「システムのみが使用する」とドキュメントに書かれている
SlkSetSocketListener()|Palm OS Programmer's API Reference/72 ほとんど使用されない関数
SlkSysPktDefaultResponse() 「システムのみが使用する」とドキュメントに書かれている
SndInit() 「システムのみが使用する」とドキュメントに書かれている
SndInterruptSmfIrregardless()|Palm OS Programmer's API Reference/50 ほとんど使用されない関数
SndPlaySmfIrregardless()|Palm OS Programmer's API Reference/50 ほとんど使用されない関数
SndPlaySmfResourceIrregardless()|Palm OS Programmer's API Reference/50 ほとんど使用されない関数
SrmOpenBackground() ほとんど使用されない関数
SrmSleep() "NOP" 関数として実装されている
SrmWake() "NOP" 関数として実装されている
SysBatteryDialog() 「システムのみが使用する」とドキュメントに書かれている
SysColdBoot() 「システムのみが使用する」とドキュメントに書かれている
SysDisableInts() 「システムのみが使用する」とドキュメントに書かれていました。Palm OS Cobalt では、"NOP" 関数として実装されています。
SysDoze() 「システムのみが使用する」とドキュメントに書かれている
SysFatalAlertInit() Undocumented "system use only"function.
SysInit() 「システムのみが使用する」とドキュメントに書かれている
SysLaunchConsole() 「システムのみが使用する」とドキュメントに書かれている
SysNewOwnerID() 「システムのみが使用する」とドキュメントに書かれている
SysNotifyBroadcastFromInterrupt()|Palm OS Programmer's API Reference/43 ほとんど使用されない関数
SysRestoreStatus() 「システムのみが使用する」とドキュメントに書かれていました。Palm OS Cobalt では、"NOP" 関数として実装されています。
SysSemaphoreSet() 「システムのみが使用する」とドキュメントに書かれている
SysSetTrapAddress()|Palm OS Programmer's API Reference/54 ほとんど使用されない関数
SysUILaunch() 「システムのみが使用する」とドキュメントに書かれている
SysUnimplemented() 「システムのみが使用する」とドキュメントに書かれている
TimInit() 「システムのみが使用する」とドキュメントに書かれている
VFSInstallFSLib()|Palm OS Programmer's API Reference/58 Palm OS Cobalt では実装されない
VFSRemoveFSLib()|Palm OS Programmer's API Reference/58 Palm OS Cobalt では実装されない
WinAddWindow() 「システムのみが使用する」とドキュメントに書かれている
WinDisableWindow() 「システムのみが使用する」とドキュメントに書かれていました。Palm OS Cobalt では、"NOP" 関数として実装されています。
WinEnableWindow() 「システムのみが使用する」とドキュメントに書かれていました。Palm OS Cobalt では、"NOP" 関数として実装されています。
WinGetFirstWindow()|Palm OS Programmer's API Reference/59-1 ほとんど使用されない関数
WinInitializeWindow() 「システムのみが使用する」とドキュメントに書かれていました。Palm OS Cobalt では、"NOP" 関数として実装されています。
WinMoveWindowAddr() 「システムのみが使用する」とドキュメントに書かれている
WinRemoveWindow() 「システムのみが使用する」とドキュメントに書かれている
WinScreenInit() 「システムのみが使用する」とドキュメントに書かれている

PIM アプリケーション データベースへのアクセス ^TOP^

68K アプリケーションのあるものは PIM アプリケーション データベースにアクセスします。Palm OS Cobalt では、PIM アプリケーションは ARM ネイティブ アプリケーションであり、それらのアプリケーションは現在ではアプリケーション データを保持するのにスキーマ データベースを使用します。「クラシック」PIM アプリケーション データベースはもはや存在しませんが、PACE は、68K アプリケーションが PIM アプリケーション データベースにアクセスしようと試みていることを検出すると、「正しい動作をする」ためにそれができることをします。

NOTE
ここで説明されている PIM データベース アクセス ソリューションは ARM ネイティブ PIM アプリケーションの存在に完全に依存します。同様に、それらのアプリケーションは sysAppLaunchCmdImportRecord 起動コマンドを正しくサポートしなければなりません。さらに、PACE はデータベース名、データベース スキーマ命、フィールド ID が変更されないと仮定します(しかしながら、追加のフィールドは存在するかもしれませんし、フィールドの順番を変更することはできます)。

あるアプリケーションが 68K PIM アプリケーション データベースにアクセスしようと試みる - データベースをオープンしようとすると、見つけようとするかのどちらか - とき、PACE は 68K データベースを作成し、それをオープンし、それのアプリケーション情報ブロックを初期化し(対応するネイティブ PIM アプリケーション情報ブロックを使用して)、すべてのレコードのキャッシュを対応する ARM ネイティブ PIM アプリケーション データベースの中に作成します。各キャッシュ エントリは以下の情報を含みます:

  • ネイティブ レコードの固有 ID
  • 68K レコードへのハンドル
  • 68K レコードのインデックス
  • そのレコードが所属するカテゴリ
  • 属性フラグ(Dirty と削除)

各エントリは初期化され、固有 ID とカテゴリ情報を持ちます。他のすべてのフィールドはクリアされます。

それからアプリケーションがレコードを読もうと試みる(例えば、DmQueryRecord() または DmGetRecord() を呼び出して)とき、PACE は sysAppLaunchCmdExportRecord リクエストをネイティブ アプリケーションに送ります。応答として、ネイティブ アプリケーションはそのレコードを vCard フォーマットで返します。PACE は vCard 情報を 68K PIM あぷいケーション レコードに変換して、そのレコードをデータベースがオープンされたときに作成された 68K PIM アプリケーション データベースに保存します。そのレコードのインデックスとレコード ハンドルはキャッシュに保存されます; レコードに対するさらなるリクエストはキャッシュからのレコード ハンドルを返します。

アプリケーションが新しいレコードを作成する場合、PACE はレコードを 68K PIM アプリケーション データベースの中に作成し、エントリをキャッシュに追加し、キャッシュ エントリの固有 ID を NULL に初期化します。

アプリケーションが新しいレコードに書き込みを行うとき、PACE はキャッシュの中のそのレコードを "Dirty" であるとマークを付けます。それにより、データベースが消去(原文: flush)されるときに、そのレコードは ARM ネイティブ PIM アプリケーション データベースに書き戻されます。そのとき、PACE は 68K レコードをそれ(訳者: PACE?)の vCard 表現に変換し、それから sysAppLaunchCmdImportRecord リクエストをネイティブ アプリケーションに送ります。レコードは以下の場合に消去 (flush) されます:

  • データベースがクローズされるとき
  • 他のレコードが作成されるとき
  • 固有 ID がアプリケーションに返される前(DmGetRecordInfo() 呼び出しへの応答の中で)

アプリケーションが PIM データベース レコードを削除するとき、PACE はキャッシュの中のそのレコードに "deleted" (削除された)というマークを付け、sysAppLaunchCmdDeleteRecord リクエストをネイティブ アプリケーションに送ります。

68K アプリケーションが PIM アプリケーション データベースをクローズすると、PACE はまだ書き込まれていないすべての Dirty レコードを消去 (flush) し、キャッシュに割り当てられていたメモリを解放し、68K PIM アプリケーション データベースをクローズして削除します。

2 つの関数 DmFindDatabase()DmGetNextDatabaseByTypeCreator には 68K アプリケーション データベースを置きっ放しにする副作用があります。それらのはぐれたデータベースをクリーン アップするために、PACE は 68K アプリケーションが終了するときは必ずすべての存在している 68K PIM アプリケーション データベースを削除します。これら 2 つの関数のどちらかでデータベースを見つけたあとに DmOpenDatabase() を呼び出し、その後、DmCloseDatabase() を呼び出した場合、そのデータベースはクローズ関数が呼び出されるときに削除されるということに注意してください。

DmFindDatabase() は 68K PIM アプリケーション データベースを置きっ放しにしますが、他のデータ マネージャ呼び出しを行うと PACE はそのデータベースを削除してしまうかもしれません。このため、DmFindDatabase() を呼び出し続けて DmOpenDatabase() を呼び出しを行って PIM アプリケーション データベースをオープンしようとしている場合(より一般的な方法である DmOpenDatabaseByTypeCreator() を使用する場合とは対照的に)、DmFindDatabase() 呼び出しと DmOpenDatabase() 呼び出しの間でその PIM アプリケーション データベースへの他のデータ マネージャ呼び出しを行うことは避けてください。


制限

PACE によって提供される PIM アプリケーション データベース アクセス ソリューションには多くの制限があります。1 つは、すべてのデータベース アクセス関数がサポートされるわけではないということです。ここに既知の制限をリスト アップします:

  • 実行速度が遅くなる可能性があります。ARM ネイティブ PIM アプリケーションは PIM データベース読み込み、書き込み、削除ごとに副起動(原文: sub-launched)されます。
  • カテゴリ変更はネイティブ PIM アプリケーションに反映されません。カテゴリ情報は Read-only として扱うべきです。
  • 3 種類のレコード削除 - DmDeleteRecord(), DmRemoveRecord(), DmArchiveRecord() - すべてがネイティブ PIM アプリケーションにレコード削除のリクエストを出します。
  • アプリケーション情報ブロックの中のいくつかは "hard-code" されます(訳者補足: hard-code とは変更できないように書かれたコードのこと)。例えば、ToDo ソート順序は常に「優先度、期日」であり、アドレス帳のラベルは英語で hard-code されています。
  • DmDatabaseSize() から返されるサイズ totalBytesdataBytes は 68K データベースから来ます。それゆえ、たいていは間違っています。それらはレコードが ARM ネイティブ PIM アプリケーション データベースから読み込まれた場合にのみ正しいです。
  • いくつかのデータベース レコード アクセス関数 - DmRemoveSecretRecords(), DmMoveCategory(), DmDeleteCategory() を含む - はサポートされません。
  • プライベート レコードにはいくつか制限があります。68K PIM アプリケーション実行時にはプライベート レコードはマスクされたり、隠されたりします。しかしながら、68K PIM アプリケーション実行中に「マスクをかける」「隠す」の変更は効果を持ちません。
  • レコードは ARM ネイティブ PIM アプリケーション データベースにすぐには書き込まれないため、68K PIM アプリケーション実行中にシステムがリセットされた場合、68K アプリケーション置き換え中だったいくつかのデータは失われるかもしれません。


PIM データベース アクセス API の要約

表 89.3 は、PIM アプリケーション データベースがアクセスされているかどうかを調べるために PACE がチェックする関数をリストにしています。PIM アプリケーション データベースがアクセスされている場合、PACE は 2 列目に書かれているように振舞います。


表 89.3 PIM データベース アクセスのために PACE がモニタする関数

関数 PACE はどのように扱うか
CategoryCreateList() ネイティブ OS を通して呼び出します。
CategoryEdit() ネイティブ OS を通して呼び出します。
CategoryFind() ネイティブ OS を通して呼び出します。
CategoryFreeList() ネイティブ OS を通して呼び出します。
CategoryGetName() ネイティブ OS を通して呼び出します。
CategoryGetNext() ネイティブ OS を通して呼び出します。
CategorySelect() ネイティブ OS を通して呼び出します。
CategorySetName() ネイティブ OS を通して呼び出します。
DmArchiveRecord() PACE がこの関数への呼び出しをハンドルします。
DmAttachRecord() PACE がこの関数への呼び出しをハンドルします。
DmCloseDatabase() PACE がこの関数への呼び出しをハンドルします。
DmDatabaseInfo() ネイティブ OS を通して呼び出します。
DmDatabaseProtect() ネイティブ OS を通して呼び出します。アプリケーションはこの関数を PIM データベースに対して呼び出すことを予期していないということに注意してください。
DmDatabaseSize() PACE がこの関数への呼び出しをハンドルします。
DmDeleteCategory() PIM データベースにアクセスしているときはサポートされません。sysErrNotAllowed が返されます。
DmDeleteDatabase() ネイティブ OS を通して呼び出します。アプリケーションはこの関数を PIM データベースに対して呼び出すことを予期していないということに注意してください。
DmDeleteRecord() PACE がこの関数への呼び出しをハンドルします。
DmDetachRecord() PACE がこの関数への呼び出しをハンドルします。
DmFindDatabase() PACE がこの関数への呼び出しをハンドルします。
DmFindRecordByID() PACE がこの関数への呼び出しをハンドルします。
DmFindRecordByOffsetInCategory() PACE がこの関数への呼び出しをハンドルします。
DmFindSortPosition() PACE がこの関数への呼び出しをハンドルします。
DmGetAppInfoID() ネイティブ OS を通して呼び出します。
DmGetDatabaseLockState() ネイティブ OS を通して呼び出します。アプリケーションはこの関数を PIM データベースに対して呼び出すことを予期していないということに注意してください。
DmGetNextDatabaseByTypeCreator() PACE がこの関数への呼び出しをハンドルします。
DmGetRecord() PACE がこの関数への呼び出しをハンドルします。
DmInsertionSort() PACE がこの関数への呼び出しをハンドルします。
DmMoveCategory() PIM データベースにアクセスしているときはサポートされません。sysErrNotAllowed が返されます。
DmMoveRecord() PACE がこの関数への呼び出しをハンドルします。
DmNewHandle() PACE がこの関数への呼び出しをハンドルします。
DmNewRecord() PACE がこの関数への呼び出しをハンドルします。
DmNextOpenDatabase() ネイティブ OS を通して呼び出します。アプリケーションはこの関数を PIM データベースに対して呼び出すことを予期していないということに注意してください。
DmNumDatabases() PACE がこの関数への呼び出しをハンドルします。
DmNumRecordsInCategory() PACE がこの関数への呼び出しをハンドルします。
DmOpenDatabase() PACE がこの関数への呼び出しをハンドルします。
DmOpenDatabaseByTypeCreator() PACE がこの関数への呼び出しをハンドルします。
DmOpenDatabaseInfo() ネイティブ OS を通して呼び出します。
DmOpenDBNoOverlay() PACE がこの関数への呼び出しをハンドルします。
DmPositionInCategory() PACE がこの関数への呼び出しをハンドルします。
DmQueryNextInCategory() PACE がこの関数への呼び出しをハンドルします。
DmQueryRecord() PACE がこの関数への呼び出しをハンドルします。
DmQuickSort() PACE がこの関数への呼び出しをハンドルします。
DmRecordInfo() PACE がこの関数への呼び出しをハンドルします。
DmReleaseRecord() PACE がこの関数への呼び出しをハンドルします。
DmRemoveRecord() PACE がこの関数への呼び出しをハンドルします。
DmRemoveSecretRecords() PIM データベースにアクセスしているときはサポートされません。sysErrNotAllowed が返されます。
DmResetRecordStates() (System Use Only function)ネイティブ OS を通して呼び出します。アプリケーションが PIM データベースに対してこの関数を呼び出すことはまれであるということに注意してください。
DmResizeRecord() PACE がこの関数への呼び出しをハンドルします。
DmSetDatabaseInfo() ネイティブ OS を通して呼び出します。
DmSetRecordInfo() PACE がこの関数への呼び出しをハンドルします。

新しい関数とマクロ ^TOP^

Palm OS Cobalt Feature Set は以下の関数を追加します。


証明マネージャ関数


証明マネージャ マクロ

新しいデータ構造体と定数 ^TOP^

以下のデータ構造体が新たに追加されます。これらは証明マネージャをサポートします:


証明マネージャ データ構造体

さらに多くの定数が証明マネージャ API を宣言しているヘッダ ファイルの中で定義されています。それらは以下のカテゴリに組織化されます:

変更された既存の関数 ^TOP^

以下の関数の座標スケール アルゴリズムが少し変更されました:


ウィンドウ マネージャ関数

One-Handed Navigation Feature Set ^TOP^

あなたはこの Feature Set が実装されていることを sysFtrNumFiveWayNavVersion Feature の存在をチェックすることでチェックすることができます。以下のように FtrGet()|Palm OS Programmer's API Reference/34 呼び出しを使用してチェックすることができます:

err = FtrGet(sysFtrCreator, sysFtrNumFiveWayNavVersion, &value);
if (err == errNone){
   // One-handed navigation is supported
} else {
   // No support for one-handed navigation
}

palmOne から提供される Handspring デバイス(Treo 600 など)では、代わりに hsFtrIDNavigationSupported を使用して同様のテクニックを使用します。利便性のために、Palm OS Glue ライブラリ - これは、どちらかの Feature が存在するデバイス上で機能する多くの One-Handed (片手の)ナビゲーション関数の "Glue" 等価物 を含みます - はどちらかの Feature の存在をチェックする関数を含みます。FrmGlueNavIsSupported()|Palm OS Programmer's API Reference/80true を返す場合、そのデバイス上にはどちらかの Feature が存在します。しかしながら、Form.h で宣言されている FrmNav... 関数は sysFtrNumFiveWayNavVersion Feature が存在しているデバイス上でのみ機能するため、その関数の Palm OS Glue バージョンを使用すべきであるということに注意してください。

新しい関数とマクロ ^TOP^

One-Handed ナビゲーション Feature Set は以下の関数を追加します。


フォーム関数

新しいデータ構造体とタイプ ^TOP^

以下のデータ構造体とタイプが新たに追加されます。これらは One-Handed ナビゲーション Feature をサポートします。

さらに、この Feature Set は One-Handed ナビゲーション Feature 専用の多くの定数を含みます。

← 付録 B のページ 1 へ ↑ 付録 B のトップへ

← 付録 A に戻る ↑トップへ 付録 C に進む →