X680x0版/MSDOS版 共通ドキュメント
Copyright (C) 1993,94,95 田辺 英昭 (Hideaki `ArctanX' TANABE)
LHA は書庫作成時には、オプション指定により、書庫内の最新のファイルに書庫の タイムスタンプを合せることができますが、既に存在している書庫のタイムスタンプ を書庫内の最新のファイルに合せるのは、少しばかり手間がかかります(*1)。その手 間を省くためのツールがこれです。オプション指定により、書庫内の最古のファイル にタイムスタンプを合せることもできます。
uudecode や XMODEM でファイルをやりとりすると、オリジナルアーカイブのタイ ムスタンプが失われてしまうので、これらを使っている人には必携のツールです。
本プログラムは以上のようなコンセプト(?)で作られた、拙作 LHtime.x のアップ グレード版で、逆に書庫内のファイル全てのタイムスタンプを LZH ファイルのタイ ムスタンプで統一することもできます。こちらは、どちらかというと書庫を作ってパ ソコン通信等にアップロードする方のための機能かもしれません。(書庫内のファイ ルのタイムスタンプが揃っていると綺麗ですし)
Ver 1.02 以降では、書庫内に保存されているファイル名の大文字/小文字を変更 できたり、マルチピリオドのファイル名が保存されている書庫をマルチピリオドのサ ポートされていない処理系で展開するための機能がついたり、自己解凍書庫を普通の LZH ファイルに戻せたり、LZH ファイル末尾についているゴミデータを削除できたり、 書庫内のファイル名をリネームできたり、様々な機能がつきました。
このような「タイムスタンプ合せ」を軸とした諸機能が「書庫を展開しないで」実 行できることが、本プログラムの特徴です。
(*1)LHtime.x 開発当時は手間がかかったのです(今は LHA 単体でもできますが多く のファイルを相手にしようとすると、やはり大変です)。
また、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 を無理して作る必要はありません。
[例]
COMMAND.X / COM の場合 : set LHTOUCH=-v -S -i fish.x の場合(X680x0) : setenv LHTOUCH '-v -S -i'
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 のように続けて指定することもできます。
-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」と指定します。
また、TwentyOne (for X680x0) を「マルチピリオドOK」や「特殊文字をファイル 名に使用OK」のオプション付きで使用している環境下で作成された LZH ファイルは、 TwentyOne のない環境下(特に X680x0 以外の環境)ではうまく展開できない可能性 があるので、これを回避するのが、-C2, -C4 オプションです。-C2 が特殊文字、-C4 がマルチピリオドです。該当する文字やピリオドがファイル名中にあると、`_' に置 き換えられます。両方指定したい場合には、-C6 になります。さらに / (ルートディ レクトリ)を書き換えたい場合は、-C7 になります。すなわち有効にしたいオプショ ンの数字を足して、指定すればよいわけです。X680x0 用の LHA は内部で一応、 TwentyOne の状態を確認して、`_' へのコンバートを行うようになっているようなの で、X680x0 しか使わないのであれば -C2, -C4 はあまり意味のないオプションかも 知れませんが、作った書庫を別の機種に持っていく場合には、意味があるかも知れま せん。
レベル オプション 内容 --------------------------------------------------------------------- 0 -q エラーが出ても何も表示されない。 1 なし エラーメッセージだけ表示される。 2 -v エラーメッセージと作業内容が表示される。 3 -vv エラーメッセージと作業内容が詳しく表示される。 (4) (-vvv) レベル 3 + デバッグ用のメッセージまで表示される。 ---------------------------------------------------------------------レベル 4 (-vvv オプション) はデバッグ用なので、普段は使う必要はありません。 誤動作する場合等にバグレポートをして戴く際に、動作ログを取るために使います。 -vv までのエラーメッセージ等に納得できない場合には、-vvv を指定してみると何 かわかるかも知れません。
拡張子を省略した場合は LZH もしくは X/R/EXE/COM が補われます。また LHA の 書庫でないファイルの拡張子を LZH にしても、内部で簡単なチェックをしているの で、(多分)問題ないと思います。自己解凍書庫に関しても同様です。ただし、チェッ クはあくまで簡単なものですから、過信は禁物です。関係ないファイルを破壊された りしないように、作業は慎重に行い、大事なファイルを扱う時にはバックアップを取 りましょう。
また、オプションは -tvR のように続けて指定できます。さらに Usage 中のカッ コ内のようにして、ロングオプションを指定することもできます。例えば、-h の代 わりに --help のように記述できます(ロングオプションを続けて記述することはで きません)。ロングオプションは他のロングオプションと区別がつくところまで指定 すれば正しく機能します。例えば --vers だけで --verbose とは区別できるので、 --version と認識できます。
ワイルドカードは(シェルが展開してくれる処理系でなければ)csh ライクなもの を内蔵しています。したがって、'*.*' を指定すると、ピリオドのないファイルにマッ チしなくなってしまうので、全てのファイルにマッチさせたい場合には '*' を指定 して下さい。
LHtouch.HIS もご覧下さい。
[例] データの先頭にゴミがついている 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 が先頭の ゴミを無視してくれれば展開はできるはずですから、いったん展開してからもう一度 圧縮し直した方が安全であることは言うまでもありません。
・-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 オプションをつけると作られる)の全てに対応しています。
・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% の保証はありません。
[補足]
現時点までに、上記以外の自己解凍書庫に対する動作レポートをいくつか戴いてい ます。もちろん、これは 100% を保証するものではありませんが、正しく処理を行な える自己解凍書庫が上記以外のバージョンにも存在はしているようです。
「LZH ファイルのタイムスタンプ合せ」は LZH ファイルを読んでいるだけですし、
もしプログラムにバグがあっても、LZH ファイルのタイムスタンプが狂ってしまうだ
けですから、修復はそれほど難しくはないですが、-t オプションによる「書庫内ファ
イルのタイムスタンプ合せ」は、 LZH ファイルを強制的に書き換えているわけです
から(チェックサムや CRC も強制的に書き換えている)、プログラムにバグあると、
あなたの大事な LZH ファイルが壊れてしまう可能性もあります。
また、「書庫内ファイル名文字のコンバート」も LZH ファイルを強制的に書き換
えていますから、事故が起こると LZH ファイルが展開できなくなってしまうかも知
れません。
さらに「末尾のゴミデータ削除」もヘタをするとゴミでないところまで削除されて
しまうかも知れません。プログラムにバグが絶対ないという保証はどこにもありませ
ん。
Ver 1.99αでサポートした「書庫内ファイル名のリネーム」はテスト回数がまだ少 ないうえ、ファイル名の長さがリネームによって変ってしまうと、書庫のサイズまで 変わってしまい、書庫のヘッダを最初から作り直しているのと大して変らないことを しているという、危険極まりない機能です。(もっともオリジナルファイルを *.BAK にして残しているので、その意味ではあまり大きな事故にはならないとは思いますが)
ここまで脅かしてしまうと本プログラムを誰も使ってくれなくなってしまうのでは ないかとさえ思えてしまいますが(苦笑)、バグの全くないプログラムが存在しない 以上、あなたの大事なファイルはあなた自身で守って戴くしかありません。
したがって、大事な LZH ファイルに対して本プログラムを用いる場合には、前もっ てバックアップを取るなどして、事故に対する対策を十二分に施した上でこれを行っ て下さい。もちろん、「大事でない」LZH ファイルに対しても同様の配慮をすること が望ましいことは言うまでもありません。
< 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)」を使用させて戴いています。
・X680x0 版 X68000 PRO(8MB RAM:無改造) + Human68k Ver 3.01 ・MSDOS 版 PC-9801 RA2(2MB RAM) + MSDOS Ver 3.30DMSDOS 版に関しては、98 シリーズやその互換機以外の MSDOS マシンでは動作確認 していませんので、もしかすると動作しない MSDOS マシンもあるかも知れません。
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