第 9 章 COBOL システム インターフェイス (Cob)

この章では、Cob ユーティリティの使用方法を説明します。このユーティリティは、コンパイラ、およびシステムリンカへのインターフェイスの役割を果たします。このインターフェイスを使用すると、実行プログラムの生成に必要なべてのフェーズを処理することができます。

9.1 はじめに

Cob ユーティリティは、ユーザが作成した COBOL ソースプログラムと、次に示す COBOL システムの構成要素との間のインタフェースの役割を果たします。これを使用すると、実行プログラムの生成に必要なすべてのフェーズを処理することができます。

cob ユーティリティは、C++ コンパイラ、cc (C コンパイラ)、および as (アセンブラ) へのインターフェイスの役割も果たします。


注 : 64 ビット版の Server Express を使用している場合は、ツール名が異なる可能性があります。 詳細は、『32 ビットモードおよび 64 ビットモードでの作業』の章を参照してください。


9.2 Cob の使用

Cob ユーティリティは、cob コマンドを使ってを実行し、制御します。cob を使用すると、コマンド行に指定したファイルが処理され、モジュールが生成されます。このモジュールをリンクしたり、実行することができます。

実行可能な COBOL プログラムの基本的なタイプは 5 種類あります。cob コマンドを使用すると、これらのタイプのプログラムを直接統合することができます。実行可能ファイルのタイプは次のとおりです。

呼び出し可能な共有オブジェクトファイル、中間コードファイル (.int ファイル)、および生成コードファイル (.gnt ファイル) は動的にロード可能で、実行するシステムの実行可能プログラムにリンクする必要はありません。

共有ライブラリは、システムにリンク可能なファイルで、実行可能ファイルにリンクすることができます。 共有ライブラリ自体を直接実行することはできません。

システムの実行可能ファイルとは、オペレーティングシステム形式のファイルで、直接実行することができます。このファイルは、オペレーティングシステムでロードされます。オペレーティングシステムでは、これらの実行可能ファイルを実行するための新しいプロセスが作成されます。

実行可能ファイルのタイプに関する詳細は、『アプリケーションのパッケージ化』の章を参照してください。

cob の出力ファイルのタイプは、cob コマンドに入力するファイルのタイプや、指定するオプションによって異なります。cob で認識されるファイルタイプは、 次に示すような拡張子で区別されます。

拡張子
ファイルタイプ
.cbl.CBL、または .cob COBOL ソースファイル
.int COBOL 中間コードファイル
.gnt 動的にロード可能な生成コードファイル
.s アセンブラソースファイル
.c C ソースファイル
.a オブジェクトモジュールファイルのアーカイブ
.so 共有ライブラリファイル
.o オブジェクトモジュールファイル
.C C++ ソースファイル

Cob で認識されないオプションは、入力ファイル、または有効なリンカオプションとして保存され、リンク時に使用されます。このように、cob コマンドに指定したアーカイブファイルは、すべてリンカに渡され、リンカでは、参照されるファイルのみがアーカイブから取り出されます。

上記以外の拡張子を持つ COBOL ソースファイルを使用できます。この場合は、このようなファイルを cob に指定する際に、cob の -k フラグを指定する必要があります。(詳細は、『cob のフラグの説明』の章を参照してください)。

9.2.1 Cob ユーティリティの実行

Cob ユーティリティを起動するには、UNIX システムのプロンプトで次のように入力します。

cob [options|filename] ...

パラメータの内容は次の通りです。

options cob オプションを指定します。ここには、cob オプションを個別に指定することも、1 つ以上の cob フラグをグループ化して指定することもできます。cob オプションの形式に関する詳細は、『cob オプションの指定』の項を参照してください。
filename 入力ファイルの名前を指定します。ここには、COBOL ソースコード (.cbl.CBL、または .cob)、中間コード (.int)、リンク可能なオブジェクトコード (.o または .so)、C ソース (.c)、C++ ソース (.C)、アセンブラソース (.s)、またはアーカイブ (.a) ファイルから、任意のファイルを、任意の組み合わせで指定することができます。

9.2.2 cob オプションの指定

cob のオプションは、次の形式で指定します。

flag-intro flag-letter [parameter]

cob の複数のオプションをグループ化して指定した場合も、それぞれオプション flag-letter にすべて同じ intro を指定して別々に指定した場合も同じ動作になります。parameter を指定した場合は、最後のオプションにのみ適用されます。次の形式で指定します。

flag-intro flag-letter[flag-letter]... [parameter]

パラメータの内容は次の通りです。

flag-intro ハイフン文字 (-) またはプラス (+) 文字。
flag-letter この章のこれ以降に示す、『cob のフラグ』の項の一覧から 1 字 (複数文字になることもある) を選択し、必要なオプションをフラグで示します。
parameter フラグで示したオプションの動作の詳細を設定する、オプションの文字列を指定します。parameter には、空白文字、またはタブ文字を含めることができません。これらを含める場合は、paramter を単一引用符 (') または二重引用符 (") で囲んでください。

flag-introflag-letter の間、または 2 つの連続した flag-letter の間に空白文字を入れないでください。ただし、parameter を指定する場合は、最後の flag-letterparameter の間に空白を 1 つ入れることができます。(たとえば、-xve "" "" は、ヌルパラメータを示します)。flag-intro の前には、必ず空白文字を入れる必要があります。

9.2.2.1 オプションの構成

cob のオプションは、様々な方法で指定することができます。指定方法によって、cob で処理される順番が決まります。cob コマンドは、指定方法別に、オプションを左から右へと処理します。一般には、1 つのオプションが複数回指定された場合に、cob では、そのオプションを最後に処理した際の設定が使用されます。オプションの中には、コンパイラ指令を指定できる -C、および -N のように、反復して使用できるものがあります。

cob コマンドの起動時に、オプションが検索される場所を、検索される順に次に示します。

  1. $COBDIR/etc/cobopt ファイルに指定されている、システムのデフォルトのオプション

  2. 環境変数、 COBOPT に指定されている、ユーザのデフォルトのオプション

  3. cob のコマンド行に指定された、実行時のオプション

システム、またはユーザのデフォルトとして設定する必要があるオプションを、特定のインスタンスでは解除する場合があります。オプション、-c、-P、および -U の場合は、フラグ文字の後に空白文字を入れずにハイフンを指定すると解除できます。

cob のコマンド行で指定されたオプションは、UNIX シェルを通して cob に渡されますが、cob に渡される前に、空白文字、アスタリスク (*)、かっこ ()、単一引用符 (')、および二重引用符 (") のような特定の文字が UNIX シェルで特殊処理されます。これらの文字を変更しないでそのままオプションの一部として渡す場合は、これらがシェルで処理されないようにする必要があります。UNIX シェルの場合は、文字の前にバックスラッシュ (\) を指定するか、文字を単一引用符または二重引用符で囲むと、これらの文字は処理されません (シェルの処理に関する詳細は、ご利用の UNIX システムのマニュアルを参照してください)。

ただし、cob を使用すると、"mode(setting)" または mode\(setting\) のかわりに、mode=setting という構文が使用できます。これを使用すると、バックスラッシュや引用符が不要になり、便利です。cob コマンドは、等号 (=) を使用した構文すべてを、"mode(setting)" の形式に変換します。COBOL 構成要素に等号 (=) 自体を渡す場合は、等号を続けて 2 つ (==) 使用する必要があります。


注 : cob コマンドでは、オプション内に使用された特殊文字、単一引用符、および二重引用符は、そのオプションが指定された場合にかかわらず、全く同じように扱われます。つまり、コマンド行で指定しても、それ以外の場所で指定した場合でも、同じ処理が実行されます。引用符で囲むパラメータは 128 文字以内にする必要があります。


次に示す行が $COBDIR/etc/cobopt に指定されているとします。

-U -P -C "ans85 noalter warning=1"

cob のコマンド行で、次のように指定します。

cob -xU -C alter -C warning=2 prog.cbl

これは、次のように指定しても、全く同じ意味になります。

cob -xU -C "alter warning=2" prog.cbl

このように指定した場合は、コンパイラに渡される指令が、最後に設定された内容となるため、COBOL ソースファイル、 prog.cbl とともにコンパイラに渡されるのは、ANS85 ALTER LIST"prog.lst" WARNING"2" となります。これにより、実行プログラム prog がビルドされます。未解決のシンボルは実行時に動的にロードされ、リンク時に不明なシンボルとしてフラグが立てられます。

9.2.2.1.1 $COBDIR/etc/cobopt ファイル

システム共通のデフォルトのオプションは、ファイル、 $COBDIR/etc/cobopt に定義します。このファイルは、cob コマンドが最初に呼び出された際に読み込まれます。このテキストファイルの各行は、次のいずれかの形式で記述する必要があります。

[set environment-variable=value]
[options] ...
[cobextn: .ext [.ext] ... ]

パラメータの内容は次の通りです。

environment-variable COBOL システムでサポートされる環境変数の 1 つを指定します (詳細は、付録『環境変数』を参照してください)。
value 指定した環境変数に設定する値を指定します。
options cob のオプションを指定します。ここには、cob オプションを個別に指定することも、1 つ以上の cob フラグをグループ化して指定することもできます。 cob のオプションの形式に関する詳細は、『cob オプションの指定』の章の先頭部分を参照してください。
.ext 標準の拡張子 .cob.cbl、または .CBL に加えて、cob で COBOL ソースファイルとして扱われるようにするファイル名拡張子を指定します。ファイル名拡張子の先頭はピリオドで始まるように指定してください。1 行に複数の拡張子を指定する場合は、各拡張子の間に空白文字、またはタブ文字を入れてください。cobextn 行は、複数行を使用して指定することができます。

行の先頭に、識別子、 set または cobextn: のいずれかが指定されていない場合は、その行が options 行として扱われます。


注 : ファイル、 $COBDIR/etc/cobopt の内容は、同じ $COBDIR を使用するすべてのユーザの COBOL の操作に影響があるため、ファイルの内容を変更する場合は、その影響を十分に考慮した上で行ってください。


次に示す 2 行が $COBDIR/etc/cobopt に指定されているとします。

cobextn: .AD  .FD 
-N "nobound" -C ans85

cob のコマンド行で、次のように指定します。

cob -u a.FD b.AD

このように指定すると、COBOL ソースファイル a.FD および b.AD が、コンパイラの構文チェックフェーズに渡され、ANS85 指令に基づいて、中間コードに翻訳されます。次に、中間コードがコンパイラの生成フェーズに渡され、NOBOUND 指令に基づいて、生成コードに翻訳されます。

9.2.2.1.2 COBOPT 環境変数

ユーザのデフォルトのオプションは、COBOPT 環境変数を使って定義します。 COBOPT には、オプションや、オプションを指定しているファイルへのパスを設定することができます。この環境変数に指定したオプション (または指定したパスにあるファイルに指定されたオプション) で、$COBDIR/etc/cobopt に定義されているシステムのデフォルトのオプションを補足したり、上書きしたりすることができます。オプションは複数行にまたがって定義することができます。各行は、ファイル $COBDIR/etc/cobopt についての説明に示している形式にする必要があります (『$COBDIR/etc/cobopt ファイル』の項を参照してください)。

COBOPT 環境変数を設定する場合は、値全体を 単一引用符 (') または二重引用符 (") で囲むと、 1 つの値を複数行を使って設定することができます。これらの引用符で囲まれた値は、複数行に渡っていても、各行は 1 つの値の一部として UNIX シェルで処理されます。Bourne シェルの場合は、Enter キーで改行を示します。その他のタイプのシェルでは、改行を別な方法で示す必要があります。値に二重引用符を含める場合は、たとえば、バックスラッシュ (\) を前に付けるなどして、シェルで処理されないようにしてください。

環境変数の設定や、シェルの処理に関する詳細は、ご利用の UNIX システムのマニュアルを参照してください。

有効な cob のコマンド行を COBOPT 環境変数に設定することができます。この行で cob の -v フラグを指定すると、この行が cob に渡された際に、行全体が画面にエコーされます (-v に関する詳細は、『cob のフラグの説明』の章を参照してください)。

COBOPT を次のように指定します。

COBOPT="set COBCPY=/usr/lib/cblcpy:$COBDIR/cpylib:$HOME/mylib::
-N nobound -C \"ans85 noalter list\"
cobextn: .AD .FD"
export COBOPT

このように指定した場合に、cob コマンドを実行すると、cob では、環境変数、 COBCPY が設定されます。cob は指令、 ANS85 NOALTER LIST をコンパイラの構文チェックフェーズに、指令、 NOBOUND をコンパイラの生成フェーズに渡します。二重引用符を使用した場合は、$COBDIR および $HOME はシェルで展開されますが、単一引用符を使用した場合はこれらは展開されません。

COBOPT を次のように指定します。

COBOPT='-C "copyext=CPY,cpy nooptional-file" -N "nobound"'

このように指定すると、cob では指令、 COPYEXT"CPY,cpy"、および NOOPTIONAL-FILE がコンパイラの構文チェックフェーズに渡され、NOBOUND 指令がコンパイラの生成フェーズに渡されます。

9.2.2.1.3 cob のコマンド行

実行時のオプション (アプリケーションの実行時ではなく、cob が実行された時) は、cob ユーティリティの実行』の項で説明しているように、cob のコマンド行で指定します。cob のコマンド行で指定したオプションは、$COBDIR/etc/cobopt ファイルや、COBOPT 環境変数に既に指定されているオプションを補足、または上書きします。

コマンド行で指定できる cob のオプションすべてを、章の以降に示す 『cob のフラグ』の項に一覧表示しています。これらのオプションの詳細は、cob のフラグの説明』の章で説明しています。

$COBDIR/etc/cobopt$COBOPT も存在しない場合に、cob のコマンド行で次のように指定した場合を説明します。

cob -xve "" -o my_rts -C xopen prog.cbl prog2.c

このように指定すると、XOPEN 指令がコンパイラに渡され、COBOL ソースファイル、 prog.cbl および C ソースファイル、 prog2.c をコンパイルして、その結果を my_rts というシステムの実行可能ファイルにリンクするという指示が cob 伝えられます。この例で作成される実行可能ファイル、 my_rts は、実行時に実行するプログラムの名前を指定する必要があります。また、cob ユーティリティは、進捗状況の詳細の通知も行います。

その他の例に関しては、この章のこれ以降に示す、『コマンド行の例』の項を参照してください。

9.2.3 cob のファイル処理

実行可能プログラムモジュールを作成する際は、cob コマンドがそれぞれの入力プログラムを各フェーズに順番に渡していきます。プログラムは、各フェーズで、あるファイル形式から別のタイプのファイルに変換されます。各フェーズの出力ファイルは、次のフェーズへの入力ファイルになります。これらのファイルタイプは、ファイルの拡張子で次のように区別されます。

入力ファイル cob の処理 出力ファイル
name.cbl
name.CBL

name.cob
COBOL ソースコードファイルを中間コードファイルにコンパイルする。 name.int
name.int 生成コードファイルを作成する。 name.gnt
オブジェクトコードファイルを作成する。 name.o
name.s システムアセンブラに渡す。 name.o
name.c C ソースコードファイルを C コンパイラに渡す。 name.o
name.C C++ ソースコードファイルを C++ コンパイラに渡す。 name.o
name.o
libname.a
libname.so

システムリンカ (ld) に渡して、共有ライブラリファイルを作成する。 libname.so
システムリンカ (ld) に渡して、呼び出し可能な共有オブジェクトを作成する。 name.so
システムリンカ (ld) に渡して、システムの実行可能ファイル (a.out ファイルとも呼ぶ)を作成する。 name

デフォルトでは、すべての COBOL ソースファイルがアニメーション用にコンパイルされると、cob のプロセスは終了します。つまり、動的にロード可能な中間コードファイル (拡張子、 .int) および Animator ファイル (拡張子 .idy) が作成されます。cob のオプションで、他の終了点を指定することもできます。(この章の以降に示す、『cob のフラグ』の項を参照してください)。

入力ファイルのすべてが指定された終了点を過ぎると、cob は Dynamic Loader を使ってこれらのファイルをリンクします。これにより、システムの実行可能ランタイムシステムが作成されます。このランタイムシステムは、動的にロード可能なファイルをロードして実行する際に使用されます。

プロセスの途中で作成された一時ファイルは使用後に削除されます。ただし、.int ファイルおよび .o ファイルは削除されません。これらのファイルは入力ファイルと同じディレクトリに保存されます。

リンクされた COBOL プログラム、または動的にロード可能な COBOL プログラムは、 (COBOL の CALL 動詞を使って) アプリケーション内の他のリンクされたモジュール、または動的にロード可能なモジュールにアクセスできます。このタイプのモジュールの作成に関する詳細は、『システムの実行可能プログラムへのリンク』の章を参照してください。


注 : ロングファイル名をサポートするファイルシステムでは、プログラムソースファイル名の長さを、入口点名の制限長より短くすることをお奨めします。詳細は、『システムの実行可能プログラムへのリンク』の章を参照してください。


9.2.4 COBOL システムの構成要素へのアクセス

COBOL システムの構成要素にアクセスするには、アクセスする構成要素の場所を cob コマンドに指定する必要があります。これらの構成要素は、COBOL システムがインストールされているディレクトリに置かれています。このディレクトリを、この章では $COBDIR と表します。デフォルトの $COBDIR ディレクトリは、AIX の場合は /usr/lpp/cobol、それ以外の場合は /opt/lib/cobol として cob コマンドで認識されます。ご使用の COBOL システムが上記の場所にインストールされている場合は、COBDIR 環境変数を指定する必要はありません。Micro Focus COBOL システムソフトウェアを別の場所にインストールした場合は、COBDIR 環境変数を設定して、システムの構成要素の検索先を cob に指定する必要があります。 指定するパス名は 51文字以内で無ければなりません。 COBOL システムの異なる複数のバージョンをマシンにインストールすることもできますが、この場合でも、使用する構成要素の場所を COBDIR に設定するだけで、設定した場所の構成要素が選択されます。次に例を示します。

COBDIR=/home/products/cobse10
export COBDIR

これは、システムの構成要素が、ディレクトリ、 /home/products/cobse10 に置かれていることを示します。cob コマンドが UNIX の検索パスに存在しない場合は、PATH の値を変更する必要があります。次に例を示します。

PATH=$COBDIR/bin:$PATH
export PATH

このとき、LIBPATH (AIX の場合)、SHLIB_PATH (HP/UX システムの場合) または LD_LIBRARY_PATH (その他の場合) を$COBDIR/lib に設定する必要があります。

cob コマンドで出力されるファイルは、デフォルトでは、カレントディレクトリに置かれます。 作成された一時ファイルは、デフォルトではすべてシステムの一時ディレクトリに置かれます。しかし、TMPDIR 環境変数を設定し、有効なパス名を指定すると、これらのファイルを別の場所に置くことができます。TMPDIR の使用法に関する詳細は、付録『環境変数』を参照してください。

9.2.5 cob のフラグ

cob コマンドでは次のフラグが使用できます。これらのフラグを使用して、実行可能プログラムモジュールが作成する際システムの構成要素の動作指定し、出力されるファイルのタイプを決定します。これらのフラグの影響に関する全詳細は、cob のフラグの説明』の章を参照してください。

cob のフラグ
機能
-A as_option as_option をアセンブラ (as) に渡す。
-a アニメート用にコンパイルする。これは、デフォルトで設定されています。
-C directive 構文チェックフェーズの directive をコンパイラに渡す。
-CC cc_option cc_option を C コンパイラ (cc) に渡す。
-c リンク可能なオブジェクトモジュール (.o) 以外はコンパイルしない。
-d symb symb を動的にロードする。
-e epsym 最初の入口点を epsym に設定する。
-g デバッグ情報を作成する。
-I symb 実行可能プログラムモジュールに symb を含める。
-i リンクされていない環境を .int コードにコンパイルする。
-k cobol-file 非標準のファイル名拡張子を持つ COBOL ソースファイルが認識させる。
-L dir 検索アルゴリズムを変更し、相対順序は維持して、オプションをシステムリンカに渡す。
+L dir 検索アルゴリズムを変更し、他の全てのオプションの最後にオプションをシステムリンカに渡す。
-l lib 相対順序を維持して、オプションをシステムリンカに渡す。
+l lib 他の全てのオプションの最後にオプションをシステムリンカに渡す。
-m symb=newsym テキスト symbnewsym にマップする。
-N directive 生成フェーズの directive をコンパイラに渡す。
-O 最適化する。
-o filename 出力ファイル名を指定する。
-P COBOL のコンパイルリストファイルを作成する。
-p フラグを C コンパイラに渡して、プロファイルルーチンを使用する。
-Q ld_option
-Q,1 ld_option 、または
-Q,2 ld_option
ld_option をシステムリンカ (ld) に渡す。
-q Micro Focus で今後使用するために予約されている。
-t マルチスレッドランタイムシステムを使用する、マルチスレッドプログラムを作成する。
-U 未解決のシンボルを動的にロードする。
-u リンクされていない環境を .int コードにコンパイルする。
-V バージョン番号を示す。
-v 詳細モードを設定する。
-W err-level cob を終了させるエラーレベルを制御する。
-X symb テキスト symb が、実行可能プログラムの出力ファイルに表示されないようにする。
-x システムの実行可能ファイルを作成する。
-x,CC C++ をサポートした、システムの実行可能ファイルを作成する。
-y 自己格納型の呼び出し可能共有オブジェクトを作成する。 このフラグは DB2ストアドプロシージャを作製するときにのみ使用してください。 詳細は、マニュアル データベースアクセスClient DB2 Applications and Stored Procedures の章を参照してください。
-z 呼び出し可能な共有オブジェクトを作成する。
-z,U 呼び出し可能な共有オブジェクトを作成し、未定義のシンボルがある場合はエラーを出力する。
-z,CC C++ をサポートした呼び出し可能な共有オブジェクトを作成する。
-z,U,CC C++ をサポートした呼び出し可能な共有オブジェクトを作成し、未定義のシンボルがある場合は、エラーを出力する。
-Z 共有ライブラリを作成する。
-Z,CC C++ をサポートした共有ライブラリを作成する。

認識されないオプションはすべてシステムリンカ (ld) に渡されますが、明示的にリンカに渡すオプションには、-Q フラグを 使用することをお奨めします。リンカ用のフラグのうち、パラメータが必要なものはすべて -Q フラグを使用して渡す必要があります。

cob のフラグ、 -c、-P、および -U は、2 進数のグローバルオプションです (つまり、これらは、入力ファイルの複数に影響する可能性がある機能を選択するフラグです)。これらのオプションが選択されていた場合は、オプションの文字にハイフン (-) を付けると、無効にすることができます。これにより、システムの $COBDIR/etc/cobopt ファイルで選択されていた、グローバルな 2 進数のオプションを上書きすることができます。

9.2.5.1 コマンド行の例

プログラムのコンパイル、コードの生成、およびリンクを行うための cob コマンドの使用例を次に示します。

生成されたファイルを cob コマンドを使って実行する方法に関しては、『実行』の章を参照してください。詳細は、『プログラムの作成』『呼び出し可能な共有オブジェクト』 、および『システムの実行可能プログラムへのリンク』の章も参照してください。

9.2.6 コンパイラへのインターフェイス

cob コマンドは、COBOL コンパイルシステムへのインターフェイスとして使用されます。コンパイラ指令は様々な方法で指定することができます。たとえば、cob を使って指定したり、プログラムソースファイルで指定する方法があります。次の項では、コンパイラ指令の指定方法をすべて説明します。

9.2.6.1 プログラムソースの表記規則

Server Express の COBOL コンパイラは、標準の UNIX テキストファイル (vi などの UNIX エディタで作成されたファイル) からソースを受け取ります。これは、『言語リファレンス』で説明されている、標準の COBOL のファイルと同じ形式です。

COBOL ソースプログラムの各行は、最終行を含めて、すべて改行文字で終了させる必要があります。

作成する COBOL ソースプログラムには、タブ文字以外の制御文字 (16 進の値 x"00" から x"1F" までの文字、または x"7F" の文字) を含めないでください。ただし、これらの制御文字をリテラル文字列に組み込むことはできます。タブは、8 の倍数の位置にある次の文字まで、空白文字で展開されます。

9.2.6.2 コンパイラ指令の指定

コンパイラ指令は、様々な方法で指定することができます。コンパイラに処理される順番は、指定方法によって決まります。各方法で指定された指令は、コンパイラでそれぞれ左から右へと処理されます。 1 つの指令が複数回指定された場合は、コンパイラで使用されるのは、最後に設定された内容です。 指令は、次の場所を次の順序でコンパイラに検索されます。

  1. cobol.dir ファイルに指定されている COBOL システムのデフォルトの指令

  2. $COBDIR/etc/cobopt ファイルで cob のオプションに指定されている、システムのデフォルトの指令

  3. 環境変数、 COBOPT で cob のオプションに指定されている、ユーザのデフォルトの指令

  4. cob のコマンド行で cob のオプションに指定されたコンパイル時の指令

  5. 各プログラムのソースコードファイルの最初の $SET 文に指定されている、プログラム固有の指令

これらの方法で指定された指令は、コンパイラで上記の順に、各 COBOL ソースファイルに対してに処理されます。この処理順序から、コマンド行と cobol.dir で、同じ指令に異なる設定を行った場合は、コマンド行の設定内容が優先されることが解ります。たとえば、コマンド行で NOANS85 コンパイラ指令を指定した場合は、cobol.dir に指定されている ANS85 の設定が上書きされます。

ユーザ固有の指令ファイルを作成すると、コンパイラの動作を更にカスタマイズすることができます。指令ファイルは ASCII のテキストファイルで、これに定義された指令セットすべてが 1 度にコンパイラに渡されます。このユーザ固有の指令ファイルをコンパイラに渡すには、DIRECTIVES 指令、または USE 指令を使用します。上記に示したいずれかの方法で DIRECTIVES 指令または USE 指令を指定すると、指令ファイルの処理に優先順位をつけることができます。この章の以降に示す、『DIRECTIVES 指令と USE 指令』の項を参照してください。

指令に渡すパラメータを $SET 文に指定した場合は、パラメータが大文字に変換されます。パラメータを cob のコマンド行、または指令ファイルに指定した場合は変換されず、指定された大文字と小文字の状態が残されます。

cob にオプションを指定する方法と、cob のオプションにコンパイラ指令を指定する方法は、前のcob コマンドの実行の項で説明しています。コンパイラ指令を指定するその他の方法については、次の項で説明します。

9.2.6.2.1 cobol.dir 指令ファイル

cobol.dir は指令ファイルです。このファイルは、次の指令がコンパイラの起動時に最初に指定されたものとして、コンパイラで自動的に処理されます。

directives"cobol.dir"

cobol.dir に指定されたコンパイラ指令は、コンパイラに組み込まれたデフォルトの設定を上書きしますが、これらの指令は、上記の方法で指定された指令で、さらに順番に上書きされます。生成フェーズの指令は、指令ファイル、 cobol.dir に指定できません。

コンパイラでは、カレントディレクトリの cobol.dir ファイルが最初に検索されます。ファイルが存在した場合は、そのファイルが使用されます。存在しない場合は、COBOL のシステムディレクトリ、 $COBDIR で検索されます。

cobol.dir ファイルに指定された指令がコンパイラに拒否された場合は、コンパイルは継続されますが、コマンド行で指定した指令、またはコマンド行で指定した指令ファイルの指令が拒否された場合は、コンパイルが終了します。そのため、cobol.dir ファイルを作成、または変更する場合は、最初に試しのコンパイルを実行し、「拒否された」メッセージを確認してください。拒否メッセージが表示された場合は cobol.dir ファイルを修正し、再度コンパイルします。エラーが出なくなるまでこの作業を繰り返してください。

9.2.6.2.2 $SET 文

多くのコンパイラ指令は、プログラムソースコード内で $SET 文を使用して指定することができます。このようにして指定されたコンパイラ指令で、$COBDIR/etc/cobopt または COBOPT に指定されているオプションを補足、または上書きできます。ただし、生成フェーズの指令は $SET 文を使用して指定することはできません。

$SET 文は、7 桁目に $ 文字を記述し、次の形式で指定します。

$SET directive["parameter"] ... 

パラメータの内容は次の通りです。

directive 『コンパイラへの指令』の章で説明しているコンパイラ指令のうち、フェーズ欄に「構文チェック」と記されている指令のいずれかを指定します。生成フェーズの指令は指定できません (フェーズ欄に「生成」と記されている指令)。
parameter directive の修飾語です。次のいずれかの形式で指定します。

"parameter"

または

(parameter)

parameter の前に等号 (=) を指定する形式は、$SET 文では使用できません。parameter に空白文字を含める場合は、二重引用符 ("") で囲む形式でなければなりません。かっこ ( ) で囲む形式では、空白文字を含めることができません。

... 同じ形式で、コンパイラ指令を更に後に指定できることを示します。

$ 文字は 7 桁目に記述する必要があります。7 桁目以外の場所に指定しても、コンパイラで認識されず、無意味なエラーメッセージが生成される可能性があります。ソースファイルの最初に指定する文字がコンパイラで認識されない場合は、いずれも同様のエラーが生成されます。また、$SET 文はの終わりにピリオド (.) をつけないでください。

複数の指令を指定する場合は、各指令を空白文字で区切る必要があります。$SET 文は、複数行にわたって指定することはできませんが、後に $SET 文を追加することができます。

作成したソースコードに、複数の $SET 文を指定することができます。$SET 文は、コード内のどこにでも指定することができます。方言制御用のコンパイラオプション、たとえば、ANS85 を指定する場合は、最初の $SET 文に指定する必要があります。つまり、ソースファイル内で、他の $SET 文を除いたどのソース文よりも先にこの文が処理されるようにします。方言制御用のオプションは、一旦ソースコードの先頭に指定すると、プログラム内で後からこの設定を解除することはできません。最初の $SET 以外の $SET に設定した指令は、その指令が設定された $SET 以降のコンパイルで有効になります。

『コンパイラへの指令』の章に、$SET 文に指定できるコンパイラ指令と、最初の $SET 文にのみ指定できる指令を区別して表示しています。

次に示す例は、どちらも同じ意味になります。この例ではどちらも、すべてのファイルのデータ名への割り当ては、外部的に解決されるものとし、コンパイル対象プログラム内の機能のうち、COBOL 言語の ANSI'85 方言に存在しないものにフラグを立てるという指示をコンパイラに指定します。

$SET assign(external) flag(ans85)
$SET assign "external" flag"ans85"
9.2.6.2.3 DIRECTIVES 指令と USE 指令

DIRECTIVES、および USE コンパイラ指令を指定すると、定義済みの指令集合を指定したユーザファイルをコンパイラに渡すことができます。DIRECTIVES または USE 指令を、コマンド行、$SET 文、cobol.dir ファイル、または $COBDIR/etc/cobopt ファイルで指定することができます。ただし、生成フェーズの指令は、DIRECTIVES または USE 指令を使って指定することはできません。DIRECTIVES 指令は次の形式で指定します。

directives "filename"

USE 指令は次の形式で指定します。

use "filename"

filename の部分には、コンパイラに渡す指令集合を指定した、ユーザファイルの名前を指定します。cobol.dir または $COBDIR/etc/cobopt 以外の有効なファイル名であれば、どんな名前でも指定することができます。

指令ファイルは、複数の行から成る標準の ASCII のテキストファイルです。 各行に、1 つ以上の指令、またはコメントを記述することができます。指令ファイルの指令は、空白文字で区切る必要があり、1 つの指令を 2 行にわたって記述することはできません。注記行は、1 桁目にアンパサンド文字 (&) を入力して識別します。

指令ファイルの読み取りは、コンパイラでファイルの終わり (EOF) が検出されるか、ファイル内で DIRECTIVES または USE コンパイラ指令が検出されるまで続行されます。

指令ファイルで DIRECTIVES 指令を指定した場合は、コンパイラが指定された新しい指令ファイルを先に処理し、その後元の指令ファイルに戻ります。指令ファイルの処理が終わると、コマンド行 または $SET 文に指定された次の指令がコンパイラで処理されます。

指令ファイルに指定された指令は、DIRECTIVES 指令が指定された場所でコード化されたものとして処理されます。そのため、DIRECTIVES 指令が処理された時点で各指令に適応される制約は、そこで読み取られる指令ファイルの指令すべてにも適応されます。『コンパイラへの指令』の章も参照してください。


Copyright © 2005 Micro Focus International Limited. All rights reserved.