LHtouch.X/EXE Version 2.00β

LZH ファイルのタイムスタンプを書庫内の最新のファイルに合せたり、
書庫内のファイル群のタイムスタンプを LZH ファイルのタイムスタンプ
に合せたり、書庫内のファイル名をリネームしたり、その他いろいろ
LZH ファイルを触れるツール

X680x0版/MSDOS版 共通ドキュメント

Copyright (C) 1993,94,95 田辺 英昭 (Hideaki `ArctanX' TANABE)


1. はじめに〜本プログラムの特徴

 こんにちは、ArctanX です。

 LHA は書庫作成時には、オプション指定により、書庫内の最新のファイルに書庫の タイムスタンプを合せることができますが、既に存在している書庫のタイムスタンプ を書庫内の最新のファイルに合せるのは、少しばかり手間がかかります(*1)。その手 間を省くためのツールがこれです。オプション指定により、書庫内の最古のファイル にタイムスタンプを合せることもできます。

 uudecode や XMODEM でファイルをやりとりすると、オリジナルアーカイブのタイ ムスタンプが失われてしまうので、これらを使っている人には必携のツールです。

 本プログラムは以上のようなコンセプト(?)で作られた、拙作 LHtime.x のアップ グレード版で、逆に書庫内のファイル全てのタイムスタンプを LZH ファイルのタイ ムスタンプで統一することもできます。こちらは、どちらかというと書庫を作ってパ ソコン通信等にアップロードする方のための機能かもしれません。(書庫内のファイ ルのタイムスタンプが揃っていると綺麗ですし)

 Ver 1.02 以降では、書庫内に保存されているファイル名の大文字/小文字を変更 できたり、マルチピリオドのファイル名が保存されている書庫をマルチピリオドのサ ポートされていない処理系で展開するための機能がついたり、自己解凍書庫を普通の LZH ファイルに戻せたり、LZH ファイル末尾についているゴミデータを削除できたり、 書庫内のファイル名をリネームできたり、様々な機能がつきました。

 このような「タイムスタンプ合せ」を軸とした諸機能が「書庫を展開しないで」実 行できることが、本プログラムの特徴です。

(*1)LHtime.x 開発当時は手間がかかったのです(今は LHA 単体でもできますが多く のファイルを相手にしようとすると、やはり大変です)。


2. インストールの方法

2.1) 実行ファイル

 まず、このドキュメントの含まれている LHTX200B.LZH (あるいは LHTD200B.LZH) を解凍して下さい。中に含まれている LHTOUCH.X(あるいは LHTOUCH.EXE)をパスの 通っているところにコピーすればおしまいです。チャイルドプロセスで別のプログラ ムを呼んだりはしていないので、その辺は気にしなくて大丈夫です。

 また、LHTOUCH.X / EXE を LHSTRIP.X / EXE という名前でコピーしたりリンクを 張ると、-S オプションをあらかじめ指定してあるかのように振る舞います。また、 同様に SFX2LZH.X / EXE にコピーしたりリンクを張ると、-s オプションをあらかじ め指定してあるかのように振る舞います。X680x0 で lndrv(沖@沖氏作) を利用して いる方はリンクを張るとよいでしょう。lndrv を利用していない場合や MSDOS 版の 場合にはリンクは張れないので、上記のファイル名でコピーします。
 ただし、LHSTRIP.X/EXE や SFX2LZH.X/EXE は内部で -S や -s 相当の処理が自動 的に付加されるだけで、それ以外は LHTOUCH.X/EXE と同じですので、その他のオプ ションは共通に使えます。また、オプションを完全に覚えて使いこなせるなら、 LHSTRIP.X/EXE や SFX2LZH.X/EXE を無理して作る必要はありません。

2.2) 環境変数

 環境変数 LHTOUCH(大文字)にセットしてあるパラメータがコマンドラインの最後 に追加されますので、よく使うオプション等をセットしておくと便利です。

[例]

COMMAND.X / COM の場合 : set LHTOUCH=-v -S -i
fish.x の場合(X680x0)  : setenv LHTOUCH '-v -S -i'

2.3) 設定ファイル

 .lhtouch または _lhtouch というファイルにオプション等を書いておくと、環境 変数の場合同様、コマンドラインの最後に追加されます。.lhtouch / _lhtouch は、 以下の順で検索されます。

  1. 環境変数 HOME が指しているパス(いわゆるホームディレクトリ)
  2. 実行ファイルがあるパス
  3. カレントパス
 また、.lhtouch と _lhtouch では .lhtouch が優先されます。MSDOS 版の場合に は .lhtouch というファイルは作れませんので、_lhtouch を使うことになります。


3. 本プログラムの使い方

3.1) ヘルプの表示方法

lhtouch[CR] あるいは lhtouch -h[CR] でヘルプが出てきます。


C:\>lhtouch
lhtouch - LZH `touch' tool  Version 2.00β  (1995/11/25)
Copyright (C) 1993,94,95   田辺 英昭 (Hideaki `ArctanX' TANABE)
                           KFA05024@niftyserve.or.jp
Usage  : lhtouch [Option(s)]  [Option(s)]
Func   : 書庫のタイムスタンプを書庫内の最新のファイルに合せます。
Option : -a  (--oldfile=)
                      ....... 書庫内のリネームしたい旧ファイル名を
                              指定します。
         -b  (--newfile=)
                      ....... 書庫内のリネームしたい新ファイル名を
                              指定します。
         -c  (--chcase=)
                      ....... 書庫内のファイル名の case を変えます。
            -c1 ............. ノード全体を大文字に変換します。
            -c2 ............. 拡張子全体を大文字に変換します。
            -c4 ............. ノードと拡張子の先頭を大文字に変換します。
            -c8 ............. 大文字にではなく、小文字に変換します。
                               は、1,2,4,8 の論理和で指定します。
         -C  (--convert=)
                      ....... 書庫内のファイル名をコンバートします。
            -C1 ............. パスの最初の `/'(root) を `_' に変換します。
            -C2 ............. ファイル名中の特殊文字を `_' に変換します。
            -C4 ............. マルチピリオドを `_' に変換します。
                                 は、1,2,4 の論理和で指定します。
         -d (--except_lhd)... ディレクトリ書庫(-lhd-)のタイムスタンプを
                              比較対象から外します。
         -e (--exam)......... チェックのみ行い、ゴミや Mac LZH のヘッダを
                              実際には削除しません(-S と併用すること)。
         -f (--force)........ 拡張子が LZH/X/R/EXE/COM でなくても
                              強制的に作業します。
         -h (--help)......... このヘルプを表示します。
         -i (--ignore)....... 正規の書庫/自己解凍書庫かどうかのチェックを
                              可能な限り甘くします。
         -m (--mkbak)........ LZH ファイル末尾のゴミを削除するときに、
                              .BAK ファイルを作ります。
         -n (--no_chtime).... 書庫のタイムスタンプを書庫内ファイルに
                              合せません。(デフォルトでは必ず合せます。)
         -p (--put_trash).... LZH ファイルの末尾についているゴミをファイルと
                              して書き出します(-S と併用すること)。
         -q (--quiet)........ 画面に表示されるメッセージを抑制します。
         -r (--reverse)...... 書庫内最古のファイルに合せます。
         -R (--recursive).... サブディレクトリも検索します。
         -s (--sfx2lzh)...... 自己解凍書庫を通常の LZH ファイルに変換します。
                              (X/R/EXE/COM 対応)
                              自動的に -S も指定したことになります。
         -S (--strip)........ LZH ファイルの末尾についているゴミを削除します。
                              (XMODEM 対策など)
                              Mac LZH のヘッダも削除します。
         -t[Time Stamp] (--touch[=Time Stamp])
                      ....... 書庫内のファイルのタイムスタンプを
                              書庫のタイムスタンプに合わせます。
                              [Time Stamp] を指定すると、最初に書庫のタイムス
                              タンプを [Time Stamp] に合わせてから処理を行ない
                              ます。 [Time Stamp] は [[CC]YY]MMDDhhmm[.ss] の
                              ように指定します。
         -v (--verbose)...... バーボーズモードです。
                              指定する個数でバーボーズレベルが変化します。
         -V (--version)...... このプログラムのバージョンを表示します。
etc    : 拡張子 LZH/X/R/EXE/COM は省略できます。ワイルドカード、
         インダイレクトファイル(@filename) 対応です。
         オプションは -tvR のように続けて指定することもできます。

 メッセージがスクロールアップしないように途中で「-- more --」が出ます。「Q」 以外の任意のキーで動作を継続させることができます。「Q」を押すとその場でヘル プメッセージの表示を中断します。

3.2) オプションの説明

3.2.1) -a (--oldfile) / -b (--newfile) オプション

 書庫内のファイル名のリネームをします。書庫内に -a で指定したファイル名が存 在した場合、そのファイル名を -b で指定したファイル名にリネームします。1回に 1組しか指定できません。バッチを組んだり、ファイラーから読んだり、マクロを作 ると便利に使えるかも知れません。オリジナルファイルは *.BAK として残ります。 作業前に *.BAK がある場合には、その *.BAK を削除してよいかどうか、確認を取り ます。本オプションを使用した場合には、-i / -R / -v 以外のオプションは全て無 効になります(リネーム処理のみ行ない、タイムスタンプの処理は行ないません)。 -a で指定したファイル名が書庫内に存在しない場合は、リネームは行なわれません が、*.BAK は作成されます(安全のため)。本オプションは稼働実績がまだ乏しいの で、リネームが行なわれなかった場合には、*.BAK を *.LZH に戻した方が安全です。 (リネームが行なわれなかった場合、*.LZH と *.BAK は本来全く同じファイルにな るはずなのですが、バグ等があると同じにならない可能性があるため)

3.2.2) -c (--chcase) オプション

 本オプションを使うと、書庫の中に格納されているファイル名を大文字/小文字に 変換することができます。小文字のファイル名を持つファイルを、小文字の扱えない マシンに持っていって圧縮する場合、圧縮作業終了後にこのツールを使えば、元通り ファイル名を小文字に戻すことができたりします。X680x0 と PowerPC マシンなど、 複数のマシンを持っている場合に、X680x0 用の小文字のファイル群を(ひとまず大 文字に直したあとで)(X680x0 より高速な)PowerPC マシンに持っていって圧縮し、 そのあとでこのツールを使って LZH ファイルの中のファイル名を小文字に直してか ら、X680x0 に持ってきて利用するというような使い方が、考えられます。

-c オプションのあとに指定する数字は、1, 2, 4, 8 の論理和です。(Usage 参照)

    -c0    何も変更されない。
    -c1    ノード(拡張子以外の部分)が大文字になる。拡張子は変更されない。
    -c2    拡張子が大文字になる。ノードは変更されない。
    -c3    ノード+拡張子(要するにファイル名全体)が大文字になる。(1 + 2)
    -c4    ノードと拡張子の最初の1文字だけが大文字になる。
           それ以外の文字は変更されない。
    -c5    -c1 の処理のあとで、-c4 の処理が行なわれる。あまり意味はないかも。
    -c6    -c2 の処理のあとで、-c4 の処理が行なわれる。あまり意味はないかも。
    -c7    -c3 の処理のあとで、-c4 の処理が行なわれる。全く意味がない。
    -c8    これ単体では、何も変更されない。大文字ではなく小文字にするための
           キーコード。この数字と 1, 2, 4 などを足し合せて指定する。
    -c9    ノードが小文字になる。拡張子は変更されない。(8 + 1)
    -c10   拡張子が小文字になる。ノードは変更されない。(8 + 2)
    -c11   ノード+拡張子(要するにファイル名全体)が小文字になる。(8 + 3)
    -c12   ノードと拡張子の最初の1文字だけが小文字になる。(8 + 4)
           それ以外の文字は変更されない。
    -c13   -c9  の処理のあとで、-c12 の処理が行なわれる。あまり意味はないかも。
    -c14   -c10 の処理のあとで、-c12 の処理が行なわれる。あまり意味はないかも。
    -c15   -c11 の処理のあとで、-c12 の処理が行なわれる。全く意味がない。

    -c16 以降は、下位4ビットしか見ていないので、ほとんど意味を持たない。
 かなり分りにくい指定方法ですが、「変更したくないところを強制的に変更されて しまう」ことができるだけ少なくなるように作った仕様のつもりです。したがって、 「先頭だけ大文字であとは小文字(例えば、Lhtouch.Doc)」に統一する場合には、
C:\>LHtouch -c11 foo.lzh       これでファイル名全体が小文字になる。
C:\>LHtouch -c4  foo.lzh       先頭の文字だけ大文字になる。
のように、2回に分けて作業をする必要があります。

なお、ロングオプションの場合には、例えば「--chcase=6」と指定します。

3.2.3) -C (--convert) オプション

 書庫内に `/'(ルートディレクトリ)で始まるディレクトリ名が保存されていると、 ルートディレクトリ以外の場所で LHA x で展開できなかったり、xx.x (for X680x0) で展開できなかったりと、不便なこともあるので、それを(無理矢理)解決するのが、 -C1 オプションです。`/' を `_' に置き換えることによって、ルートディレクトリ 以外の場所でも展開できるようになります。もっとも、ディレクトリ名の最初の文字 が `_' になってしまいますから、あとでディレクトリ名をリネームして下さい。

 また、TwentyOne (for X680x0) を「マルチピリオドOK」や「特殊文字をファイル 名に使用OK」のオプション付きで使用している環境下で作成された LZH ファイルは、 TwentyOne のない環境下(特に X680x0 以外の環境)ではうまく展開できない可能性 があるので、これを回避するのが、-C2, -C4 オプションです。-C2 が特殊文字、-C4 がマルチピリオドです。該当する文字やピリオドがファイル名中にあると、`_' に置 き換えられます。両方指定したい場合には、-C6 になります。さらに / (ルートディ レクトリ)を書き換えたい場合は、-C7 になります。すなわち有効にしたいオプショ ンの数字を足して、指定すればよいわけです。X680x0 用の LHA は内部で一応、 TwentyOne の状態を確認して、`_' へのコンバートを行うようになっているようなの で、X680x0 しか使わないのであれば -C2, -C4 はあまり意味のないオプションかも 知れませんが、作った書庫を別の機種に持っていく場合には、意味があるかも知れま せん。

3.2.4) -d (--except_lhd) オプション

 ディレクトリ書庫(-lhd-)のタイムスタンプをチェックしないようにします。元々 ディレクトリ書庫の入っていないサブディレクトリ付きのアーカイブを一旦展開して から(このときサブディレクトリが新規に作成される)、再度ディレクトリ書庫付き で圧縮すると、先程新規に作成されたサブディレクトリのタイムスタンプが(ディレ クトリ書庫として)アーカイブ中に入ってしまうため、LHtouch を使っても「ディレ クトリ書庫のタイムスタンプが最新」と判定されてしまい、意味のないタイムスタン プが LZH ファイルのタイムスタンプにされてしまいます。同様のことが、サブディ レクトリ付きの ZIP アーカイブを LHA で固め直す時にも生じることがあります。本 オプションをつけると、ディレクトリ書庫のタイムスタンプを比較処理の対象から外 すので、書庫中のディレクトリ以外の最新「ファイル」のタイムスタンプが LZH ファ イルのタイムスタンプになります。

3.2.5) -e (--exam) オプション

 -S オプションで書庫末尾のゴミや Mac LZH のヘッダを削除する際、本オプション を併用すると、ゴミやヘッダのチェックだけ行い実際には削除しなくなります。本オ プションでチェックだけをまず行い、ゴミのついているファイルだけをバックアップ してから本番の処理を行なうなどの使い方が考えられます。

3.2.6) -f (--force) オプション

 本プログラムでは、書庫の拡張子は LZH、自己解凍書庫の拡張子は X/R/EXE/COM を原則としており、これらの拡張子を持たないファイルは(たとえファイル内容が書 庫だとしても)作業を行ないません。作業を強制的に行ないたい場合には -f オプショ ンを指定します。これによって、拡張子に関わらず作業を試みるようになります。そ の際、(拡張子が LZH でないのに)内容が LZH の(ように見える)ファイルを発見 すれば、そのファイルに対して作業を行なうことになります。  しかし、この内容チェックも大雑把なものなので、LZH ファイルによく似たデータ の並びを持つ、関係のないファイル(それも拡張子が LZH でないもの)を破壊した りしないように、このオプションを指定する際には十分注意して下さい。

3.2.7) -h (--help) オプション

 前述のヘルプが表示されます。

3.2.8) -i (--ignore) オプション

 -s オプションによる自己解凍書庫→LZH ファイル変換は、内部で正しい自己解凍 書庫かどうかを簡単にチェックしています。しかし、昔のバージョンの LHA / LHArc や LHA / LHArc 不完全互換のツールなどで作成された自己解凍ファイル等は認識に 失敗する可能性があり、「自己解凍書庫ではない」と言われてしまうことがあります。 この際、-i オプションを併用することにより、チェックを甘くすることができるの で、-s オプションがうまく動作する可能性があります。ただし、「チェックを甘く する」ことは「自己解凍書庫でないファイルに処理を施してしまう」可能性を高くし てしまいますから、関係ないファイルを破壊されてしまう可能性を増やしてしまうこ とになります。本オプションは LZH ファイルのバックアップを取るなどして安全性 を確保してから、覚悟の上で使用して下さい。
 また本プログラムでは書庫の種類として、-lh0-/-lh1-/-lh4-/-lh5-/-lh6-/-lh7-/ -lhd- だけしか動作確認を行なっていないので、その他の -lzs-/-lz4-/-lz5- など はチェックして処理を行なわないようにしているのですが、本オプションを指定する ことで、これらの書庫に対して処理を試みることができます。しかしうまく行くかど うかは別問題ですので、書庫のコピーを取るなどして安全には注意して下さい。

3.2.9) -m (--mkbak) オプション

 後述の -S (--strip) オプションを使用した際に併用すると、末尾にゴミのついた もとの書庫ファイルを *.BAK の形で保存します。ディスクに空きが少ない時に実行 する場合にはディスクフルにならないように注意して下さい。

3.2.10) -n (--no_chtime) オプション

 本プログラムは -t オプションを指定しない限り、必ず書庫内のファイル(最新あ るいは最古)のタイムスタンプに LZH ファイルのタイムスタンプを合せます。これ を抑制するのが、-n オプションです。書庫内のファイル名の変換だけをしたい場合 や、自己解凍書庫から通常の LZH ファイルを作成するだけにしたい場合や、LZH ファ イル末尾のゴミを取りたいだけの場合等に併用して指定して下さい。

3.2.11) -p (--put_trash) オプション

 -S (--strip) オプションと併用することで、LZH ファイル末尾についていること のあるゴミデータを削除せずに別ファイルに書き出すオプションです。本オプション をつけずに -S だけを指定した場合には、ゴミデータはそのまま削除されてしまいま す。LZH ファイル末尾に ish 化した差分データ等をつけてある場合等に、そのデー タがゴミデータとして認識されてしまい、そのままでは削除されてしまうので、-p をつけることで、別ファイルにゴミデータ(実際には ish データなど)を書き出せ ます。ファイル名は test.lzh なら test.000 となります。test.000 というファイ ルが既に存在している場合には、test.001 になります。同様に test.002, test.003 という具合いになります。これらのファイルを作業後に調べて、本当のゴミデータだっ たら、削除してしまえばよいわけです。

3.2.12) -q (--quiet) オプション

「3.2.16) -v (--verbose) オプション」でまとめて説明します。

3.2.13) -r (--reverse) オプション

 本プログラムはデフォルトで書庫内の最新ファイルのタイムスタンプを調査し、書 庫のタイムスタンプをそれに書き換えます。-r オプションを指定すると、書庫内の 最新ファイルではなくて最古ファイルのタイムスタンプで書庫のタイムスタンプを書 き換えます。

3.2.14) -R (--recursive) オプション

 サブディレクトリにあるファイルも検索して、処理の対象にします。

3.2.15) -s (--sfx2lzh) オプション

 -s オプションは自己解凍書庫から通常の LZH を作るためのオプションです。自己 解凍書庫もそのまま残ります。新規に通常の LZH ファイルを生成するので、ディス クの空き容量にはご注意下さい。X680x0 で MSDOS の自己解凍 EXE ファイルから LZH ファイルを作れたり、その逆ができるので結構便利かもしれません。
 ただし、自己解凍書庫を作る時に使用した LHA / LHArc のバージョンによって、 自己解凍用のプログラム部分のサイズ等が異なるため、ものによっては、自己解凍ファ イルであることの認識に失敗したり、通常の LZH ファイルの作成に失敗する可能性 もあります。もし、そのようなことがあった場合には御連絡下さい。
 また、作成された LZH ファイルは自動的に -S オプション相当の処理がなされ、 末尾のゴミが削除されます。また、タイムスタンプの変更なども通常の LZH ファイ ルを処理するのと同様に行われます。タイムスタンプの変更をしたくない場合には、 -n オプションを併用して下さい。

3.2.16) -S (--strip) オプション

 -S オプションは LZH ファイル末尾についていることのあるゴミデータを削除する ためのものです。XMODEM(1024CRC) などで LZH ファイルをダウンロードすると、 1024Bytes 刻みで処理されるため、LZH ファイルの末尾から 1024Bytes 単位になる ところまではゴミデータが入ってしまうことがあります。それを削除できるわけです。 このオプションは最悪の場合(プログラムの誤動作等)、LZH ファイルを途中でちょ ん切ってしまう可能性がありますので、十分に注意して(バックアップを取るなどし てから)お使い下さい。
 また、-S オプションを使うと Macintosh LHA で作成した LZH ファイルの先頭に ついている Macintosh 用のヘッダも同時に削除されます。この場合は、元の MacLHA で作成した書庫は *.MAC に拡張子が変更されて、保存されます。

3.2.17) -t (--touch) オプション

 本オプションを指定すると、書庫内のファイルのタイムスタンプで書庫のタイムス タンプを変更するのではなく、書庫の(現在セットされている)タイムスタンプで書 庫内の全ファイルのタイムスタンプを変更します。これは主にフリーソフトや各種デー タをアップロードする人のために作られたもので、一旦固めてしまった後の書庫内の ファイルを全部同じタイムスタンプで揃えられるので、見た目が綺麗な(?) 書庫をアッ プロードすることができます。
 また、本オプションは引数を指定することで、書庫内ファイルのタイムスタンプを 変更する前に、書庫そのもののタイムスタンプを変更することができます。例えば、 C:\>lhtouch -t199504291200.00 LHTX111X.LZH とすると、最初に LHTX111X.LZH の タイムスタンプが 1995/04/29 12:00:00 に変更され、その後 LHTX111X.LZH の中の ファイルが(書庫のタイムスタンプと同じ)1995/04/29 12:00:00 に変更されます。 タイムスタンプの指定のしかたは [[CC]YY]MMDDhhmm[.ss] となっていて、[] の中は 省略できます。[CC] を省略した場合には、YY が 80 〜 99 までなら 19 、YY が 00 〜 37 までなら 20 が補われます。すなわち、1980 〜 1999 / 2000 〜 2037 となる わけです。[[CC]YY] を省略した場合には、年号は LHtouch を使用している年になり ます。MM は月(01〜12)、DD は日(01〜31)、hh は時(00〜23)、mm は分(00〜59) 、 [.ss] は秒(00〜59) で省略した場合には 00 秒になります。また、秒が奇数の場合 には、1 秒前の偶数秒になります。
 このオプションでは、引数を指定する場合にはオプション文字とスペースを空けて はいけません。-t199504291200.00 とか --touch=199504291200.00 などと指定しま す。

3.2.18) -v (--verbose) オプション

 -v / -q オプションでバーボーズレベルを上げ下げできます。-v で上がり、 -q で下がります。複数指定することもできます。バーボーズレベルとは、作業中にどの 程度詳しく(お節介に?)メッセージを出すかを制御するものです。何もオプション をつけないとバーボーズレベルは 1 で、これがデフォルトとなります。
レベル  オプション  内容
---------------------------------------------------------------------
   0        -q      エラーが出ても何も表示されない。
   1       なし     エラーメッセージだけ表示される。
   2        -v      エラーメッセージと作業内容が表示される。
   3       -vv      エラーメッセージと作業内容が詳しく表示される。
  (4)     (-vvv)    レベル 3 + デバッグ用のメッセージまで表示される。
---------------------------------------------------------------------
 レベル 4 (-vvv オプション) はデバッグ用なので、普段は使う必要はありません。 誤動作する場合等にバグレポートをして戴く際に、動作ログを取るために使います。 -vv までのエラーメッセージ等に納得できない場合には、-vvv を指定してみると何 かわかるかも知れません。

3.2.19) -V (--version) オプション

 本プログラムのバージョン番号や作者名や制作年月日等が表示されます。

3.2.20) その他

 -t を指定した時には、-r は意味を持ちません。-h は大文字小文字を区別してい ないので、どちらで指定しても大丈夫です。インダイレクトファイルは、ファイル名 の頭に「@」をつけて指定します。

 拡張子を省略した場合は LZH もしくは X/R/EXE/COM が補われます。また LHA の 書庫でないファイルの拡張子を LZH にしても、内部で簡単なチェックをしているの で、(多分)問題ないと思います。自己解凍書庫に関しても同様です。ただし、チェッ クはあくまで簡単なものですから、過信は禁物です。関係ないファイルを破壊された りしないように、作業は慎重に行い、大事なファイルを扱う時にはバックアップを取 りましょう。

 また、オプションは -tvR のように続けて指定できます。さらに Usage 中のカッ コ内のようにして、ロングオプションを指定することもできます。例えば、-h の代 わりに --help のように記述できます(ロングオプションを続けて記述することはで きません)。ロングオプションは他のロングオプションと区別がつくところまで指定 すれば正しく機能します。例えば --vers だけで --verbose とは区別できるので、 --version と認識できます。

 ワイルドカードは(シェルが展開してくれる処理系でなければ)csh ライクなもの を内蔵しています。したがって、'*.*' を指定すると、ピリオドのないファイルにマッ チしなくなってしまうので、全てのファイルにマッチさせたい場合には '*' を指定 して下さい。

 LHtouch.HIS もご覧下さい。

3.2.21) 裏ワザ(?)

 -i オプションを逆手に取ると、データの先頭に不特定なサイズのゴミが付着して いるような LZH ファイルに対して、チェックを甘くした上で「自己解凍書庫である」 と LHtouch をダマしてゴミの部分を取り除くことも、場合によっては可能です。こ の場合、LHtouch は拡張子が LZH のファイルを作成しようとするので、前もって拡 張子を X/R/EXE/COM に変更しておいてから実行します。

[例] データの先頭にゴミがついている LZH ファイルを test.lzh とします。

A:\>ren test.lzh test.x       ←自己解凍書庫であるかのように見せ掛ける
A:\>lhtouch -vsi test.x       ←LHtouch をダマして使う
lhtouch: SFX `test.x' から LZH `test.LZH' を生成しました。
A:\>
 これで先頭のゴミを取り除いた test.LZH ができます。ただし、このテクニックは 裏ワザなので必ず成功するとは限りません。注意して行なって下さい。LHA が先頭の ゴミを無視してくれれば展開はできるはずですから、いったん展開してからもう一度 圧縮し直した方が安全であることは言うまでもありません。


4. 対応しているファイル

4.1) 通常書庫

本プログラムで扱うことのできる LZH ファイルの圧縮方法は以下のものだけです。
・-lh5-, -lh4- (LHA で作られるデフォルト)
・-lh6-, -lh7- (最近の LHA でサポートされている)
・-lh1-        (LHArc / LHA(LHArc 互換モード))
・-lh0-        (非圧縮)
・-lhd-        (ディレクトリ情報だけを保存している)
以下の圧縮方法で作られた書庫は動作確認を取っていないので、通常は扱えません。
・-lz4-, -lz5-, -lzs- (LArc などで作られる書庫)
 ただし、-i (--ignore) オプションをつけることで、これらの圧縮方法で作成され た書庫に対しても処理を試みることができます。しかし動作は保証されませんので、 注意して下さい。

また、ヘッダレベルに関しては、

・レベル 0     (LHArc / LHA(LHArc 互換モード))
・レベル 1     (LHA で作られるデフォルト)
・レベル 2     (LHA で -h2 オプションをつけると作られる)
の全てに対応しています。

4.2) 自己解凍書庫

 本プログラムでは以下の LHA で作成された自己解凍書庫のみ動作確認を行なって います。
・LHA for X680x0 Version 2.13 Rel.47

  LHA Version 2.13  ( MS-DOS 版)  Copyright(c)  H.Yoshizaki  (吉崎 栄泰), 1988-94
         Version 2.13  (Human68k版) by 岡田 紀雄(TBE01054@niftyserve.or.jp), 1990-94
==== <<< 高圧縮書庫管理プログラム >>> ============================ 1994-07-09 ========


・MSDOS 用

LHA version 2.54                 Copyright (c) H.Yoshizaki(吉崎栄泰), 1988-92
=== <<< 高圧縮書庫管理プログラム >>> =========================== 1992-10-04 ===

 これ以外のバージョンの LHA や LHArc で作成された自己解凍書庫に関しては、一 応「これで対応できるのではないか?」というルーチンを組み込んであるので、うま くいく可能性もありますが、現時点では 100% の保証はありません。
 上記以外のバージョンの LHA や LHArc で作成された自己解凍書庫に対するレポー トをお待ちしております。
 また、Macintosh LHA で作成された LZH ファイルについても模擬データファイル によるチェックしか行なっておりませんので、うまく Mac ヘッダが削除できるか、 レポートをお待ちしております。

[補足]

 現時点までに、上記以外の自己解凍書庫に対する動作レポートをいくつか戴いてい ます。もちろん、これは 100% を保証するものではありませんが、正しく処理を行な える自己解凍書庫が上記以外のバージョンにも存在はしているようです。


5. このプログラムは無保証です

 本プログラムは正しく機能することを期待して作成されていますが、本プログラム を使用することで、使用者がいかなる損害を受けることがあったとしても、私はいっ さい責任を取れませんので、「覚悟の上で」使用して下さい。本プログラムは「無保 証」です。

 「LZH ファイルのタイムスタンプ合せ」は LZH ファイルを読んでいるだけですし、 もしプログラムにバグがあっても、LZH ファイルのタイムスタンプが狂ってしまうだ けですから、修復はそれほど難しくはないですが、-t オプションによる「書庫内ファ イルのタイムスタンプ合せ」は、 LZH ファイルを強制的に書き換えているわけです から(チェックサムや CRC も強制的に書き換えている)、プログラムにバグあると、 あなたの大事な LZH ファイルが壊れてしまう可能性もあります。
 また、「書庫内ファイル名文字のコンバート」も LZH ファイルを強制的に書き換 えていますから、事故が起こると LZH ファイルが展開できなくなってしまうかも知 れません。
 さらに「末尾のゴミデータ削除」もヘタをするとゴミでないところまで削除されて しまうかも知れません。プログラムにバグが絶対ないという保証はどこにもありませ ん。

 Ver 1.99αでサポートした「書庫内ファイル名のリネーム」はテスト回数がまだ少 ないうえ、ファイル名の長さがリネームによって変ってしまうと、書庫のサイズまで 変わってしまい、書庫のヘッダを最初から作り直しているのと大して変らないことを しているという、危険極まりない機能です。(もっともオリジナルファイルを *.BAK にして残しているので、その意味ではあまり大きな事故にはならないとは思いますが)

 ここまで脅かしてしまうと本プログラムを誰も使ってくれなくなってしまうのでは ないかとさえ思えてしまいますが(苦笑)、バグの全くないプログラムが存在しない 以上、あなたの大事なファイルはあなた自身で守って戴くしかありません。

 したがって、大事な LZH ファイルに対して本プログラムを用いる場合には、前もっ てバックアップを取るなどして、事故に対する対策を十二分に施した上でこれを行っ て下さい。もちろん、「大事でない」LZH ファイルに対しても同様の配慮をすること が望ましいことは言うまでもありません。


6. 著作権について

 このプログラムの著作権は私「ArctanX」こと「田辺 英昭」が所持しており, その 権利を放棄はしていません。なお、このプログラムは'free software'です。PDS (Public Domain Software)でも Freeware でも Shareware でもありませんので、ご 注意下さい。
 尚、本プログラムで使用している GNU getopt の部分は上記の限りではなく、私が 改変した箇所以外については GPL に準拠するものとします。


7. 転載について

 転載の際には、書庫の内容を変更しないようにして下さい。また、転載した場合に は、事後で構わないので転載報告をお願いします。(どこのネットに転載しましたと いう内容だけでも構わないので。まあ、強制はしませんけど。)
 転載した方は、使用者の声(バグレポート、改良等の意見)を可能な限り、私にエ コーバックするようにして下さい。可能な限り、反映させたいと思います。なにかあ りましたら、メール等でご相談下さい。


8. 開発環境

 このツールは以下の開発環境で作成されました。作者の方々に感謝致します(敬称 略)。大変失礼で申し訳ないのですが、私が作者を全員把握していないため、抜けて いる方々もいらっしゃるかと思いますが、お許し下さい。
< X68000-PRO(8MB RAM) + SCSI 100MB + SASI 40MB + 3.5 MO >

   Gcc version 1.28 Tool#2      FSF / まりこ氏
   HAS Ver3.09                  YuNK氏
   HLK Ver3.01                  そると氏
   Gnu Make Ver 3.62(X6_12)     FSF / homy氏
   fish 0.8.1 & HITBOX          板垣史彦氏
   KSH v4.8 (X6_25)             homy氏
   Twentyone Ver 1.36a          Ext氏
   lndrv Ver1.26                沖@沖氏
   μEMACS 3.10 J1.43 (rel.4p5) icam/homy/lika/SALT/PEACE/SHUNA/rima 各氏
   X680x0 libc 1.1.32A          Project LIBC Group
   libgnu.a                     oo氏/Ohtsuki氏
   LHA Version 2.13 Rel.47      ともちゃん氏(岡田 紀雄氏)/吉崎 栄泰氏
   LZX.X Ver. 0.43.4h Beta      F&I氏
   bdif v1.1 rel.7              K.Higashide氏
   bup  v1.1 rel.12             K.Higashide氏
   その他多くのツール           その他多くの作者の方々

< PC-9801 RA2(2MB RAM) + SCSI 200MB >

   Borland C/C++ Version 2.0    Borland International
   MAKE Version 3.6             Borland International
   MicroEmacs 3.10J3
   LHA Version 2.13.00          吉崎 栄泰氏
   その他多くのツール           その他多くの作者の方々

< X68000 / PC-9801 共通>

   wild.c, wild.h               Yasushi Saito氏, TAIST
   setarg.c, setarg.h           Yasushi Saito氏, TAIST
   C Magazine 1991 Jan.         ソフトバンク
また本プログラムのアップロードや開発ツールのダウンロードには、西表山猫氏作の 「TMN Σ(for X680x0)」を使用させて戴いています。


9. 動作確認環境

本プログラムは以下の環境下で動作を確認しました。
・X680x0 版

  X68000 PRO(8MB RAM:無改造) + Human68k Ver 3.01

・MSDOS 版

  PC-9801 RA2(2MB RAM) + MSDOS Ver 3.30D
 MSDOS 版に関しては、98 シリーズやその互換機以外の MSDOS マシンでは動作確認 していませんので、もしかすると動作しない MSDOS マシンもあるかも知れません。


10. 謝辞

 本プログラムの開発に関しては、下記に示す私が所属しているネットワークの皆様 方、x6chat Mailing List の方々、その他大勢の方々にも大変お世話になっておりま す。ここに感謝の意を表します。


以上、LHtouch.X/EXE プログラム作成、およびドキュメント作成
        ALTA Net           ALTA1565
        Bug-House BBS      BUG0064                   \    \/
        Cecile BBS         CEL0322    Arctan /  \UTMC
        Inside BBS         INSD0053                 ̄ ̄   ̄ ̄
        Palmtown Network   PALM0466   田辺 英昭 (Hideaki TANABE)
        Mapletown Network  MAP2492
        Network-SCoT       SCOT0032
        Nifty Serve        KFA05024@niftyserve.or.jp

★LHtouchのページに戻る


arctanx@hauN.org