Tatara

第22章
リンク・ファイル

リンク・ファイル(link file)は、TANRENのコマンド・ラインの言葉、つまりオブジェクト・ファイルの名前とオプションを書いたテキスト・ファイルです。tanren @progはファイルPROG.LNKを読み、その言葉を@progの位置に入力したものとして扱います。リンク・ファイルには127文字の制限がなく(21.5節)、プログラムのモジュールの一覧をコメント付きで1か所にまとめておけるので、どのリンクでも同じ一覧が使われます。

22.1 最初のリンク・ファイル

次のリンク・ファイルは、21章のプログラムをリンクします。

; PROG.LNK - the two modules of the example program. 
 
main            ; the start of the program: it must come first 
sub             ; greet 
 
/o:prog.com     ; the output file
 

このファイルは、2つのオブジェクト・ファイルMAIN.TROとSUB.TRO、そして出力ファイルPROG.COMを指定しています。コマンド・ラインには、リンク・ファイルだけを書きます。

A:\>tanren @prog 
Tatara MSX Linker v1.2.0 
Copyright (C) 2026 Javier Lavandeira 
https://tatara.tools 
 
2 modules, 16 records, ends at EOF. 
Wrote PROG.COM, 0100-0125 (38 bytes), entry 0100. 
A:\>prog 
Hello from TANREN.
 

22.2 リンク・ファイルの書き方

リンク・ファイルはテキスト・ファイルで、どのエディターでも書けます。中身はコマンド・ラインと同じ言葉で、次の規則に従います。

@のあとの名前に拡張子がなければ.lnkが付くので、tanren @progとtanren @prog.lnkは同じファイルを読みます。TANRENは、リンク・ファイルを書いたとおりの名前で開きます。名前にパスが含まれていなければ、カレント・ディレクトリにあるものが開かれます。

22.2.1 コマンド・ラインに収まらない大きなプログラム

TATARA自身は19のモジュールからなり、次のリンク・ファイルでリンクされます(最初の数行のコメントは、ここでは省いています)。

tatara.tro                              ; the driver 
cmdline.tro srcline.tro fields.tro      ; the front 
dirtab.tro macros.tro expand.tro        ; directives and macros 
cond.tro expr.tro                       ; conditionals and expressions 
symtab.tro optab.tro insn.tro           ; the tables and the back end 
emit.tro objout.tro errs.tro 
 
msxdos.tro strutil.tro alloc.tro hash.tro       ; shared
 

19のオブジェクト・ファイルの名前だけで、間に空白を1つずつ入れて 198文字になり、コマンド・ラインの127文字を大きく超えます。リンク・ファイルを使えば、TATARA.COMを作るコマンドは短くなります。

tanren /o:build\tatara.com @tatara.lnk
 

また、コメントでそれぞれのモジュールのまとまりが何であるかを示せますが、これはコマンド・ラインではできません。

22.3 リンク・ファイルとコマンド・ライン

リンク・ファイルの言葉は@の言葉の位置に入るので、コマンド・ラインでは、それ自身の名前やオプションと混ぜて使えます。TANRENは、入力された言葉もファイルから読んだ言葉も、すべて同じように扱います。

TANRENは、リンク・ファイルが指定するオブジェクト・ファイルを、まずそのリンク・ファイルと同じディレクトリで探します。TANRENが探す場所は23章で説明します。

22.4 メッセージ

リンク・ファイルについてのメッセージを表22.1に示します。TANRENはリンクを始める前にリンク・ファイルを読むので、これらのメッセージはバナーの前に表示されます。メッセージの中では、リンク・ファイルは「file list」と呼ばれています。

メッセージ

意味

ERROR: cannot open the file list NAME.LNK

その名前のリンク・ファイルがないか、@のあとに名前がありません。

ERROR: only one file list may be given.

コマンド・ラインに2つ以上のリンク・ファイルがあります。

ERROR: a file list may not name another one.

リンク・ファイルの中の言葉が@で始まっています。

ERROR: too many words on the command line or in the file list.

言葉が全部で4096文字を超えているか、128文字より長い言葉があります。

表 22.1: リンク・ファイルについてのメッセージ

たとえばコマンド・ラインとリンク・ファイルで同じモジュールを2回指定すると、リンクの途中で、そのパブリックな名前が2回定義されていることが見つかります(27章)。