===================================================================== (注)このファイルはDOS版kmtarに付属していたファイルです。 ===================================================================== --------------------------------------------------------------------- kmtar 2.00 パワーアップキット3.7 Technical DOC for Power Up Kit 1995-03-04 tantan SGL00213@niftyserve.or.jp --------------------------------------------------------------------- 『コンパイル』 kmtar は、本来 LSI-C86 でコンパイルされていました。これに従っ てPower Up Kit も v2.0 までは、LSI-C86 v3.30 試食版を使っていま した。しかし、compress や gzip の取り込みに伴いsmall model では 作成が困難な状況となってまいりました。LSI-C86 v3.30 試食版は、s mall model のみサポートとなっていますので、ここで、LSI-C86 の使 用を諦めてPower Up Kit v3.0 からMS-C v7.0に変更しました。さらに v3.7からのgzipの圧縮機能の取り込みにより、DOSの640Kのメモリ内で は十分なパフォーマンスが発揮できなくなりました。そこで、GO32 と いうDOS-EXTENDERの力を借りて386 以上のマシンで動作するtar32とし て公開します。このソースのコンパイルには、同じくGO32の上で動く DOS用GCCのdjgpp 1.12 が必要です。 VC++ 1.0 版 機能的にはフルスペックですが、残りメモリが少ないため展開時のファ イル名比較時に重複チェックを取りやめる場合があります。中間ファイ ルは、XMS,EMS,DISK に作成されます。 VC++ 4.0 版 現在、WIN32版は、VC++4.0でコンパイルされています。 djgpp(GO32) 版 中間ファイルは作成されません。また、実行にGO32 v1.12 以降を必要 とするため、PC/AT 及びそのBIOSレベル互換機とPC98しか作動しません。 チェックは GCC 2.6.3 on GO32 v1.12 で行いました。フルスペックの 実行形式が出来ます。 ソースのアーカイブには、TOWNS-gpp ,TCC++ 用のmake fileが含まれて いますがこれらはあくまで移植しようとする方の参考に入れてあるだけ です。 『ファイル名重複防止機能の補強』 kmtar 2.00は、展開時のファイル名の重複を防ぐために一度展開した ファイル名は、TABLE に記憶しておき次の展開時に重複していないかど うかを調べます。オリジナルはテーブル確保のメモリが無くなればこの 機能を停止していたのですが、puk v3.7では、警告を出して作業を続行 します。 『"tar.Z" "tar.z" ファイルからの直接展開』 compress 4.3d と gzip 1.2.4 のinflate関数を取り込みました。 ファイル形式は自動認識です、ファイル形式認識ルーチンは、gzip とcompress 以外のもので、最初が NULL またはASCII 文字なら非圧縮 のtar と判断します。 また圧縮ファイル展開時はVC++版は、中間ファイルを作ります。gcc-2 .4.2 の展開の場合330K程度です。 compress は中間ファイルを作らないで実現できますが、gzip と仕様を 合わせるため同じく中間ファイルを作ります。 中間ファイルは、MS-C の仮想記憶関数を使って EMS XMS DISK の順 に作成します。EMS XMS に作成する場合は、比較的速いですが、DISK に作成する場合は、自分で単純にDISK SWAPした方が速いので、EMS も XMS も無い方は、makefile の BUFFERING マクロをコメントに落として コンパイルして下さい。また、速度はgo32 版が最も高速です。 『圧縮ファイルの直接吐き出し』   gzip 1.2.4のdeflate関数を取り込んだため、圧縮しての吐き出しが可   能です。VC++ 版は、中間ファイルを作成しますが、GO32版は作成しま   せん。圧縮形式はgzip のものだけです。でもgnutarと異なり圧縮レベ   ルの指定が可能です。 『マシン認識ルーチン』 K369 氏のアドバイスで 0xFFFF0003 からの2byte を見て決めています。 従って、B16, FMR/TOWNS 系や PC98 normal 系は自動認識出来る様ですが、 AT, J3100系は例外が有り、一筋なわでは行かないようです。 この辺の機能は強化して行きたいと思っていますが、日本で使われている kmtar が動くDOS マシンはBIOS で見るとFMR,PC98,PCAT の3種類だと思う ので_tar ファイルで指定すれば将来的にも問題とはならないでしょう。 『kmori 氏がinternet上で公開されたgnu tar展開用の差分取り込み。』 kmori 氏がinternet 上で公開された差分は、DMA のバンク境界の対策を含 んでいましたがこれはAssistantIO 氏の前回の差分2.00->2.01 と部分的に 衝突するため、kmori氏の差分は一部分をカットしました。差分を頂いた tmasu 氏 Paci 氏に感謝します。 ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ Technical DOC for kmtar 2.00 kmtar は、改良により機能はどんどん向上しても使用説明書などには必ずし も反映されていません。 そこで、このパワーアップキットを作成するにあたり得た知見を説明書の 補足として収録します。 ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ 1.名前の長さの制限 kmtar 内部では、ファイル名の長さは、100以下です。これを打破するために ././@LongLink というエントリーの擬似ファイルが使われます。このファイル   のデータ領域に次のファイルのフルネームが入っています。tarnt096ではこの   形式に対応しました。 2.DOS になじまない名前の自動変更に付いて ファイル名に使えない文字は、アンダースコア "_" に変更されます。 例えば、 g++ -> g__ Q+A -> Q_A abc.dd.tar -> abc_dd.tar また、キャラクタデバイスと重複する名前は先頭にアンダースコア "_" が追加されます。 例えば、98では      clock.s -> _clock.s 3.重複するファイル名の処理 展開時にファイル名が重複する場合は、拡張子を変更して区別をつけます。 例えば、 gcc.texinfo-1 gcc.texinfo-2 gcc.texinfo-3 gcc.texinfo-4 gcc.texinfo-5 gcc.texinfo-6 とのようなファイル群は gcc.tex gcc.000 gcc.001 gcc.002 gcc.003 gcc.004 gcc.005 のように変更されます。従って、もとのファイル名との対応はつきません。 さらに、ファイル名が重複するかどうかの判断は、メモリ上に展開したファ イル名のリストを持っておりこのリストの参照によって判断します。kmtar は LSI-C86のスモールモデルでコンパイルされているため、データ領域は64Kに限 られています。従って、余り多くのファイル名を保持する事は出来ません。実 験では、ほぼ500 程度でした。例えば、glibc103.tarでは、ファイル名の重複 チェック機構は正常に作動しません。 4.機種依存性について kmtar は、NEWS などワークステーションのディスクを読めるようにBIOS レ ベルの物理読みだしをサポートしています。機種依存するのは、この部分のル ーチンです。従って他の部分は、DOS にのみ依存します。つまり通常の使用を する限りDOS 汎用です。 5.漢字のファイル名の取扱い kmtar は漢字のファイル名ディレクトリ名の取扱いが可能です。 6.@response_file の大きさ @response_file は、別名ファイルを読み込むファイルですが、これを格納 する配列の大きさは、1000 です。 7.x コマンドでワイルドカード展開が出来るとchange.log に有りますが、ワイル ドカードと言うより簡易正規表現が出来ます。便利ですよ。 ( PUK 適用後のtar.doc 参照 ) 以上