KH-SARC
これはなに?
- 複数のファイルやディレクトリ構造などを簡単に格納するための共通フォーマット
- Sはsimple, ARCはarchive
シグネチャ
- KHSARC(6バイト)
- KH系のファイルフォーマットは6文字シグネチャをベースとする。
- KH系のファイルフォーマットはKHB系のファイルフォーマットとは異なり、バイト単位で設計されている。
ヘッダ
- シグネチャの後に、タグヘッダが後続する。KH系のファイルフォーマットはこの点についてどれも似たような構成を取る。
- 00: NOPタグ。
- 01: リマークタグ。スキップしたいバイト数が後続する。
- 02: フラグ
- bit0: ファイルの更新日時を格納する(年月日時分秒)
- bit1: ファイルの作成日時を格納する(年月日時分秒)
- bit2: ファイルのフラグを格納する
- bit3: ファイルのアクセス権を格納する
- bit4: ファイルID的なものを格納する
- bit5: ファイル名を格納しない
- bit6: CRC32を格納しない
- 03: ヘッダ終端マークタグ
- 01-0fのタグは、基本的にパラメータが一つしかないので、理解できないタグがあってもスキップできる。
- ファイル名はデフォルトではUTF-8エンコードとする。
数値エンコード
- 0xxxxxxx: 0-7f: 8bitエンコード
- 10xxxxxx_xxxxxxxx: 0-3fff: 16bitエンコード
- 110xxxxx_xxxxxxxx_xxxxxxxx: 0-1fffff: 24bitエンコード
- 11111110_...: 0-00ffffff_ffffffff: 64bitエンコード
アクセス権のためのユーザIDやグループIDの定義
- 00: NOP
- 01: リマークタグ。スキップしたいバイト数が後続する。
- 03: 終端
- 04: ユーザ定義
- 05: グループ定義
データ本体
- 00: NOP
- 01: リマークタグ。スキップしたいバイト数が後続する。
- 02: 通常形式
- ファイル名長さ
- ファイル名本体
- ファイルID
- ファイルフラグ
- ファイルアクセス権
- ファイル更新日時
- ファイル作成日時
- CRC-32
- データ長
- データ本体
- 03: 本体終端
- 04: ディレクトリ
- ファイル名長さ
- ファイル名本体
- ファイルID
- ファイルフラグ
- ファイルアクセス権
- ファイル更新日時
- ファイル作成日時
- 05: ディレクトリ終端
- 02タグのフラグ:
- bit0: readonlyフラグ。
- bit1: 隠しファイル属性。
- bit2: ポインタ形式(データ長の後に本体がなく、代わりにファイル先頭からのオフセットが記述される)
- ファイルのアクセス権を設定した場合は、ユーザIDやグループIDなども必要になるが、それはまた後日考える。
使いどころ
- tarの代わりにする。ポインタ形式があるので、内容が同一のファイルが複数ある場合、それは重複して記録しないで済む。
- OSECPU-VMなどのライブラリファイル形式に採用することもありうる。
こめんと欄