OSTRACISM CO.

bin-tar-gzip 取扱説明書


Icon Design : Satomi "COCO" Yoneki
Program : Takeshi "OSTRA" Yoneki
Copyright (C) 1999-2004 Takeshi Yoneki, OSTRACISM CO.
アイコン:米木 里美
作成:米木 武
著作:米木 武, OSTRACISM CO. 1999〜2004年

レポート宛先 ostra@asahi.email.ne.jp
Webサイト http://www.ne.jp/asahi/techno/ostra/

Compiled with CodeWarrior Pro 6.3 C/C++
Compiled with CodeWarrior Pro 8 C/C++

1.はじめに

「bin-tar-gzip」はフリーウエアです。
「bin-tar-gzip」を使って発生したいかなる問題も作成者は責任を持ちません。
「bin-tar-gzip」の再配布は自由です。
「bin-tar-gzip」のgzip部分はGPLのもとでの改造を伴う再配布は自由です。
「bin-tar-gzip」のbzip2部分はJulian Seward(オリジナル作者)によるbzip2のライセンス規定に従い、概ね改造を伴う再配布は自由です。
「bin-tar-gzip」のZ compress部分のライセンス規定は不明ですが改造を伴う再配布は自由と解釈してかまわないでしょう。
「bin-tar-gzip」のgzip、bzip2、Z compress以外の部分の著作権の放棄はしませんが、改造を伴う再配布は自由です。

gzipは1.2.4を元にしました。
bzip2は1.0.1を元にしました。
Z compressは4.0を元にしました。


2.使用方法

「bin-tar-gzip」は複数のファイルをまとめて圧縮するツールです。
複数のファイルをまとめることをアーカイブ(Archive)、圧縮することをコンプレス(Compress)と表現しています。また圧縮を解くことをデコンプレス(Decompress)と、アーカイブを展開することをエクストラクト(Extract)と表現しています。

例えば「bin-tar-gzip」にファイルの入ったフォルダSimCity3000をほうり込むとアーカイブとコンプレスをしてSimCity3000.tgzというファイルが作成されます。

また、このSimCity3000.tgzというファイルを再度「bin-tar-gzip」にほうり込むとSimCity3000フォルダ以下のファイルが復元します。

「bin-tar-gzip」はアーカイブする際、Macintosh固有のファイル形式からMacBinary IIという形式に変換します。Macintoshのファイルとしての情報は(概ね)保持されますのでご安心ください。


3.バグレポートについて

「bin-tar-gzip」作成にはC++を使って防衛的プログラミングを実践していますが、全く問題がないなどとはいいきれません。「bin-tar-gzip」の動作上の不具合が発見されたならば、作成者の米木宛のメールにてレポートをお願いします。


4.動作環境

System 7.0以降
System 7.5以降推奨。
MacOS 9での動作確認済み。
MacOS Xでの動作確認済み。


5.多少技術的な仕様の説明

「bin-tar-gzip」はその名の通りMacBinary IIにしてtarしてgzipします。またこの3つの変換のうち2つまでは省略できます。
MacBinary IIはMacintosh固有のデータフォーク+リソースフォークというファイルを、他環境でも情報を保持できる単一のデータファイルにまとめる形式です。
tarは本来はテープアーカイバですが、複数のファイルを1つのファイルにまとめる形式またはコマンドです。Unix標準です。
gzipはファイルを圧縮する形式またはコマンドです。Unixで一般的です。昔はZ compressというコマンドが使われていましたが現在はより高圧縮なgzipが一般的です。圧縮アルゴリズムそのものはPCのPKZIP(いわゆるZIP)と同一だそうです。
圧縮方法はgzipだけでなく、bzip2およびZ compressが選べます。bzip2はたいていの場合gzipより高圧縮です。

MacBinary IIにしてtarしてgzipするとき、Windowsや特にUnixなど他環境での展開を考え、tarで使うファイルパスはAlphanumeric(英数字)であるURLエンコードで変換しています。'_'と'.'以外の記号と0x80以上の文字を%nn(16進数)という表現に変えてパスを作ります。
MacBinary IIにしないときはこのURLエンコードで変換するかどうかを選べます。また、格納に使う漢字コードを選択できます。MacBinary IIのときはSHIFT JIS(Classic環境でのネイティブコードなので例えば英語環境ではMacRoman)固定です。
Alphanumeric変換で特に日本語は確実に3倍の長さになるため、tarのファイルパスの99文字制限にひっかかりやすくなります。ファイル名はMacBinary IIで保持されるためパスが99文字以内になるよう自動的に短かくできますが、フォルダ名はこのtarでのパスが頼りなため短くできません。

「bin-tar-gzip 2.5」以降ではパスが99文字を超えたときに@LongLink方式(多分GNU tar独自の実装)で長い名前を格納します。@LongLink方式対応のtarはGNU tarをはじめ、Windowsのtar32.dllや最近のMacOS Xのtarなど一般的になってきています。もちろん古い実装のtarではこの@LongLink方式に対応していないものもあります。
以前の「bin-tar-gzip 2.5」は99文字を超えるパスを可能にするため、tarの入れ子を実装していました。「bin-tar-gzip 2.5」以降もこの入れ子のtarを自動的に展開します。

WindowsやUnixなどにリソースフォークの必要ないファイルを持っていくときはMacBinary IIオプションをはずして単純にtarしてgzipするのが便利です。このときファイルパスは'/'とスペースを'_'にする以外手を加えません。展開先の環境で再現できるファイル名に気を付けてください。例えばWindowsでは'*'や'?'をファイルパスに使えません。Windowsのtar32.dllはSHIFT JISをそのまま使えるようです。

「bin-tar-gzip」で作成する.tgzファイルはWindowsやUnixなど他環境の標準的なgzipやtarで展開できます。MacBinary IIからデータフォーク部分を抽出するツールも複数あります。「bin-tar-gzip」はきわめて標準的な仕様に従ったツールです。

WindowsやUnixなど他環境で作成したtar-gzip(.tar.gzまたは.tgz)のファイルを「bin-tar-gzip」で展開する際、PC Exchangeに登録された拡張子とMacOSファイルタイプの対応に沿ってクリエータ・ファイルタイプを決めます。例えば.cppファイルは自動的にCodeWarrior IDEのファイルになります。

MacOS XでもPC Exchangeでの拡張子とMacOSファイルタイプの対応を得るAPI(歴史的経緯でAPIレベルではInternetConfigなんです)は残っていますが、Appleからはユーザに対応を設定させるアプリなりコンパネなりが提供されていません。一応Internet Explorerの[環境設定 - 受信ファイル - ファイルヘルパー]で設定は可能ですが、使いやすいとはいえません。
MacOS Xはファイルタイプとクリエータが空(ゼロ)のときは拡張子で適切なアイコンを振るので、よりOSに統合されたとみるべきなんでしょう。

「bin-tar-gzip」はエクストラクト時、パスに使われている漢字コードを調べ、自動的に適切な変換を行おうとします(調べるのは日本の漢字コードだけです)。自動判定をしないように設定もできます。ただし、「bin-tar-gzip」はClassic環境でのネイティブコードを基本に動作しますので、パスがMacRomanのものは英語等欧文環境で展開しないと適切なファイル名にならないでしょう。

MacOS XのtarでアーカイブされたUTF-8での日本語ファイル名の入ったファイルを、TextEncodingConverterのインストールされた68KのMacOS 7.6.1(J)で日本語ファイル名のまま展開できます。

現状、Thread Managerのないシステム(System 7.0や7.1)では「Stop」が効きません。また、コンプレスまたはデコンプレス中は「Stop」が効きません。

オリジナルbzip2は複数ファイルを扱うことができるようですが、「bin-tar-gzip」で展開できるのは最初の1ファイルのみです。


6.bin-tar-gzipで作成したアーカイブファイルをStuffIt Expanderで展開する際の注意点

bin-tar-gzipで作成した.tgzや.tarファイルをStuffIt Expanderで展開する際、必ずあらかじめStuffIt ExpanderのPreferences(環境設定)Cross Platform(クロスプラットフォーム)Never(変換しない)を選択してください。StuffIt Expanderはしばしばバイナリファイルをテキストファイルと誤認識するためMacBinary IIファイルのリソース部分が破壊されます。
破壊されたリソースを持つファイルをアプリケーションで開くと、最悪の場合システムが破壊されます。


7.メニューコマンド

7.1 Archive...

アーカイブするファイルまたはフォルダを選択します。

7.2 Extract...

エクストラクトするファイルを選択します。

7.3 Stop

アーカイブやエクストラクトを中断します。
中断はSystem 7.5以降で有効です。

7.4 Preferences...

Archive Method
アーカイブ時に有効にする機能を選択します。
ひとつも有効にしてないときは何も機能しません。
Archive Method - Compress
圧縮形式をgzip、bzip2、Z compressから選択します。
Archive To
アーカイブの結果作成されたアーカイブファイルの置場所を設定します。
Skip Invisible File and Folder
不可視ファイルを加えないようにします。
File Name Encode %nn
ファイルのパスをURLエンコードで変換してから格納します。
Add Execute Permission
アーカイブされるファイルのtarヘッダ情報に実行属性を付加します。OFFのときは-rw-rw-rw-で、ONでは-rwxrwxrwxになります。旧来のMacOSで有効です。MacOS Xではファイルの実際のパーミッションが反映されます。
Add User ID and Name
アーカイブされるファイルのtarヘッダ情報にユーザID、ユーザ名、グループID、グループ名を加えます。OFFのときは全く加えません。このスイッチをONにしてもbin-tar-gzipでのエクストラクトではこれらの情報は反映しません。MacOS X以降で有効です。
Extract To
エクストラクトする場所を設定します。
File Name Decode %nn
エクストラクト時格納されているパスのURLエンコードをデコードします。
Skip PC Exchange
MacOS Xにおいて拡張子とMacOSファイルタイプの関連付けをしません。
On Drag & Drop
アプリアイコンにドラッグ&ドロップしたときの動作を設定します。
File Name kanji Code
アーカイブ時はパスの格納に使う漢字コードを指定します。
エクストラクト時は自動判定しますが、判定に失敗したときおよびForce指定時にここで指定した漢字コードと仮定して動作します。
Force
エクストラクト時に漢字の自動判定をしません。


8.明日に向かって

現状、gzip部分はほとんど手つかずにオリジナルに近い状態です。このため、テンポラリファイルを作らなければならないなど制限を受けています。ここをMetrowerksの標準ライブラリを使わないMacintoshネイティブなコードに改造し、不要なテンポラリを作らないようにしたいものです。
Metrowerksの標準ライブラリという制約がなくなればSystem 6.0.7でも動作できるようになるはずですが、もういいですか?
テキストエンコードが必要かどうかまだ見極めが付きません。必要ならuuencodeを実装することになるでしょう。
bzipは普及が進んだら考えたいですね。
(1999)

バージョン1.2の段階でMetrowerksの標準ライブラリによるファイルI/Oは駆逐し、少なくとも不要なテンポラリは作らなくなりました。むろん必要なテンポラリはあります。おかげでしばらくバグで苦しみましたが。
MacOS Xは結局のところUnixなのでバージョン1.3でファイルのパーミッションを保持するようにしました。まあ、MacOS Xでリソースフォークや日本語のファイル名と無縁な生活をするならば、本物のtarをTerminalで使うのが正しい態度です。
(2001)

バージョン2.0でbzip2とついでにZ compressを実装しました。ファイルI/Oのコードが、gzipはUNIXシステムコール、bzip2は高水準ファイルI/O、Z compressは標準入出力のリダイレクトという見事な不一致ぶりを示しており、多少難儀しました。
(2001.07)

バージョン2.5で@LongLink方式および、HFS Plusでの長い名前に対応しました。また、漢字コードの変換も行うようにしたので、MacOS Xのtarで作られるようになったUTF-8のパスを持つファイルも扱えるようになりました(ただし国際対応ではありません)。
@LongLink方式は吉岡恒夫氏のWindows向けtar32.dllのページが参考になりました。また、まつもとひろゆき氏のRubyのドキュメントであるman-rd-ja.tar.gzが漢字コードの変換とURLエンコードおよび長い名前への対応のきっかけになりました。
比較的大きな改造だったのでバグが心配です。
(2004.09)


記録

1999.11.07 ドラフト
1999.11.23 初版
2001.01.07 1.2
2001.05.09 1.3
2001.07.30 2.0
2004.09.09 2.5, HTML化