acd - version 2.22 取扱い説明書 Copyright (c) 1991-2000 by Altair☆ (NBG01720@nifty.ne.jp) ○ ACDとは… 深く入れ子になったディレクトリ間の移動と言うのは、とてもメンドくさいの ですが、それを少しでも簡単にしようとするフリーウェアです。 例えば、C:/WINDOWS/SYSTEMというディレクトリから、コマンドラインで、遠 く離れたディレクトリC:/BBS/LOG/NIFTY/FPCU/FPCUPROに移るには、特別なシェ ルプログラムなどを利用しない限り、普通は『cd \bbs\log\nifty\fpcu\fpcupro』 と、長ったらしいコマンドをミスタイプなく入力しなければなりません。 いまや、PCの世界もWindowsやOS/2 WARP、XFree86などのGUI環境が普及してい ますが、コマンドラインには、GUIのそれとはまた別の魅力があります。このプ ログラム acd - Altair☆'s Change Directoryは、いまでもコマンドライン環境 を愛する人のために作成した、ディレクトリ・チェンジの面倒くささを解決する ものです。 例えば『acd pro』とタイプインするだけで、 C:\OS2\MDOS\WINJOS2\SYSTEM>acd pro C:\BBS\LOG\NIFTY\FPCUM\FPCUPRO> ~~~ と、簡単にディレクトリの移動ができます。 あらかじめディレクトリ・データベースを用意しておくことにより、ディレク トリの検索と移動を高速に行えるようにしています。ディレクトリ・データベー スに反映されていない新たに作成されたディレクトリへの移動も後述の-nオプショ ンを使うか、ディレクトリ・データベースを再構築し直すことにより対応できま す。 _________________________________________________________________ ○ 動作環境 ・DOS版 * IBM PC/AT互換機 * DOS 3.0以降、または、OS/2 2.0以降のMVDM、または、Windows 9x * ANSI.SYS、または、それに相当するものがインストールされていること * (日本語以外のDBCS環境には配慮していません。また、SBCS環境では、 US-ASCII以外の文字集合を使用したディレクトリ名の検索はできませ ん)。 ・OS/2 WARP版 * IBM PC/AT互換機 * OS/2 WARP 3.0以降 * REXX、または、nyaos (version 1.62++以降) + REXXは、たいていの場合、OS/2 WARPのディフォルトで導入さ れます。Object REXXをお使いの場合は、SWITCHRXコマンドで クラシックREXXに切り換える必要があります。 + nyaosを使用する場合には、REXXスクリプトの代わりに、nyaos のコマンド・エイリアス機能を使用します。 * EMX 0.9d FIX 03以降のランタイム・ライブラリが導入されていること * (SBCS環境では、US-ASCII以外の文字集合を使用したディレクトリ名の 検索はできません。日本語以外のDBCS環境での動作確認はしていませ んが、大丈夫なように作ったつもりです)。 * コマンド・ラインからのみの利用の場合には、必要ありませんが、OS/2 プレゼンテーション・マネージャ用のフロント・エンドも用意していま すので、お試しください。 ⇒ http://www.vector.co.jp/authors/VA000199/os2/pmacd/ _________________________________________________________________ ○ 配布ファイル acd.exe DOS版 OS/2 WARPのMVDM環境(DOSセッション)から、呼び出さ れる場合、acd.exeは、必要に応じて子プロセスとし てOS/2 WARP版のacdb2.exeを呼び出すことがあります。 MVDM環境からしかacdを利用しない場合でも、OS/2 WARP版もインストールしておかなければなりません。 acdb2 .exe OS/2版 acdb2.exeは、acd.cmdやMVDM環境のacd.exeから呼び acd.cmd 〃 出されるササブプログラムです。 scrsize.exe 〃 XFree86/OS2環境で起動された場合に、ウィンドウ・ サイズを調べるために呼び出されるプログラム。XFree 86を使用しないなら不要。私がコンパイルして配布し ているlessや、jless、w3mに添付しているscrsize. exeと全く同じものです。 README 共通 取扱い説明書。(このテキスト・ファイル)。 COPYING 〃 配布条件。(GPL 2.0) DOS専用に配布するアーカイブには、acdb2.exeは含んでいません。OS/2 WARP 用に配布するアーカイブには、MVDM環境でも使用して頂くために、DOS版も含め て全てのファイルが収めてあります。 なお、上記以外にsrc/ディレクトリに、ソース・コードを添付してあります。 DOS用アーカイブには、OS/2版に固有のモジュールのソース・コードは付けてい ません。 _________________________________________________________________ ○ 準備 ・OS/2 WARP版 1. 前提環境を確認し、必要なら環境を整備(emxランタイムのインストール など)してください。 2. Ver 2.10よりも前のバージョンのacdbやacdがインストールされていた なら、それを削除してください。同じディレクトリにあるdirtree.acd も削除して構いません。 3. PARHの通ったディレクトリに、acdb2.exeとacd.cmdを置いてください。 但し、そのディレクトリに対してMVDM環境(DOSセッション)のPATHが通っ ていてはいけません。 4. ふだん良く使う書き込み可能なドライブに対して、 acd -sドライブ を実行しておきます。 + 例) ふだん良く使うドライブがD:とC:とF:の場合、 acd -sdcf + ディレクトリデータベースは、dirtree.acdと言う名前で、各 ドライブのルートディレクトリ上に作られます。(ネットワー クドライブを使用している場合には、ルートディレクトリに対 する書き込み権限が必要です)。 + HPFSフォーマットされたドライブ上の、今回配布のversion 2.14以前のacdが作成した/DirTree.acdは正しく作成できてい ない可能性があります。HPFSフォーマットのドライブ上に古い バージョンのacdで作成した既にディレクトリ・データベース /DirTree.acdファイルがある場合、今回配布の版で、acd -sを 実行し、それを作り直すことをお薦めします。 5. nyaos環境下で使用したい場合には、 alias acd acdb2 -ycd alias apushd acdb2 -ypushd という行を、.nyaos (または、_nyaos、nyaos.rc)に追加してください。 ・DOS版 1. OS/2 WARP 3.0以降のMVDM環境で利用する場合には、OS/2 WARP版のイン ストールを先に済ませておいてください。 2. 前提環境を確認し、必要なら環境を整備(例えばconfig.sysにansi.sys を組み込むなど)してください。 3. Ver 2.10よりも前のバージョンのacdbやacdがインストールされていた なら、それを削除してください。同じディレクトリにあるdirtree.acd も削除して構いません。 4. PARHの通ったディレクトリに、acd.exeを置いてください。(OS/2 WARP 版も利用したい場合には、acd.exeを置いたディレクトリがOS/2ネイティ ブ、すなわちconfig.sysで設定されてるPATHからは見えないように注意 してください)。 5. ふだん良く使う書き込み可能なドライブに対して、 acd -sドライブ を実行してディレクトリデータベースを作成しておきます。 + ディレクトリデータベースは、dirtree.acdと言う名前で、各 ドライブのルートディレクトリ上に作られます。(ネットワー クドライブを使用している場合には、ルートディレクトリに書 き込み権限が必要です)。 + ディレクトリデータベースは、OS/2 WARP版と共用しますので、 もしOS/2 WARP版をインストールし、この作業を済ませてある なら、ここで改めてacd -sを実行する必要はありません。 + 例) ふだん良く使うドライブがD:とC:とF:の場合、 acd -sdcf + ディレクトリデータベースは、2.00よりも前のバージョンのacd とは互換性がありません。 _________________________________________________________________ ○ 使い方 acd [-s[drive_letters...]] [drive:]search_string acd -n [[drive:]search_string] * ディレクトリの文字列の一部を指定すれば、そのディレクトリに移動し ます。 * もし、ドライブが異なっている場合は、カレントドライブも移動します。 * 大文字と小文字は同一視します。 * 移動先候補は、各ドライブのルートにあらかじめ作成しておいたディレ クトリデータベース/dirtree.acdの中から探し出します。 -n * -nオプションを指定すると、あらかじめ作成しておいた/dirtree.acdは 見ずに、その時点で、カレント・ディレクトリの配下のサブディレクト リを検索します。ルートに書き込み権限の無いネットワーク・ドライブ やCD-ROM、頻繁にサブディレクトリの作成と削除を繰り返している環境 では、この-n指定が便利だろうと思います。 -s * mkdirやrmdirにより、dirtree.acdと実際のディレクトリ構造が変わっ てしまった場合には、-sオプションを使い/dirtree.acdを作り直してく ださい。 + 詳しくは、準備の項を参照してください。 + 臨時に作成したディレクトリに対しては、-sで/dirtree.acdを 作成し直すよりも、前述の-n指定の方が快適な場合もあります。 + -sオプションに指定するドライブは、作り直したい、あるいは 新たにディレクトリデータベースを作成したいドライブだけを 指定で構いません。 * 移動したいディレクトリ名の一部と-sオプションを同時に指定すれば、 まずディレクトリ・データベースを作成し、それが終り次第、通常の検 索処理に移ります。 ・複数候補の選択 * 指定された文字列を含むディレクトリが、複数あった場合は、移動先候 補のリストを表示します。 * ディレクトリ名の直前に表示されている16進数をキーボードから入力す ると、そのディレクトリに移動します。 * 移動先候補のリストが表示されている時に、Esc、または、Qキー、Ctrl- Cのいずれかを押すとディレクトリを移動せずに、acdを終了します。 * 上のふたつの条件に当てはまらないキーが押された場合には、最初に表 示されているディレクトリに移動します。 * 候補となるディレクトリの数が16を超える場合、acdは、カレントディ レクトリに近いものや、ディレクトリの浅いところを選び出し、最大16 個のディレクトリのみを候補としてリストアップします。 * もし移動したいディレクトリが候補として上がらなかった場合には、ディ レクトリの部分文字列指定を変えて再試行してみてください。 ・ロング・ファイルネームについての補足 * DOSの8.3文字形式の制約を超えたロング・ファイルネームもサポートし ています。 + OS/2版の場合、HPFSのロング・ファイルネームはサポートしま すが、.LONGNAME拡張属性の設定内容との部分一致はチェック しません。また、DOS版をOS/2のMVDM環境で使用する場合には、 ロング・ファイル名はサポートしません。 + DOS版は、Windows 9x環境で呼び出した場合にのみのサポート で、部分文字列の一致は、ロング・ファイルネームの部分一致 が最初にチェックされ、それが候補とならない場合、8.3形式 の短い名前が部分的に一致するかどうかをチェックします。 実行例 1 - ロング・ファイル名で一致した候補一覧) C:\WINDOWS>acd int 0: C:/INTERRUP 1: C:/Program Files/Internet Explorer 2: C:/WINDOWS/Temporary Internet Files 3: C:/WINDOWS/Application Data/Microsoft/Internet Explorer 4: C:/WINDOWS/Favorites/Microsoft Internet Explorer 5: C:/WINDOWS/spool/PRINTERS Select => 実行例 2 - 8.3形式の短い名前で一致した候補一覧) C:\WINDOWS>acd ~2 0: C:/WINDOWS/APPLIC~1/MICROS~2 1: C:/PROGRA~1/UNINST~1/IE40~2.BRO 2: C:/PROGRA~1/UNINST~1/IE40~2.SHE 3: C:/WINDOWS/HISTORY/HISTORY.IE5/MSHIST~2 Select => * DOS版のacdは、Windows 9xのDOSプロンプトで呼び出された場合にのみ、 検索対象となる部分文字列に、ロングファイルネームのそれを指定でき ます。ディレクトリ・データ・ベースは、その時点のツリーが反映され ているなら、DOSやOS/2のMVDMなど、Windows 9xのロングファイル名を サポートしていない環境で作成されたものでも構いません。(FATのディ レクトリ・データベースはロングファイルネームが設定されているか否 かに拘らず、内部的には8.3形式で表現しています)。 * Windows 9xをDOSモードでブートした環境では、ロングネームはサポー トされません。 ・移動先ドライブ * 移動したいディレクトリ名の部分文字列に先行して、ドライブ名を指定 すると、指定されたドライブだけから候補を選びます。 例) 文字列fooを含むディレクトリをドライブC:上に探す acd c:foo 例) 文字列barを含むディレクトリをドライブC:とD:、F:に探す acd cdf:bar * ドライブ名の明示が無かった場合には、カレント・ドライブと、もし設 定されていれば環境変数ACDBのドライブを対象として移動先候補を探し ます。(-n指定が無い場合のみ) 例) ディフォルトのacd検索対象とドライブをC:とD:に設定 set ACDB=CD 環境変数ACDBには、頻繁に利用するドライブ順に並べましょう。 もし、ドライブD:を多用し、次がC:なら、 set ACDB=DC と設定することをお薦めします。環境変数ACDBの値は、小文字 で指定しても構いません。 ・注意 * 高速にディレクトリを探すために、acdは、ルートディレクトリに予め 作成しておいたディレクトリデータベースdirtree.acdを基準に処理を 行います。 * 例えば『acd .』や『acd ..』を指定した場合、それはカレント・ディ レクトリや親ディレクトリへの移動だけでなく、その名称に文字列『.』 や連続した『..』を含むディレクトリへの移動をも意味します。 * MKDIR(MD)やRMDIR(RD)コマンドなどにより、新たなディレクトリを作っ たり、ディレクトリを削除した場合は、acd -sにより、それをディレク トリデータベースファイルに反映しておかないと正しく動作しないこと があります。 * -sオプションによるディレクトリ・データベースの作成は、対象となる ドライブ上に日本語のファイル名やディレクトリ名がある場合、日本語 環境で行ってください。英語環境で行うとOSのシステムコールが正しく 働かず、無限ループに陥ることがあります。 _________________________________________________________________ ○Tips'n Tricks ・Trick #1 『acd sou』と入力して、ディレクトリを探したら、例えば、 * C:/Altair/maruj/source * C:/Altair/acd/source * C:/work/source の3つが見つかってしまった。できれば、一発で、C:/Altair/acd/sourceに移り たい。 このような場合、例えば『acd d/sou』と入力すれば、『C:/Altair/acd/source』 に移ります。 ・Trick #2 『acd ra』と入力して、『C:/ramtest』に移ろうとしたら『C:/tc/library』も 見つかってしまった。 その様な時は、ためらわず、そのまま『0』キー(スペースバーやEnterキーで も構いません)を押してください。この2つが見つかった場合、ACDは、C:/ramtest の方をdefaultの移動先とします。 どうしても、ディレクトリ名の先頭だけを検索対象としたい時には『/』を明 示して『acd /ra』と入力してください。ディレクトリ名の途中に『ra』を含ん でいても直前に『/』が無いので、それは不一致となり候補から外れます。 ・Trick #3 移動先候補のドライブがわかっている場合には、そのドライブレターを明示す ることで、他のドライブから候補を挙げないようにできます。 ・Trick #4 ディレクトリを実際に走査して、その中から候補を探したい場合、例えば、C: ドライブのfooディレクトリを探したい場合には『acd -n c:foo』と指定するこ とができます。この場合、/dirtree.acdは更新されません。 /dirtree.acdを更新したいなら、『acd -sc c:foo』としてください。 移動先ディレクトリの部分文字列と『-s』オプションを同時に指定すると、ま ず、ディレクトリを実際に走査しdirtree.acdを再構築した後、移動先候補をリ ストアップします。 _________________________________________________________________ ○ 更新履歴 ・Ver 2.22 (DOS版のみ) * Ver 2.21での修正で、古いscan.cを使ったため、データベースのI/Oエ ラーが異常終了できなくなっていました。Ver 2.20のscan.cの論理を修 正し利用。 * 起動時に Windows 9x環境か否かを調べ、Windows 9x環境の時にのみ、 FATロングネームのチェックを行うように変更。 * このドキュメントに、“ディレクトリ・データベースの構造”を加筆。 ・Ver 2.21 (DOS版のみ) * Ver 2.20への修正の際、DOS版のOS/2のMVDM環境で動いているか否かの if文の論理を逆にしてしまったため、-sオプションが正しく機能しませ んでした。ソース・コードの scan.cを Ver 2.14〜2.16のレベルに戻す ことで臨時に対処。 ・Ver 2.20 * Windowsロングファイルネームにも対応 (DOS版をWindows 9x環境で実行 する場合のみ)。 + ロングファイルネームの取得には、l2v (2000年12月20日現在 未公開)から、getlong.asmモジュールを使用。 * ディレクトリ・データベースdirtree.acdが存在しないドライブからacd を実行した時、環境変数ACDBの指定が無視されてしまうバグを修正。 * 環境変数TERMに設定されている値ではなく、環境変数WINDOWIDが定義さ れているか否かで、XFree86環境かどうかを判定。(OS/2版のみ) * 環境変数WINDOWIDが定義されている時、scrsize.exeを呼び出し、ウィ ンドウ幅を求めるよう仕様変更。(OS/2版のみ) + scrsize.exeは、私がOS/2用にコンパイルして公開しているless、 または、jless (novio 7版以降)や、w3mのバイナリ・パッケー ジに添付しているものと同一です)。 * DOS版のOS/2のMVDM環境で動いているか否かの判別方法を変更。(この変 更にはバグがあったため、次のVer 2.21で元のアルゴリズムに戻しまし た)。 * 更新履歴を、このドキュメントの前半から後半に移動。 ・Ver 2.16 * Ver 2.14をベースにソース・コードを修正。 * いくつかの関数をインライン化。 * オプションの解釈方法を改良。 * -V や -h で表示されるメッセージにGPL2に関する記述を追加。 * (OS/2 WARP版のみ) nyaos Ver.1.62++ (2000/08/20版スナップショット) 以降に対応。実現方法が、Ver 2.15とは違うので、それを使っておられ た場合には、後述の「5. nyaos環境下で使用したい場合には」の項を、 再度、読み直し、あなたの環境設定を適切に修正のこと。 ・Ver 2.15 (OS/2 WARP版のみ) * コンパイル・オプションを変えたことにより、実行プログラムのサイズ を約1/5に縮小。 * この版には、apushd.cmd、apushd.batを添付しません。もし、使いたい 場合には、私が配布しているDirStack 2.00以降に添付しているものを 利用のこと。 * nyaosに実験的に対応。(ただし、これは Ver 2.16以降とは異な手法を 採っており、現在はその手法は用いていません)。 ・Ver 2.14 * HPFSフォーマットのドライブ上のDirTree.acdの内容が正しく作成され ず、一部のディレクトリをDOS環境から検索できないバグを修正。 * ソース・レベルでいくつかの関数のプロトタイプ宣言をし忘れていたり、 必要なincludeをし忘れていたのを修正。 ・Ver 2.13 (OS/2 WARP版のみ) * 別途配布の拙作pmacd対応 … acd単体での使用に於ける機能は、Ver 2.12から変更なし。 * DOS版アーカイブとOS/2 WARP版アーカイブを分離。OS/2 WARP版アーカ イブにはDOS版も含んでいます。 * 配布条件をGPLに変更。詳しくはCOPYINGを参照のこと。 ・Ver 2.12 (OS/2 WARP版のみ) * DBCS環境か否かの判断方法を変更。 ・Ver 2.11 * A〜Fの候補を選択した時のエコーバックが10進で表示されてしまうバグ を修正。 ・Ver 2.10 * XFree86のxterm環境で使用するとgetchでハングする問題の対策。 * 旧acdの機能を統合(-n)し、名称をacdbからacdに戻した。 * "/"、"."、".."が指示された場合、それらを候補とするように仕様変更。 * ディレクトリ区切りとして『/』の他に『\』も使えるように仕様変更。 * apushd.cmd、apushd.batを追加。 * チェンジ・ディレクトリに失敗した時のメッセージを修正。 * 複数ドライブを明示すると2番目以降のドライブで検索ターゲットのポ インタが狂うバグを修正。 * acd.cmdからの呼び出しに制御文字使用をやめた。 * Ver 2.02の修正の際、ESCキーによる中断ができなくなっていたバグを 修正。 ・Ver 2.03 * XFree86環境での表示色の調整(暫定処置)。 * チェンジ・ディレクトリに失敗した時のメッセージが不適切だったのを 修正。 * 英語モードで日本語のディレクトリ名を候補から除外。 ・Ver 2.02 * XFree86のxterm環境で使用するとgetchでハングする問題の暫定対策。 * ドライブ名が明示されていない場合、環境変数ACDBにその指定が無くて もカレント・ドライブを最優先で検索するように仕様を変更。 * OS/2 WARP版に於て、他のプロセスからKillProcessシグナルにより強制 終了させられた場合に、REXXプロシージャで文法エラーとなるのを修正。 * バージョン番号を確認し易いように、ヘルプ・メッセージの中にそれを 表示するようにした。 * ディレクトリ・データベースを使用しないACDをアーカイブに同梱 * HTML版の取扱い説明書を廃止。 ・Ver 2.01 * 先頭がSで始まるディレクトリを探し出そうとすると誤動作することが ある問題を修正。 ・Ver 2.00 * 全面改訂。特に大きな変更は + ディレクトリ・データベース構造の変更。 + リムーバブル・メディアにも対応 (ドライブ毎に独立したディ レクトリ・データベースを用意するようにした)。 + カラー・カスタマイズの廃止。 + ディレクトリ区切りの内部表現を『\』から『/』に変更。 _________________________________________________________________ ○ ディレクトリ・データベースの構造 ファイルの各レコードは、ライン・フィード($0A)で終端します。 最初のレコードは、そのドライブのファイル・システムの種別で、例えば、 “FAT”や“HPFS”がASCIIコードで記録されています。このレコードは、MVDM環 境を含め、OS/2環境でディレクトリ・データベースが作成された時にのみ有効で す。そうでない場合には“?”が記録されます。 残りのレコードは、個々のディレクトリ・ノードを表しており、以下の 3つの フィールドからなっています。 1バイトめ: ディレクトリが 8.3形式で表現できるか否かを、1/0 で表現しており、このフィールドが非0値の場合、DOS 版の検索対象から外されます。このフィールドは、MV DM環境を含め、OS/2環境でディレクトリ・データベー スが作成された時にのみに設定され、そうでなければ、 常に 0です。 2バイトめ: そのディレクトリの深さに 11を足した値が 1バイト で記録されます。(11を足さず、そのまま記録すると 深さが10段のディレクトリで、このフィールドがライ ン・フィードのコードと同じ値になって紛らわしいの で、それを避けるため、このようなオフセットを加算 しています)。 3バイトめ以降: ディレクトリ名を可変長のASCIIで記録します。Windows ロングネームは、それが設定されていても、DOS互換 の8.3形式で記録されます。文字列の終端はレコード 終端のライン・フィード($0A)で識別します。 ファイル終端識別用の特別なレコードはありません。 _________________________________________________________________ ○ 最後に このソフトウェアは、作者のAltair☆自身が自分で利用するために作成したも のです。このソフトウェアの利用により作者以外の者が何らかの損害を被ったと しても、Altair☆は一切の責任を負いません。あらかじめ御了承ください。 Copyright (c) 1991-2000, Altair☆. … ぉお! もう、初版から、もうすぐ11 年めになるんですなぁ。 Linux版も欲しいと思いつつ、何年も経ってしまった。(^^; このソフトウェアは、GNU productではありませんが、その転載配布条件はGPL version 2に準じたものとしています。 ACD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. ACD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with ACD; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. See COPYING for details. Altair☆ (NBG01720@nifty.ne.jp) http://www.vector.co.jp/authors/VA000199/