Tatara

付録I
環境変数

ツールは3つの環境変数を使います。PATHはMSX-DOS2がツールを見つけるため、TATARAはTATARAがインクルード・ファイルを探す場所、TANRENはTANRENがオブジェクト・ファイルを探す場所を示します。これらは、最初に必要になる3章、13章、23章で紹介しています。この付録では、その規則を1か所にまとめます。ツールがほかの環境変数を読むことはありません。

I.1 環境変数の設定

環境変数は、MSX-DOS2のSETコマンドで、プロンプトかバッチ・ファイルで設定します。

A:\>set tatara="a:\tatara\include"
 

環境変数は、MSXをリセットするか電源を切るまで残ります。MSXを起動するたびに設定するには、SETコマンドを起動ドライブのルート・ディレクトリにあるAUTOEXEC.BATに書きます(3.4節)。3つとも設定すると、次のようになります。

set path=%path%;a:\tatara\bin 
set tatara=a:\tatara\include;a:\project\inc 
set tanren=a:\project\lib
 

コマンド・ラインは、SETコマンドも含めて、それぞれの%name%を値に置き換えたあとで127文字までです。それより長いと、MSX-DOS2は*** Command too longで拒否し、環境変数はもとのままです。

I.2 PATH

PATHはツールのものではなく、MSX-DOS2のものです。コマンドが入力されると、MSX-DOS2はその名前のプログラムを、カレント・ディレクトリ、次にPATHのそれぞれのディレクトリの順に探します。そのため、TATARA.COMとTANREN.COMのディレクトリをPATHに書いておくと、どのディレクトリからでもツールを実行できます。ツール自身はPATHを読まないので、インクルード・ファイルやオブジェクト・ファイルを探すのには関係しません。

I.3 TATARA

TATARAは、INCLUDEで指定されたファイルを、次の3か所で探します(13.2節、図13.1)。

  1. インクルードする側のファイルのディレクトリ
  2. カレント・ディレクトリ
  3. TATARAのそれぞれのディレクトリ(左から順に)

環境変数が使われるのは、ファイルが最初の2か所のどちらにもないときだけで、ドライブや\で始まる絶対パスの名前には使われません(13.4節)。TATARAは、最初に必要になったときに環境変数を読み、アセンブルが終わるまでその値を使います。

sub\mid.incのように、ディレクトリを含む相対パスの名前も、ふつうの名前と同じように環境変数のそれぞれのディレクトリとつなげられます。図I.1に、値と名前から、TATARAが試す名前ができる様子を示します。

PIC

図 I.1: TATARAの値とINCLUDEの行の名前から、試す名前ができる様子(試す順)

I.4 TANREN

TANRENも、オブジェクト・ファイルを3か所で探します(23.1節、図23.1)。

  1. そのファイルを指定したリンク・ファイルのディレクトリ(リンク・ファイルで指定した場合)
  2. カレント・ディレクトリ
  3. TANRENのそれぞれのディレクトリ(左から順に)

TATARAと同じように、環境変数が使われるのはファイルが最初の 2か所のどちらにもないときだけで、絶対パスの名前には使われず、リンク全体で1回だけ読まれます。

/O:がなければ、出力ファイルは最初のオブジェクト・ファイルが見つかったディレクトリに書き出されます。そのオブジェクト・ファイルがTANRENのディレクトリにあったなら、出力ファイルもそこに書き出されます(23.4節)。別の場所に置くには、/O:で出力ファイルの名前を指定します。

I.5 両方に共通の規則

TATARAとTANRENは同じように読まれます。値のそれぞれのディレクトリに\と名前を続けたものを順に試し、最初に開けたものを使います。詳しくは表I.1に示します。

表 I.1: TATARAとTANRENの読まれ方

対象

どうなるか

区切り

PATHと同じく、ディレクトリの間に;を書きます。

順序

左から右へ。ファイルが開けた最初のディレクトリが使われ、残りは 試されません。

最後の\

必要ありませんが、あっても問題ありません。a:\incとa:\inc\は同じです。

ドライブだけ

b:は、MSX-DOS2でと同じように、ドライブB:の カレント・ディレクトリです。

相対パスのディレクトリ

ソース・ファイルやリンク・ファイルではなく、 カレント・ディレクトリからの相対です。incは、ツールを起動した ディレクトリの下のINCです。

ルートからのディレクトリ

\project\incはカレント・ドライブの ものです。

存在しないディレクトリ

メッセージなしで飛ばされ、次のディレクトリが 試されます。

空の項目

;;や先頭の;はカレント・ディレクトリを意味します。 そこはすでに試されているので、問題ありません。

空白

ディレクトリの名前の一部になります。a:\inc; a:\libでは、 2つ目のディレクトリが空白で始まるので存在せず、飛ばされます。;のあとに空白を入れないでください。

大文字と小文字

MSX-DOSのどこでもそうであるように、区別されません。

長いディレクトリ

ディレクトリ、\、名前を合わせて63文字に 収まらなければなりません。名前に対して長すぎるディレクトリは、 ファイルがそこにあっても、メッセージなしで飛ばされます。

長い値

127文字まで。それより長い値は、短くなったリストで探すのでは なく、the TATARA variable is too long.またはthe TANREN variable is too long.でツールを止めます。SETのコマンド・ラインそのものが127文字までなので、SETで これほど長い値は作れません。このメッセージが出るのは、ほかのプログラムが 環境変数を設定した場合だけです。

環境変数がない

最初の2か所だけが探されます。

どこにもファイルが見つからないとき、メッセージは試した名前ではなく、書かれたとおりのファイルの名前を示します。

A:\>tatara which.as 
... 
ERROR: cannot open ENVT.INC 
    included from WHICH.AS(2)
 

あるはずのファイルが見つからないときは、まずSETだけを入力して、環境変数の値を確かめてください。

日本のMSXでは、\は¥と表示されます。同じ文字です。