1734744876
2024-12-20 21:04:00
長い間、私は DOS APPEND コマンドが何に役立つのか全く理解できませんでした。 APPEND が必要な状況に遭遇するまでは。
私が組織化と構築に取り組んだとき、 DOS 2.11 ソースコードDOS 3.x で使用されているものと同様のツリー構造にソース ファイルを配置しようとしました (これは DOS 3.x OAK で知られています)。
C:.
└───src
├───bios
├───cmd
│ ├───chkdsk
│ ├───command
│ ├───debug
│ ├───diskcopy
│ ├───edlin
│ ├───exe2bin
│ ├───fc
│ ├───find
│ ├───format
│ ├───more
│ ├───recover
│ ├───sort
│ └───sys
├───dos
├───inc
└───msdos
の inc サブディレクトリには、当然のことながら、次のような共有インクルード ファイルが含まれています。 DOSSYM.ASM、ほぼどこからでも含まれています。問題ありませんね?
ただし…既存の DOS 2.x バイナリに最もよく一致する出力を取得するには、古いバージョンの MASM を使用する必要があります (バージョン 1.25 で十分なようです)。しかし、MASM 1.25 は DOS 1.x 上で動作するように設計されており、ディレクトリについてはまったく知りません。
おそらく、昔は DOS 2.x がハードディスク上の 1 つの巨大なディレクトリから構築されていたのかもしれません。実際、DOS 2.0 は PC 上ではまったく構築できず、DEC メインフレーム上に構築されたことが知られています。しかし、DOS 2.11 も明らかに変更されており、 できた Microsoft の開発ツールを使用して PC 上で構築できます。
しかし、これは 1983 年に行われたもので、150 以上のアセンブラ ソース ファイルを 1 つのディレクトリにまとめてから、数百のオブジェクト ファイルと実行可能ファイルを追加していましたが、サウンドは鳴りませんでした。 まったく 魅力的です。クローン作成 DOSSYM.ASM 必要なすべてのディレクトリへのアクセスはさらに悪いように思えました。
そのとき、どういうわけか APPEND の存在を思い出し、それが問題の完璧な解決策であることに気づきました。ビルドする前に実行できます
APPEND ..\..\INC;..\INC
そして inc ディレクトリは、その兄弟サブディレクトリすべてと、1 つ下のレベルのサブディレクトリからアクセスできるようになります。絶対パスを使用することもできますが、この方法では、ビルド バッチ ファイルがどこに存在するかを知る必要がありません。
APPEND を導入すると、FCB I/O を使用する古い MASM 1.25 は中央に配置されたインクルード ファイルを見つけ、ソース コードをきちんとした階層構造に編成できるため、1 つの巨大な BLOB よりもはるかに簡単に操作できます。
アペンドとは何ですか?
APPEND は「DOS 拡張機能」であり、実際には INT 21h をインターセプトし、いくつかのサブ関数に特別な処理を追加する TSR です。これらは主に次のとおりです。
- 0Fh FCBファイルを開く
- 3Dh ファイルオープンのハンドル
- 23時間 ファイルサイズの取得
これらのサブ関数が現在のディレクトリでファイルを見つけられなかった場合、APPEND は管理するパスのリストを使用してサブ関数を再試行します。
DOS 2.11 をビルドする場合、MASM 1.25 は INT 21h/0Fh (FCB ファイル オープン) を使用して DOSSYM.ASM を開こうとします。ファイルが現在のディレクトリに存在しないため、最初の試行は失敗します。 APPEND は開いてみます ..\INC\DOSSYM.ASM そして、それが失敗した場合には、 ..\..\INC\DOSSYM.ASM。したがって、古い MASM は、実際にはディレクトリについて何も知らなくても、複数のディレクトリを処理できるように魔法のようにアップグレードされます。
APPEND の動作原理は複雑ではありません。これは主に、ディレクトリのサポートがないか不十分な古い DOS アプリケーションと、複数のディレクトリ、場合によっては複数のドライブ文字にまたがってファイルやプログラムを整理したいと考えているユーザーとの間の橋渡しとして機能します。もちろん、実際の APPEND の実装は決して単純ではありません。
APPEND の進化と実装
APPEND に付属する最初の DOS バージョンは DOS 3.3 (1987) でしたが、これは偶然ではなく、IBM によって開発された最初の DOS バージョンでした。
しかし、APPEND はそれよりも古く、1985 年に IBM PC ネットワーク プログラム 1.0 で初めて登場しました。APPEND は PC ネットワーク プログラム (後の PC LAN プログラム) に同梱されていた理由を推測するのは困難です。 本当に ネットワーキングと何の関係もありません。ユーザーがアプリケーションを中央ネットワーク サーバーに保存し、データ ファイルを自分のマシンに保存する傾向にあったネットワークでは、これが特に便利だったと考えられます。そして、これはディレクトリをうまく処理できないアプリケーションにとっては問題です。
これで、 APPENDのソースコード、いくつかのことがより明確になります。 APPEND のオリジナルの PC ネットワーク プログラム バージョンは、GGA というイニシャルを持つ人物によって書かれ、1986 年に BAF、間違いなく Barry A. Feigenbaum (SMB プロトコルの開発で最もよく知られている) によって DOS での出荷用に改良されました。
デフォルトでは、APPEND は独自の内部ストレージでパス リストを管理します。しかし、それには、 /E このオプションを使用すると、代わりに APPEND が同名の環境変数を検索します。このメカニズムには次のような欠点があります。 APPEND= 変数には、新しく作成されたすべての環境にスペースが必要です。その一方で、異なる DOS プロセスが異なる APPEND パスを持つことも可能になります。
OS/2 は次のようなメカニズムを実装していることに注意してください。 APPEND /E を通して DPATH 環境変数。 OS/2 にのみ組み込まれており、TSR をロードする必要はありません。
もう 1 つの APPEND 追加は、 /X これにより、APPEND がさらに DOS サブ関数 (特に Find First と Exec) をフックします。これにより、APPEND が事実上、 PATH 環境変数。
APPEND は、PC DOS 3.3 リファレンスに内部コマンドと外部コマンドの両方としてリストされています。一見すると意味がわかりませんが、実際はそうなのです。
APPEND を初めて実行する場合、これは外部コマンドです。ただし、それ自体を TSR としてインストールするときは、INT 2Fh/AEh をフックします。 COMMAND.COM は、COMMAND.COM が知らないコマンドの実行を要求されると、INT 2Fh/AEh を呼び出します。このメカニズムにより、APPEND がインストールされると、内部コマンドとして機能できるようになります。
つまり、APPEND を初めて実行するときは、ディスクからロードして実行する必要があります。ただし、その後、コマンド ラインまたはバッチ ファイルから COMMAND.COM を介して APPEND を実行しようとすると、すでにインストールされている TSR へのショートカットが直接取得され、実質的に APPEND が内部コマンドに変わります。 COMMAND.COM と TSR 間の INT 2Fh/AEh インターフェイスは、おそらく APPEND の利点のために DOS 3.3 で追加されました。
APPEND には独自のプログラミング インターフェイスもあり、INT 2Fh/B7h を通じてアクセスできます。これにより、プログラムは APPEND の動作を制御し、現在の APPEND パスをクエリできるようになります。これがどの程度広く使用されているかは完全には明らかではありません。
まとめ
APPEND は、99.99% の場合、まったく関係のないものの 1 つですが、必要な場合には非常に役立ちます。これは、アプリケーションが現在のディレクトリ以外のディレクトリにあるファイルを検索できるようにする TSR です。
APPEND が最初に登場したのは IBM PC ネットワーク プログラム (1985 年) でしたが、バージョン 3.3 (1987 年) 以降は DOS に統合され、COMMAND.COM への興味深いリンクにより、APPEND をインストールすると内部コマンドになることができました。
#DOS #追加 #OS2 #ミュージアム