BASICコンパイラー (BASCOM) で使用できるスイッチ [PS/55]
DOS用BASICコンパイラーのBASCOMとLINKのスイッチ。昔、所有していたハードディスクに眠っていたプログラムビルド用バッチファイルの中身がこんな暗号を付けたコマンドばかりだったので、意味を調べたことがあった。改めて書き残しておく。
BASCOM(コンパイラー)に対するスイッチ
書式:BASCOM ソースファイル(*.BAS), オブジェクトファイル(*.OBJ), リストファイル(*.LST) [オプション パラメーター]...[;]
オプション パラメーターは次が使用できる。
- /E - プログラムは1つのON ERRORとRESUMEステートメントを含む。(これを指定すると、コンパイラーはGOSUBとRETURNステートメントごとに追加のコードを埋め込む。また、プログラム1行ごとに4バイトの追加のコードを埋め込む。このため、生成ファイルのサイズが増える。)
- /X - プログラムは1つ以上のRESUME, RESUME NEXT, RESUME 0のいずれかのステートメントを含む。(これを指定すると、コンパイラーは/Eの処理に加えてステートメントごとに4バイトの追加のコードを埋め込むため、生成ファイルのサイズが増える。)
- /V - プログラムはイベントトラップ(COM(n), KEY(n), PEN, STRIG(n), TIMER, PLAY(n))を使用する。ステートメントごとにイベントトラップを行う。
- /W - プログラムはイベントトラップを使用する。プログラム1行ごとにイベントトラップを行う。(/Vよりイベントトラップの回数が減るため、実行速度がより速い。)
- /4 - プログラムをMicrosoft BASIC-80 Version 4.51 インタープリターの文法で解釈する。
- /T - プログラムをMicrosoft BASIC-80 Version 4.51 インタープリターと同じ挙動で実行する。
- /A - 生成するソースリストの各行にオブジェクトコードを含める。
- /C:n - 通信受信データバッファーのサイズn(バイト)を指定する。
- /D - プログラムはTRON, TROFFステートメントを含む。(コンパイラーはデバッグやエラー処理用のコードを生成する。)
- /N - 行番号を無視する。
- /R - 配列のインデックスを解釈する順番を入れ替える。
- /S - 同一の4字以上の文字列が複数回使われた際に1つにまとめる処理を行わない。(生成ファイルのサイズが増える可能性がある。)/S省略時はこれが行われる。
- /O - ランタイムモジュール (BRUN20K.EXEなど) を使わないようにプログラムをコンパイルする。
必須の入力パラメーターはこれらのスイッチより前にコンマ(,)区切りで事前に指定すれば、コマンド実行中にパラメーターの入力を求められることはなく、また、セミコロンを付ければ以後の入力パラメーターを省略することを意味します。
例えば、パラメーターを指定しないと、
C:\BASCOM\BIN>bascom
IBM BASIC Compiler/2
Version 1.04
(C) Copyright IBM Corp. 1982, 1989.
(C) Copyright Microsoft Corp. 1982-1988. All rights reserved.
Source Filename [.BAS]: hello
Object Filename [hello.OBJ]:
Source Listing [NUL.LST]:
38567 Bytes Available
38292 Bytes Free
0 Warning Error(s)
0 Severe Error(s)
第一パラメーターにソースファイル名を入れてセミコロンを使用すると、
C:\BASCOM\BIN>bascom hello;
IBM BASIC Compiler/2
Version 1.04
(C) Copyright IBM Corp. 1982, 1989.
(C) Copyright Microsoft Corp. 1982-1988. All rights reserved.
38567 Bytes Available
38292 Bytes Free
0 Warning Error(s)
0 Severe Error(s)
この場合、第一パラメーターの名前「hello」に対して自動で拡張子が付され、ソースファイルはHELLO.BASを読み込み、コンパイル後のオブジェクトファイルはHELLO.OBJとして書き出され、リストファイル名はNUL(ヌル出力)なので出力されません。
LINK(リンカー)に対するスイッチ
書式:LINK オブジェクトファイル(*.OBJ), 実行ファイル(*.EXE), リストファイル(*.MAP), ライブラリ リスト, 定義ファイル, [オプション パラメーター]...[;]
カッコ内は省略スイッチ。日本語DOS K3.xに含まれているLINKはバージョンが古いため、使えるスイッチがこれとは違います。
- /ALIGNMENT (/A)
- /CODEVIEW (/CO) - 出力するEXEファイルにCodeView用のデバッグ情報を埋め込む。
- /CPARMAXALLOC (/CP)
- /DOSSEG (/DO)
- /EXEPACK (/E) - 出力するEXEファイルサイズを削減する代わりにシンボリックデバッガーが使えなくなる。
- /FARCALLTRANSLATION (/F)
- /HELP (/HE) - LINKで使用可能なオプション(スイッチ)を列挙する。説明なし。
- /INFORMATION (/I)
- /LINENUMBERS (/LI)
- /MAP (/M)
- /NODEFAULTLIBRARYSEARCH (/NOD)
- /NOFARCALLTRANSLATION (/NOF)
- /NOIGNORECASE (/NOI)
- /NOPACKCODE (/NOP)
- /PACKCODE (/PACKC)
- /PACKDATA (/PACKD)
- /PAUSE (/PAU)
- /SEGMENTS (/SE)
- /STACK (/ST)
- /WARNFIXUP (/W)
- /DSALLOCATE (/DS)
- /HIGH (/HI)
- /NOGROUPASSOCIATION (/NOG)
- /OVERLAYINTERRUPT (/O)
オブジェクトファイルはリンカーでライブラリと結合することで実行ファイルになります。事前に環境変数 LIB にライブラリファイル群があるディレクトリーへのパスをセットしておく必要があります。BASCOMの既定のインストール環境では C:\BASCOM\LIB にライブラリファイルがあるので、コマンドラインかAUTOEXEC.BATでSET LIB=C:\BASCOM\LIB
を実行します。
BASCOMコマンドと同様に入力パラメーターを省略できます。
C:\BASCOM\BIN>link hello;
IBM Linker/2 Version 1.00
Copyright (C) IBM Corporation 1987
Copyright (C) Microsoft Corp 1983-1987. All rights reserved.
この場合、オブジェクトファイルはHELLO.OBJを読み込み、リンク後の実行ファイルはHELLO.EXEとして書き出され、リストファイル名と定義ファイル名はNUL(ヌル出力)なので出力されません。コンパイラーが必要なライブラリファイル名をオブジェクトファイルに埋め込み、リンカーはこれを参照してリンクするので、通常はライブラリファイル名を明示的に指定する必要ありません。