4.2.2 外部属性(EXTERNAL句)
EXTERNAL句を指定したデータ名やファイル名は,外部属性を持ち,COBOL実行単位内で一つの領域を共用できます。
COBOL実行環境中では,次の範囲でEXTERNAL領域を指定できます。
-
ファイル数:255個まで
-
データ領域の数:32,767まで
ファイル数,またはデータ領域の数が上限を超えた場合は,実行時エラーとなります。
EXTERNAL句については,マニュアル「COBOL2002 言語 標準仕様編」 「9.16.25 EXTERNAL句」を参照してください。
(1) 共有可能属性と共有不可能属性
外部属性を持つデータ項目には,他言語と共有できるEXTERNAL領域(共有可能属性),および他言語と共有できないEXTERNAL領域(共有不可能属性)があります。
データ項目が次に示す条件のどれかに該当する場合,共有不可能属性のEXTERNAL領域となります。
-
EXTERNAL句が指定されたデータ項目のデータ名称が日本語である
-
EXTERNAL句が指定されたデータ項目に指標名が指定されている
-
EXTERNAL句が指定されたデータ項目にDYNAMICが指定されている
-
-MultiThreadオプションが指定されている
-
EXTERNAL句が指定されたファイル記述項中に定義されたデータ項目である
共有可能属性のEXTERNAL領域に対するCOBOLとC言語との共有については,「19.1.5 外部属性を持つデータ項目の共用」を参照してください。
共有可能属性と共有不可能属性では,データ項目の初期値が異なります。
(a) 共有可能属性の初期値
-
実行可能ファイルがCOBOLだけで構成されている場合
そのEXTERNAL領域はX'00'が保証されます。
-
COBOLとCOBOL以外の言語の実行可能ファイルが混在している場合
COBOL以外の言語で,共有する領域の初期値を設定しているかどうかによって異なります。
-
すべての外部変数が初期値なしで定義されている場合,そのEXTERNAL領域の初期値はX'00'が保証されます。
-
外部変数が初期値ありで定義されている場合,そのEXTERNAL領域は定義された初期値となります(同じ外部変数に初期値ありが複数定義されている場合はリンクエラーとなります)。
-
(b) 共有不可能属性の初期値
共有不可能属性のEXTERNAL領域の初期値は不定です。
ただし,環境変数CBLEXVALUEに「NULL」を指定することで,EXTERNAL領域の初期値をNULL(X'00')に設定できます。環境変数CBLEXVALUEは,COBOLプログラムの実行によってCOBOLの実行環境中で初めて出現する共有不可能属性の各EXTERNAL領域に対して,一度だけ作用します。
環境変数CBLEXVALUEの指定方法を次に示します。
- 形式
CBLEXVALUE=NULL
- 規則
-
-
環境変数CBLEXVALUEは,作業場所節に定義されている共有不可能属性のデータ項目だけを初期化します。
-
初期値の指定に誤りがある場合,実行時エラーとなります。
-
(2) EXTERNAL領域にVARIANTデータ項目を含む場合の注意事項
EXTERNAL領域にVARIANTデータ項目を含む場合,次の規則に従って初期値(X'00')を設定しておく必要があります。
-
共有可能属性のとき
EXTERNAL領域に該当する外部変数は,他言語側で初期化なし,またはX'00'を初期値として持つ外部変数として定義します。
-
共有不可能属性のとき
環境変数CBLEXVALUEにNULLを指定します。
(3) EXTERNAL属性チェック
EXTERNAL句を指定したデータ名やファイル名がある場合,プログラムの実行時に属性チェックをします。このとき,プログラム間で属性が一致していないと実行時エラーとなります。
EXTERNAL属性チェックのチェック項目を次に示します。
(a) データ項目に対するチェック項目
-
レコード長
-
指標数
-
指標名称
-
指標の指定順序(データ項目を記述したときの指標定義の出現順序)
-
指標の最大繰り返し数
-
DYNAMIC指定の有無
(b) ファイルに対するチェック項目
-
ファイル定義名
-
ASSIGN句の内容(外部装置名または定数の内容です。データ名の場合,データ名の内容はチェックの対象外となります。)
-
OPTIONAL指定の有無
-
ACCESS MODE句の指定(アクセス法)
-
ORGANIZATION句の指定(ファイル編成)
-
RESERVE句の指定の有無,整数値
-
BLOCK CONTAINS句の指定の有無,整数2
-
CODE SET句の有無
-
LABEL RECORDS句の指定の有無,指定内容
-
LINAGE句の指定(FOOTING,TOP,BOTTOM)の有無,整数指定時の整数値
-
レコード句のVARYING IN SIZE指定の有無
-
レコード長(最小,最大)
-
主レコードキー長,主レコードキー属性,相対位置
-
副レコードキーの数,副レコードキー長,副レコードキー属性,相対位置,DUPLICATES指定の有無
-
相対キー指定の有無,最大けた数
-
SYMBOLIC KEY句の有無,最大けた数
-
コンパイラオプション
次に示すコンパイラオプションの指定の有無
-StdVersion,1,-StdVersion,2,-Switch,EBCDIC,-Switch,EBCDIK,-XMAP,LinePrint,-IsamExtend,-IsamExtend,Zone,-IgnoreLCC,-CompatiM7,-Compati85,IoStatus,-Compati85,Linage,-NumCsv
-
WRITE文の制御文字の種別(ADVANCING/POSITIONING指定の有無,AFTER/BEFORE指定の混在)
-
レコード名称
-
ファイルに記述されたレコード数
-
各レコードの指定順序,各レコードのデータ項目属性(「4.2.2 外部属性(EXTERNAL句)」の「(3) EXTERNAL属性チェック」−「(a) データ項目に対するチェック項目」を参照)
-
レコード形式
-
LOCK MODE句の指定
-
APPLY FILE-SHARE句の有無
-IgnoreAPPLY,FILESHAREオプション指定時は,覚え書きとみなし,指定なしとして扱います。
-
DATA FORMAT句の指定の有無と指定内容
-
DECIMAL-POINT IS COMMA句の有無(-NumCsvオプション指定時のCSV編成ファイルだけが対象)
-
CHARACTER TYPE句の有無(WRITE文のFROM指定の一意名,またはその下位項目にCHARACTER TYPE句が指定されている場合も含む)