MSX Datapack wiki化計画

8章 環境変数の設定

※
※ このページは書きかけです。以下の可能性があります。
※ ・誤字、脱字等のチェックをおこなっていません。
※ ・テキスト、表などフォーマットがされていない。
※ ・画像が抜けている。
※

 MSX-DOSは「環境変数」のリストをワークエリア内に記憶しています。環境変数とは、名前があってそれに関連した値を持ったものです。
 環境変数の名前はユーザーが任意に設定することができ、ファイル名で使用できるのと同じ文字を使うことができます。最大長は255文字です。MSX-DOSはデフォルトで設定されるいくつかの環境変数を用意しています。
 環境変数の値は最大長255文字まで任意の文字からなる単なる文字列です。文字についてはいかなる処理も実行されないため、大小文字の区別は保存されます。存在しないすべての環境変数はヌル値を取る(つまり文字がない)ものとされます。
 環境変数はSETコマンドによって変更あるいは設定できます。また、これによって現在設定されている環境変数を表示することもできます。
 デフォルトで設定されている環境変数と、それらの値の解釈を以下に示します。
 なお、【2.30】は、ver.2.30で追加された環境変数であることを意味します。

  8.1 環境変数の説明

  • ECHO

これは、バッチファイルから読まれる行のエコーを制御します(7章のバッチファイルについての記述を参照)。「ON」(小文字も可)以外のすべての値は、「OFF」として解釈されます。

  • PROMPT

これは、コマンドレベルのプロンプトの表示を制御します。「ON」(小文字も可)以外のすべての値は「OFF」として解釈されます。
PROMPTがOFFの場合(デフォルト)、プロンプトは「A>」のようにカレントドライブと「>」によって構成されます。
PROMPTがONの場合、プロンプトは、「A:\COM>」のように、カレントドライブ名とカレントディレクトリおよび「>」によって構成されます。この表示を行うためにはカレントドライブのカレントディレクトリを読むためにディスクをアクセスしなければならず、したがってプロンプトが現れるのにはその分時間がかかります。

  • PATH

COMMAND2.COMが与えられたコマンドを検索するための検索パスは、環境変数PATHとして保持されており、PATHコマンドにより操作されます。

  • SHELL

環境変数SHELLはどこにコマンドインタープリタ(COMMAND2.COM)が存在するかを示し、デフォルトではそれがロードされたところにセットされています。
コマンドインタープリタが外部コマンドを実行した後、それ自身をディスクから再ロードする必要がある場合それは環境変数SHELLを調べてそれが示すファイルから自分自身をロードしようとします。これがエラーになると、最初にロードされたドライブのルートディレクトリからロードしようとします。
コマンドインタープリタを別のドライブやディレクトリから再ロードさせるために、COMMAND2.COMをコピーしてSHELLをそこから参照するように設定することができます。たとえば、それをコマンドCOPY COMMAND2.COM H:\でRAMDISKにコピーしたとすると、SHELLはコマンドSET SHELL=H:\COMMAND2.COMで設定します。

  • TIME

TIMEはMSX-DOSによって表意jされる時刻の形式を指定します。「24」(24時間形式で表示する)でない場合には、「12」と解釈されますが、これは12時間形式に午前・午後の表示を加えて表示するものです。
時刻の入力は、どちらの形式で入力しても区別できますので、環境変数TIMEは無視されます。

  • DATE

DATEはMSX-DOSによる日付の表示と入力の形式を指定します。デフォルトではそのMSXマシンが使用される国に合わせてあります。それは、日付・時刻のセパレータで区切られた3文字あるいは3組の文字の形式を取ります(P.92「DATE」を参照)。たとえばアメリカ形式にセットするには、コマンド「SET DATE=MM/DD/YY」を入力します。

  • HELPとKHELP(【2.30】)

HELPコマンドにヘルプが必要なコマンド名を指定すると、HELP、KHELP環境によって指定されるディレクトリからファイルが読み出され表示されます。
HELPコマンド実行時に、画面モードに応じてANKモードならばHELPで指定されるディレクトリを、感じモードならばKHELPで指定されるディレクトリを自動的に選択します。それぞれデフォルトはMSX-DOSが起動されたドライブのルートディレクトリ中のHELP、KHELPというディレクトリになっています。

  • APPEND

APPENDはデフォルトでは定義されませんが、設定されるとシステムに対して特別な意味のある環境変数となります。これは標準のCP/Mプログラムとともにだけ使用されます。
CP/Mにはサブディレクトリがなく、カレントディレクトリに相当するものしかないため、CP/Mプログラムはサブディレクトリの使用法を知りません。このようなプログラムがファイルをオープンすると、それはこのただ1つのディレクトリ中だけを検索します。つまり、ドライブとファイル名だけを持っていてパス名を持たないわけです。
CP/MプログラムがMSX-DOSの下で実行されファイルをオープンしようとすると、指定されたドライブのカレントディレクト中でしかファイル名が検索されません。同様に、ユーザーがCP/Mプログラムにファイル名を入力する場合、ドライブ名とファイル名しか指定できず、つまりは、カレントディレクトリ中のファイルのみが参照されます。
この検索がMSX-DOSを通して実行される場合、ファイルがカレントディレクトリ中で見つからないと、次にAPPEND環境変数が調べられます。それが設定されていないと、ファイルは見つからなかったとします。設定されていると、それはパス名として解釈され、ファイルの検索を続けるもうひとつのディレクトリを指定します。
これは、CP/Mプログラムがファイルをオープンしてそれを読み書きする場合にのみ意味を持ちます。たとえば、ファイルを削除あるいは作成しようとした場合にはAPPENDは使用されません。実際APPENDは望ましくない効果を生じる可能性があるため、APPENDは通常バッチファイル中だけで使用し、バッチファイル中でAPPENDをセット、CP/Mプログラムを実行、そして解除といった手順で使用するのが良いでしょう。
APPENDの代表的な使われ方としては、大きなプログラム(ワードプロセッサやデータベースプログラム)がオーバーレイファイルやメッセージファイルを検索するディレクトリの指定、また、コンパイラ、アセンブラ、リンカがそのソースファイルやワーキングファイルを見つけるディレクトリの指定などがあります。
APPENDが役に立たず、望ましくない効果を生む可能性がある代表的な場合としては、ワードプロセッサでファイルを編集する際に、編集されたファイルは(たとえAPPENDが指定されていても)たぶんカレントディレクトリにしかおけないといったことがあります。これはワードプロセッサが以下のような動作をしているからです。
APPENDで設定したディレクトリとカレントディレクトリは異なっていて、APPENDで設定したディレクトリにあるファイル(「元のファイル」)を編集する場合、

(1)「元のファイル」を読み込む。
(2)カレントディレクトリに別の名前の出力ファイルを作る。
(3)「元のファイル」を削除しようとしたが、カレントディレクトリに「元のファイル」はないので削除でない(APPENDで設定したディレクトリに「元のファイル」は残っている)。
(4)(2)のファイルを「元のファイル」名にリネームする。

となるので、「元のファイル」がAPPENDで設定したディレクトリと、カレントディレクトリに2つできてしまいます。

  • PROGRAMとPARAMETERS

これらの特殊な環境変数は外部コマンドが実行されるときにCOMMAND2.COMによって設定され、終了するときに解除されます。したがって、一般の目的で使用することは避けなければなりません。

  • TEMP

パイプが実行されると(6章「リダイレクションとパイプ」を参照)、COMMAND2.COMは一つ以上のテンポラリファイルを作成します。TEMP環境変数はこれらのテンポラリファイルが作成されるドライブとディレクトリを示します。デフォルトでは、ブートドライブのルートディレクトリが指定されていますが、一般的にはスピードを向上させるためRAMディスクを参照するように変更します。
標準のMSX-DOSシステムはパイプのためだけにTEMPを使用していますが、テンポラリファイルを作成する必要のある他のプログラムやユーティリティもTEMP環境変数を使用することができます。

  • UPPER

これは外部コマンドに渡す0080h番地からのコマンド行を大文字に変換するかどうかを制御します。「ON」(小文字も可)以外のすべての値は「OFF」として解釈されます。
UPPERが「OFF」(デフォルト)の場合、コマンド行は何の変換も行われず、タイプしたままの値が外部コマンドに渡されます。
UPPERが「ON」の場合コマンド行の文字はそれぞれ対応する大文字に変換され、外部コマンドに渡されます。これはCP/Mの環境と互換性があります。

  • REDIR

これはコマンド行中のリダイレクションやパイプ文字をCOMMAND2.COMで処理するかどうかを制御します。「OFF」(小文字も可)以外のすべての値は「ON」として解釈されます。
REDIRが「ON」(デフォルト)の場合、リダイレクションやパイプはCOMMAND2.COMが解釈、実行するため、外部コマンドに渡されません。

  • EXPERT(【2.30】)

EXPERTはDOS1でフォーマットされたディスク上のプログラムを実行させるかさせないかを制御します。これはMSX-DOSのバージョンの違いから来る問題を未然に防ぐために追加しました。「ON」(小文字も可)以外の値はすべて「OFF」として解釈します。EXPERTが存在しない(デフォルト)か「OFF」の場合はDOS1でフォーマットされたディスクからのプログラムの実行は禁止されます。この場合、次のようなプロンプトが出力されます。

*** Wrong version of MSX-DOS
*** MSX-DOS のバージョンが違います

EXPERTが「ON」の場合はDOS1でフォーマットされたディスクからのプログラムの実行が可能になります。

 8.2 MSX-DOS version 2.31の新機能

 環境変数がコマンド行に取り込めるようになりました。
 環境変数名はファイル名などと区別するため、前後に%をつけます。
 例えば、以下のようにすると環境変数KHELPの内容を表示します。

A>ECHO %KHELP%
A:\KHELP

 8.3 環境変数の初期値一覧

 環境変数は、以下のように初期設定されます。

表2.4 環境変数の初期値

環境変数名初期値
APPEND なし
DATE yy-mm-dd
ECHO OFF
EXPERT なし
HELP A:\HELP
KHELP A:\KHELP
PATH ;
PROGRAMとPARAMETERSなし
PROMPT なし
REDIR ON
SHELL COMMAND2.COMがロードされたところ
TEMP A:\
TIME 12
UPPER OFF