MacBinaryの規格 (ヘッダ内容と判別法)

'01.1.22 ('03.3.6更新)

MacBinaryのヘッダ128バイトを解説すれば、MacBinaryの規格の説明になりますね。おまけとしてMacBinary判別法を載せました。「MacBinaryって何?」って人には入門編があります。

ヘッダにはデータフォークとリソースフォークを分離するためのデータとともに、デスクトップファイル等に保存されている、そのファイルに関してのデータが保存されます。

データフォーク、リソースフォークは128バイトの倍数になるように、ぴったりでない場合はnullで水増しされます。コメントは水増しの必要は有りませんが、水増しするエンコーダもあります。

Get Infoコメントの保存は、MacBinaryIIの時には規格にあっても殆ど採用されませんでした。現在のMacBinaryIIIになってから採用されつつあるようです。OS8になって、デスクトップファイルを作り直してもコメントが消えなくなったためでしょう。

MacBinaryI, MacBinaryII, MacBinaryIIIと少しずつ変わっていますが、基本的な部分は同じです。MacBinaryIIIはMac OS8に対応して作られましたが、まだMacBinaryIIを使うソフトも多くあります。

OS XでFinderが255文字までのファイル名に対応しましたが、MacBinaryでは最長でも63バイトまでしか扱えません。

ヘッダ・フォーマット

オフセット 長さ コンテンツ
000 byte ゼロ
001 byte ファイルネームの長さ(byte)(通常31bytesまで)
002 1 to 63 bytes ファイルネーム(ASCIIコード)
(長さbytes分だけ重要)
(日本語はShift JISになるようだが規格上は未確認)
065 long word ファイルタイプ(ASCIIコード通常4文字)
069 long word クリエータ(ASCIIコード通常4文字)
073 byte

Finderフラグ

MacBinaryI,MacBinaryII
Bit 7 - Locked
Bit 6 - Invisible
Bit 5 - Bundle
Bit 4 - System
Bit 3 - Bozo
Bit 2 - Busy
Bit 1 - Changed
Bit 0 - Inited

MacBinaryIII
Bit 7 - isAlias
Bit 6 - isInvisible
Bit 5 - hasBundle
Bit 4 - nameLocked
Bit 3 - isStationery
Bit 2 - hasCustomIcon
Bit 1 - reserved
Bit 0 - hasBeenInited

074 byte ゼロ
075 word ウインドウの中でのファイル(アイコン)の垂直位置
077 word ウインドウの中でのファイル(アイコン)の水平位置
079 word ファイルのウインドウかフォルダのID
081 byte Protectedフラグ(最下位ビット)
082 byte ゼロ
083 long word データフォークの長さ(byte)
087 long word リソースフォークの長さ(byte)
091 long word 作成日
(1904年1月1日(金) 0:00 AM からの経過秒数)
095 long word 最終修正日
(1904年1月1日(金) 0:00 AM からの経過秒数)
*099 word

リソースフォークの後ろに追加されたGet Infoコメントの長さ(byte)(Iではゼロで追加しない)
(リソースフォークの後ろにもさらにデータが追加されることがあるってことですよ)

Get InfoコメントとはFinderの「情報を見る(Get Info)」で書き込める、ファイルに添付するコメント。

*101 byte

Finderフラグその2(Iではゼロ)

Bit 7 - hasNoInits
Bit 6 - isShared
Bit 5 - requiresSwitchLaunch
Bit 4 - ColorReserved
Bits 1-3 - color
Bit 0 - isOnDesk

**102 long word 識別目的のための署名(ASCIIコードで'mBIN')(I,IIではゼロ)
(mBINと書いてあればMacBinaryIII)
**106 byte ファイル名のスクリプト(fxInfoに記録されたfdScript fieldから)(I,IIではゼロ)
**107 byte 拡張Finderフラグ(fxInfoに記録されたfdXFlags fieldから)(I,IIではゼロ)
108-115 - 使わない。ゼロにしておく、読む時は無視。
*116 long word アーカイブした場合の元のファイル全部足した長さ(Iではゼロ)
*120 word 第2ヘッダの長さ。将来の拡張のためで、MacBinaryではゼロ
*122 byte MacBinaryのバージョンナンバー
MacBinaryII=129,MacBinaryIII=130(Iではゼロ)
*123 byte 最小のMacBinaryのバージョンナンバー
(II,IIIは129にセット)(Iではゼロ)
*124 word この前124バイトのCRC(Iではゼロ)
CRCはエラー検出、訂正方式のひとつ)
126 word MacBinaryIでコンピュータタイプとOSのIDのための予約だった。(II,IIIは未定義)

(*はIIから追加、**はIIIから追加された項目)
(オフセットと数値は10進数で表示)
(word = 2 bytes , long word = 4 bytes)

MacBinary判別法

オフセット 長さ コンテンツ 結果
0と74 byte - ゼロ 最低限ここはチェック
82 byte - ゼロ MacBinaryI
ゼロならIと互換性あり
1 byte 名前の長さ 1〜63bytes MacBinaryI
83と87 long word フォークの長さ 0〜0x007F FFFF
bytes
MacBinaryI
101〜125 byte - すべてゼロ MacBinaryIのみ
124 word CRC 合ってる MacBinaryII以上
123 byte 最小バージョン 129 MacBinaryIIとIII
129ならIIと互換性あり
102 long word 署名 mBIN MacBinaryIII

参考:MacBinary, MacBinaryII, MacBinaryIII