*************************************************************************** TAR32.DLL SDK(Sotware Developers Kit) 開発者向けの説明 *************************************************************************** ここではTAR32.DLLを用いたプログラム作成について簡単に説明します。 ●このディレクトリのファイル一覧 _tar: DOS版TARに付属のアーカイブのデフォルト定義(なくてもいい(はず)) tartech.doc: DOS版TARに付属のTARついての資料 change.nt: DOS版TARに付属のバージョン履歴 readment.txt: DOS版TARに付属の説明 api_tar.txt: TAR32.DLLのAPIの説明 dll_tech.txt: DLL版TAR開発にあたっての資料(たわごと) tar32sdk.txt: この文書 tar32.h: TAR32 APIのヘッダファイル cmd_tar.txt: TAR32 のコマンドについての説明。(Tar関数から利用する) tar32.lib: TAR32.DLLのリンクライブラリ。(VC++5用) なお、ファイル名が「〜e.txt」となっているファイルは簡単かついいかげんな英語文書です。 ●説明(DLL版独自の仕様など) TAR32.DLLはTAR/TAR.GZ(TGZ)/TAR.Z(TAZ)/TAR.BZ2/GZIP(GZ)/COMPRESS(Z)/BZIP2(BZ2)のファイルを圧縮/展開するためのライブラリです。 kmtar Powerupkit for WIN-NTを元に作成しましたので、基本的なコマンドはkmtarと同じです。 但し、DLL化にあたり、主に次の点を変更しています。 ・TARの絡まないGZ,Z単独をファイルを圧縮/展開できるようにした。(Gオプション) (GZIP.DLLやCOMPRESS.DLLを別に作るのもなんなので,,) tar -Gxvf filename.gz filename というようにして使えます。 Ver0.45以降はGオプションがなくても展開できます。 ・長いファイル名のサポート(これが主目的か?) ・標準出力への展開(pオプション) tar -pxf foo.tgz file.txt というようにすると,file.txtの内容をバッファに展開して返します。 ・間接引数(レスポンス(response)ファイル)をサポート。(UNLHA32.DLL互換) もともとのtarの@はファイルの一覧を並べることしかできなかったが, これをUNLHA32.DLLなどと同じように,@fileとすると,ファイルの中身をコマンド 行引数として取り込むようにした。(unix toolsのルーチンを使用) ・ワイルドカード(*,?)ルールをUNLHA32.DLLとほぼ互換の方法にした。 *.*ですべてのファイルにマッチするようにした。(今まではディレクトリなどに マッチしなかった。)(--check-all-pathオプションで変更可能) ・基準ディレクトリをunlha32.dllと同じように指定できるようにした。 オリジナルはoオプションを用いていたが、\で終わるパス名を指定できるようにした。但し、展開先は1つのみ。(tar -zxvf foo.tgz pathname\ [files...]) ・--use-directory=0とすることで、パス名を展開せず、ファイル名のみ圧縮/展開できるようにした。(unlha32.dllのaコマンド、eコマンドとほぼ同じように..) ・NKF32.DLLがあれば、ファイル名の漢字コード(自動判別)変換を行います。 Unix環境でEUCで保存されたファイル名を取り出すことができます。 NKFのオプションは--nkf-set-filename-conversion及び--nkf-get-filename-conversionにて行うこともできます。 ・rコマンドでファイルが存在しない場合cコマンドと同様に動作するようにした。 ・--self-extracting=1オプションで自己解答書庫が作成できる(オマケ) ・bzip2形式の圧縮・解凍のサポート。 tar -Bcvf foo.tar.bz2 file.txt とすることで作成できます。 詳しくはcmd_tar.txtなどを参照してください。 また,FindFirst,FindNext系の関数もサポートしています。 Ver0.30以降ではSetOwnerWindow系の関数もサポートしています。 APIについてはapi_tar.txtを参照してください。 ●使用にあたって。 ・具体的なコマンドについては,cmd_tar.txtを見て下さい。コマンド例も載っています。 ・Gオプションを用いることで,GZ/Zの単独圧縮/解凍ができます(Zの圧縮を除く) ・pオプションを用いることで,ファイルの内容をバッファに書き出すことができます。 ・すべてのファイルについての情報(INDIVIDUALINFO)を得る場合は FinfFirst関数の第二引数には,"*.*"又は,""(空文字列)を与えて下さい。 (Visual Basicからは""の代わりにChr$(0)を与えて下さい) なるべく""の使用を勧めます。 ・単純にTGZファイルを圧縮する場合は,-zcvf foo.tgz foo のようにしてください。 ・単純にTGZファイルを展開する場合は,-zxvf foo.tgz foo のようにしてください。 ・単純にTAR.BZ2ファイルを圧縮する場合は,-Bcvf foo.tgz foo のようにしてください。 (その他さまざまな例がcmd_tar.txtの最後の方に載っています。) ●注意 COMPRESSの圧縮はできません。 まだできたてなので,変な所があると思います。FWINDC MES#3やメールなどで言ってください。 ●Tar形式について tarはUnix系のOSでアーカイバ(書庫)作成によく使われるフォーマットです。 ただ、tarはlhaのように圧縮しながら書庫を作成するのではなく、複数のファイルを1つにまとめるだけです。 そこで、gzipという圧縮ソフトでtar形式のファイルを圧縮します。こうしてできるのがtar.gz形式の書庫です。 このような構造上、tar.gz書庫の中のファイルの中味、ファイル名、その他のファイル情報は一度gzip形式を展開してtar形式に直さないとわかりません。これはlhaがそれぞれのファイル情報を簡単にすばやくのぞける点と異なっています。また逆にtar.gzは複数のファイルをまとめて圧縮するので圧縮率は一般にlhaよりあがります。 また、compress形式で圧縮したtar.Z書庫もありますが、普通はtar.gzの方が圧縮率が高く、tar.gzの方がよく利用されているようです。 次に、gzip形式単独で見てみると、これはファイル名などのファイル情報を含まず、ただ1つのファイルを圧縮するだけです。(ファイル情報を持っているgzip形式もあるようですが、、) bzip2形式は最近でてきた新しいフォーマットです。gzipより1-2割ほど圧縮率が高いことが多いようです。 ●LZW特許 ・compressのアルゴリズムはLZW(Lempel-Ziv method)と深く関わっています。 ・LZWはUNYSYS社がアメリカ、日本などで特許を取得しています。 ・tar.Z形式の展開をサポートすると、特許に抵触する可能性があるかもしれません。 ・アルゴリズムと特許の関係など微妙な問題をはらんでいます。 ・この問題に関しては必要に応じて各自で判断・処理を行ってください。 ●参考資料 =========FEXT LIB#3================= 421 SGL00213 96/09/24 192539 376 B TARNT096.LZH kmtar for WIN32 v0.96 このtar32.dllはkmtar PowerUp kit for WINNT32 ver0.96を元に 作成されています。したがって、基本的な仕様はうけつがれています。 =========FEXT LIB#13================== 488 RGD00165 96/10/28 71947 27 B GZP124B .ZIP GNU gzip 1.2.4 489 RGD00165 96/10/28 253425 6 B GZP124S .ZIP GNU gzip 1.2.4 sources kmtar Power Up Kitはgzip ver1.2.4を受け継いでいるようです。 =========FGALTLB LIB#4=============== 516 KFA05024 95/04/04 143095 2589 B GZ124D5F.LZH gzip 1.2.4(MSDOS_05)FullSet kmtar Power Up Kitはgzip ver1.2.4を受け継いでいるようです。 特にこのファイルはマニュアルを含めて日本語化されているようです。 readme.jpnには「zip vs. gzip」でzipとgzipの違いについてかかれてます。 ここでのzipについてはlhaもほぼ当てはまると思います。 ==========FEXT LIB#4=============== 74 NBA00546 91/11/25 38486 1197 B COMP16 .LZH compress 4.3d kmtar Power Up Kitはcompress 4.3dを組み込んでいるようです。 ===========FEXT LIB#4=================== 158 SGL00213 95/04/01 76675 962 B PUK37BN .LZH kmtar Power Up v3.7 BIN 160 SGL00213 95/04/01 140775 145 B PUK37SRC.LZH kmtar Power Up v3.7-SRC 161 SGL00213 95/04/05 10 48 B PUK37SRC.MIS PUK37SRC の入れ忘れfile kmtar Power Up KitのDOS版です。 ==========FWINAL LIB#11================= 345 GCA02652 96/07/09 14528 349 B NKF32100.LZH Network Kanji Filter32 1.00 このNKF32.DLLがあれば、ファイル名の漢字コード自動判別変換を行います。 ただ一つ残念なのは、ソースがなくなったため、バージョンアップの可能性が 非常に低いということです。 ==========FEXT LIB#4==================== 224 SDI00618 96/09/08 32556 88 B NKF16 .LZH 漢字コード変換フィルタ NKF.EXE(DOS版)です。NKF32.DLLは基本的にこの仕様をうけついでいるようです。 ======================================== http://www.csdinc.co.jp/archiver/ (統合化ホームページ) アーカイバ統合化計画に関するさまざまな情報があります。DLLやアプリケーションがここからダウンロードできます。 ●その他 このDLLを使ったソフトが増えてくれるとうれしいです。 # いまのところほとんどないようですし。。(^^; バグ,感想などは会議室かメールでどしどしどうぞ。 (どんなバグ、要望などでも言ってくれた方がうれしいです) ●著作権など もともとのkmtarはPublic Domain Softwareでしたが,gzip/compressというGPLのソフト を取り込んだため,kmtar Power Up kitはGPLに従うようです。GPLのソフトを変更 したものは,GPLに従わないといけないため,このDLL版も当然GPLであり,また, ソースプログラムも公開しています。 DLL版では間接引数展開にUnix Tools Ver2.09cに付属のsetarg.cを(改造して) 使わせてもらってます。これはもともと斉藤靖氏によって書かれたものを新出さん が改良されたものです。詳しくはsetarg.h/setarg.cを見て下さい。 なお,以下のファイルは私(吉岡)が追加したもので,この部分については自由に 使ってもらっても結構です。 defconf.h,ioctrl.h,ioctrl.c,mkvcsrc.bat,mkvcsrc.pl,nkf.h,nkf.c,tar32.cpp,tar32.h,dfltwin.c,dfltwin.h,tarmsg.h,tarmsg.c (tar32.hはほとんどunlha32.h/unzip32.hのコピーだけど,自由に使っていいようです。)