lnd.cmd - version 0.32 Copyright (c) 1999, Altair☆ All rights reserved. ○ 概要 TVFS (Toront Virtual File System)の仮想ディレクトリに、任意のファイル をDOSセッションやWin-OS/2でも利用できるようにリンクするREXXスクリプトで、 ・仮想ディリクトリ上にリンクされたファイルの名前は、DOS 8.3形式に 変換されます。 ・元のファイル名がDOS 8.3形式として妥当な場合には、余分な変換は施 しません。 ・DOSセッションでも、DOS 8.3形式に変換される前のロングネームを確認 できます。 ・TVRX.DLLを呼び出しているので、処理が高速です。 などの特長を持っています。 類似のプログラムとして、hobbesにsfnというREXXスクリプトが公開されてい ますが、 ・例えば、“a.out”が“a_______.out”に、“foo.c”が“foo_____.c__” に化けてしまう。 ・ディレクトリ単位で再起的にリンクを張ろうとするために、リンクした くないファイルまでリンクされてしまう。 ・“.cshrc”のように、ファイル名が‘.’で始まっているファイルをリ ンクしようとすると異常終了する。 などの不満があり、新たに書き起こしたのが、lnd.cmdです。 もちろん、使い方によっては、lnd.cmdにも不満が出ることでしょう。しかし、 1画面におさまることを目標に作った短いスクリプトですので、気に入らない点 があったら、気軽に手を入れることもできるでしょう。 もし、何か良い改善ができたら、作者までフィードバックしていただけると幸 いです。m(_ _)m ○ 前提ソフトウェア 当然のことながら、TVFS (Toront Virtual File System)が必要です。 ○ 使い方 lnd ファイルのならび… TVFS仮想ディレクトリ ファイルのならびには、ワイルドカードも使用できます。 例えば、TVFS仮想ディレクトリ X:/tmpに、カレント・ディレクトリの*.cと *.h、doc/ディレクトリのREADME.htmlをリンクするには、 lnd *.c *.h doc/README.html X:/tmp と入力します。 TVFS仮想ディレクトリにリンクされたファイルの名前が、元の名前から変更さ れる場合、そのファイルに .LONGNAME拡張属性が設定されていなければ、lnd.cmd は、元の名前を.LONGNAME拡張属性を設定します。 これにより、DOSセッションでも、 DIR /R で、元の名前を見ることができます。 ○ アルゴリズムの説明 DOS 8.3形式にファイル名を変換するアルゴリズムを簡単に説明しておきます。 ・OS/2 HPFSで許容されているが、DOS FAT形式で許容されていない文字を ‘!’に置換します。 ・空白文字はDOS 8.3形式でも妥当ですが、多くのDOSアプリがそれをハン ドルできないので、‘_’に置換します。 ・ファイル名に複数の‘.’がある場合、最後の‘.’以降を拡張子とみな し、それ以外の‘.’を‘_’に置換します。 ・ファイル名に‘.’がひとつしかなく、それが先頭の場合には‘_’に置 換します。 ・以上の処理は、lnd.cmdのループの中の、translate関数と、その次のif 文で行っています。 tvlinkの呼び出しの際は、TVRX.DLLがサポートするTvLink関数を、まず呼び出 しており、tvlink.exeを呼び出すよりも高速な処理が期待できます。しかし、こ の関数は、元のファイル名に空白文字が含まれている場合、うまく働かないこと があるので、関数呼び出しでエラーがあった場合には、TVRX.DLLを使う代わりに、 tvlink.exeを呼び出して再試行しています。 もし、自動的に、.LONGNAME拡張属性を設定するのが嫌な場合には、lnd.cmdか ら以下の部分を削除するか、付いてしまった .LONGNAME拡張属性を削除する同梱 のREXXスクリプトredlong.cmdを利用してください。 | if t<>s then do; p=SysGetEA(s.j,e,'x') | if\(p=0&length(x)>4)then | call SysPutEA s.j,e,'FDFF'x||d2c(z)'0'x||s | end ○ 制約事項 ・TVFS仮想デイレクトリは、mkdirコマンドなどで、あらかじめ用意して おいてください。 ・リンクに失敗した場合のエラー・メッセージを除いて、極めて寡黙なプ ログラムです。(当初は、sfnのように、にぎやかにメッセージを表示し ていたのですが、そうすると、メッセージのスクロールにまぎれて、エ ラーが見えなくなってしまうので、ヤメました)。 ・DBCSを使ったファイル名には配慮していません。プログラムが煩雑にな り見通しが悪くなるのがイヤだったので…というのは言い訳で、単に面 倒くさかっただけです。(^^; ・リンク先の仮想ディレクトリに既に同じ名前でファイルがリンクされて いるかどうかはチェックしていません。チェックをしたら、かえって使 いにくかったものですから…。(← これは言い訳ではなく、ホントの話)。 ・lnd.cmd自身を含め、他のTVRX.DLLを呼び出すプログラムとは同時に利 用できません。 ○ その他 lnd.cmdならびに、redlong.cmdの最新版は、このドキュメント末尾のURIで識 別されるwebサイトにあります。 このプログラムは、Altair☆が自分で使うことを前提に作成したものであり、 Altair☆以外の誰かが、このプログラムの使用により何らかの損害を被ったとし ても、Altair☆は一切の責任を負いません。 転載・再配布条件は、GPL version 2に従います。GPLの詳細は、添付のCOPYING を参照してください。 Altair☆ (NBG01720@nifty.ne.jp) http://www.vector.co.jp/authors/VA000199/