WARP ファイル形式

この文書はの内容を日本語訳したものです。

WARP ファイル形式 - 第1.0版

WARP は Waba Application Resource Package の頭文字を取ったものです。Waba アプリケーションやクラスライブラリを構成するクラスファイルや画像、音声、その他のリソースは、WARP ファイルに格納されています。

見方によっては WARP ファイルは ZIP ファイルや JAR ファイルに似ており、他のリソース (ファイル) を格納します。 しかし、リソースは WARP ファイルに追加される際自動的には圧縮されません。

圧縮データの復元が低速あるいはコスト高な操作となりうる小規模な機器では、この違いは重要になります。圧縮が必要なリソースはどんなものであれ WARP ファイルに追加する前に圧縮すべきです。

WARP ファイル形式は二つの形で提供されます。PalmPilot 用の PDB 形式と Windows 用の WRP 形式です。ファイルとしては、PDB ファイルは.pdb という拡張子 (たとえば file.pdb) 、WRP ファイルは .wrp という拡張子となります。warpgen プログラムを利用して WARP ファイルを生成します。

WARP ファイルには 2 形式あるので、それぞれ別にとりあげます。

PDB WARPファイル

PDB WARP ファイルは構造的には PalmPilot の PDB データベースファイルの形式です。このため、.pdb ファイルをインストールするのに使う通常のプログラムを利用して、PDB WARP ファイルを PalmPilot デバイスにロードすることができます。

PDB ファイルの各レコードにはクラスファイルのようなリソースが入っています。全体的な PDB ファイル形式は他書で必要十分に文書化されていますので、ここでは個々のレコードの形式について述べるにとどめます。

(訳注:英語では http://www.palmos.com/dev/support/docs/fileformats/FileFormatsTOC.html 、日本語では http://members.tripod.co.jp/mizuno_ami/about_nsb/index20.html などが役に立ちます)

ファイルの各レコードでは、レコードの先頭にリソースのフルパス名 (ソース名) が入っており、リソースの実際のバイナリ表現がフルパス名の後に続きます。各レコードの形式は次の通りです。

name                type/size

-------------------------------

path length         int/2 bytes

path (name)         char/varies

resource            byte/varies

例を挙げましょう。"mypackage/test.class" という名称のクラスファイルを格納したレコードがあるとすると、そのレコードは数値 20 (パス名の長さ) で始まります。この数値は 2 バイトの長さでネットワークバイト順 (ビッグエンディアンまたは MSB 順とも言います) で表現します。その後に ASCII 文字で "mypackage/test.class" が続き、クラスファイル自体のバイナリ表現が来ます。レコードの長さは PDB レコードヘッダを調べれば決められます。

PDB WARP ファイル中のいかなるリソースであれ、元の形式から改変されることはありません。warpgen プログラムはリソースを圧縮しませんしクラスファイルをどのようなやり方であれ改変しません。

warpgen プログラムは WARP に追加されるファイルの相対パス名を WARP ファイル中のリソースのパス名として使用します。WARP ファイルにクラスファイルを追加する場合は、各クラスファイルの相対パス名が各クラスのパッケージ定義に合致するようなディレクトリで追加作業をするよう注意してください。たとえば、"myPack1.myPack2" というパッケージで定義されている "myClass" というクラスは、追加の際

 myPack1/myPack2/myClass.class というパス名で指定してください。

PDB WARP ファイルのレコード群はパス名で整列済みになっています。(ISO C strcmp() 関数に準じ) 最小値を持つパス名が先頭に来ます。warpgen プログラムはレコードのパス名部分に書き込む前にパス名中のいかなる逆スラッシュ (\) もスラッシュ (/) へ置き換えます。

WRP WARPファイル

PDB WARP ファイル同様、WRP WARP ファイルは複数のレコードで構成され、各レコードにはフルパスとクラスファイルや画像といったリソースのバイナリ表現とが記録されています。しかし、これら二つの形式は構造が違っています。WRP ファイルの構造は PDB ファイルの構造に比べてかなり簡単です。WRP ファイルは Waba クラスライブラリと Windows / Windows CE 用アプリケーションとを同梱するのに利用されています。

WRP ファイルは三つの部分からなります。ヘッダ、レコードオフセットセクション、レコード自身です。

WRP ファイルは次のヘッダで開始します。

name                type/size

-------------------------------

magic chars         char/4 bytes

number of records   int/4 bytes

WRP ファイル形式第 1.0 版用のマジック文字列は「Wrp1」です。この後にそのファイルにあるレコードの数が 4 バイトの値で続きます。WRP ファイル形式では整数値はすべてネットワーク・バイト順 (ビッグ・エンディアンあるいは MSB 順としても知られています) です。

ヘッダの次はレコードオフセット値の数です。オフセットはそれぞれ 4 バイトで次の形式となります。

name                type/size

-------------------------------

record offset       int/4 bytes

各オフセットはファイルの中のレコードにそれぞれ対応しています。オフセットは WARP ファイルの先頭からのバイト位置で、ファイルの中のレコードの位置を示しています。

レコードオフセット・セクションの次はファイル終端オフセットです。この値は最終レコードの長さを決定する際に利用できます。レコードの長さは次のレコードオフセットから現在のレコードオフセットを減算することで決定できます。

最終レコードのサイズは、最終レコードのレコードオフセットをファイル終端オフセットから減じて得られます。ファイル終端オフセットは 4 バイトの値で次の形式となります。

name                type/size

-------------------------------

end-of-file offset  int/4 bytes

レコードオフセットセクションの次はレコード自身です。各レコードは PDB WARP ファイルのレコードと同一の形式です。たとえば、次の例

name                type/size

-------------------------------

path length         int/2 bytes

path (name)         char/varies

resource            byte/varies

では、PDB WARP の場合同様、リソースは WRP ファイルにもともとの形式で圧縮されずレコードはパス名順に現れる形で格納されています。 (ISO C の strcmp() 関数でいう) 最小値を持つパス名が最初に出てきます。

PDB WARP ファイルの場合同様、warpgen プログラムはパス名中の逆スラッシュ (¥) をスラッシュ (/) へレコードに書き込む前に変換します。

Copyright © 1999-2001 Wabasoft.  Waba, WabaVM, Waba SDK は Wabasoft Inc. の商標です。