COBOL2002　使用の手引　手引編

解説・手引書

3000-3-D08-20

目　　次

前書き

変更内容

はじめに

第1編　COBOL2002の概要

1.　概要

1.1　COBOL2002の概要

1.1.1　COBOLの概要

1.1.2　COBOLの特長

1.1.3　COBOL2002の機能

1.1.4　COBOL2002の製品体系

1.2　COBOL2002の構成

1.3　COBOL2002が提供するコンポーネントの種類と関連性

1.3.1　開発環境について

1.3.2　実行環境について

1.3.3　デバッグ環境について

1.3.4　オンラインマニュアルについて

2.　COBOL2002の主な新機能

2.1　オブジェクト指向機能

2.2　共通例外処理

2.3　翻訳指令

2.3.1　規格の互換性をチェックする翻訳指令

2.3.2　ソース原文の正書法を決定する翻訳指令

2.3.3　条件翻訳に関連する翻訳指令

2.3.4　コンパイルリストに関連する翻訳指令

2.3.5　例外処理に関連する翻訳指令

2.4　TYPEDEF句とSAME AS句

2.4.1　TYPEDEF句

2.4.2　SAME AS句

2.5　利用者定義関数

2.5.1　利用者定義関数の参照

2.5.2　利用者定義関数の引数と返却項目

2.6　再帰呼び出し

2.7　局所場所節

2.8　自由形式のソース原文や登録集原文

第2編　COBOLプログラムの書き方

3.　翻訳グループを構成する定義の種類

3.1　翻訳グループの概要と考え方

3.2　定義の種類

3.2.1　プログラム定義

3.2.2　関数定義

3.2.3　クラス定義

3.2.4　インタフェース定義

4.　COBOLプログラムのデータ領域

4.1　データ領域の種類

4.1.1　連絡節のデータ領域

4.1.2　作業場所節のデータ領域

4.1.3　局所場所節のデータ領域

4.1.4　その他の節のデータ領域

4.2　データ属性の種類

4.2.1　大域属性（GLOBAL句）

4.2.2　外部属性（EXTERNAL句）

第3編　手続き文

5.　手続き文

5.1　概要

5.1.1　基本的な内部操作手続き文

5.1.2　条件式

5.1.3　中間結果の作成条件

5.1.4　CORRESPONDING指定

5.2　算術演算機能

5.2.1　算術演算機能の特徴

5.2.2　算術文

5.2.3　有効けた数

5.2.4　演算の中間結果

5.3　文字列操作文

5.3.1　STRING文

5.3.2　UNSTRING文

5.3.3　INSPECT文

5.4　条件分岐文

5.4.1　EVALUATE文

5.4.2　IF文

5.5　表操作

5.5.1　SEARCH文

5.6　手続き分岐

5.6.1　GO TO文

5.6.2　PERFORM文

5.6.3　CONTINUE文

5.7　データ転記文

5.7.1　INITIALIZE文

5.7.2　MOVE文

5.7.3　SET文

第4編　入出力機能

6.　ファイル入出力機能

6.1　ファイル入出力機能の種類と概要

6.1.1　使用できるファイル編成

6.1.2　使用できるファイル形式

6.2　ファイル割り当ての共通規則

6.2.1　定数指定

6.2.2　環境変数指定

6.2.3　データ名指定

6.3　入出力エラー処理

6.3.1　入出力エラー処理の概要

6.3.2　入出力状態の値

6.3.3　USE手続き

6.3.4　ファイル入出力文でのエラー情報出力機能（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

6.3.5　ファイル属性の整合性チェック

6.4　順編成ファイル

6.4.1　ファイルの作成と割り当て方法

6.4.2　順編成ファイルの行制御

6.5　相対編成ファイル

6.5.1　ファイルの作成と割り当て方法

6.6　ISAMによる索引編成ファイル

6.6.1　ファイルの作成と割り当て方法

6.6.2　ファイル編成とレコード形式

6.6.3　コンパイル，リンクの指定

6.7　テキスト編成ファイル

6.7.1　ファイルの作成と割り当て方法

6.7.2　テキスト編成ファイルのファイル編成とレコード形式

6.7.3　入出力手続き文と動作

6.7.4　規則

6.7.5　レコード末尾の空白文字を出力する機能（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

6.8　CSV編成ファイル（表計算プログラムファイル）

6.8.1　ファイルの作成と割り当て方法

6.8.2　CSV編成ファイルのファイル編成とレコード形式

6.8.3　入出力手続き文と動作

6.8.4　注意事項

6.8.5　セルデータを数値として入出力する機能

6.8.6　セルデータをダブルコーテーションで囲まないで出力する機能

6.8.7　入力時の未使用項目の初期化機能

6.8.8　データの後の空白文字を出力する機能

6.8.9　セルデータをタブ文字区切りで入出力する機能

6.9　HiRDBによる索引編成ファイル（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC)で有効）

6.9.1　プログラムの作成方法

6.9.2　ファイルの作成と割り当て方法

6.9.3　ファイル編成とレコード形式

6.9.4　HiRDBの定義とCOBOLの定義の関連性

6.9.5　HiRDBによる索引編成ファイル固有の機能と相違点

6.9.6　プログラムのコンパイルと実行

6.9.7　プログラム作成時の留意点

6.10　ラージファイル入出力機能

6.10.1　ラージファイル入出力機能の概要

6.10.2　ラージファイル入出力機能でのファイルの共用

6.10.3　ネットワークファイルシステムでのラージファイルの動作

6.10.4　ラージファイル入出力機能の制限事項

6.11　ファイル入出力拡張機能

6.11.1　ファイルサイズがレコード長の整数倍でない固定長形式の順ファイルの入出力

6.11.2　ファイルバッファサイズ指定機能（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

7.　ファイル共用（ファイルシェア）

7.1　ファイル共用（ファイルシェア）の概要

7.2　ファイル共用の詳細

7.2.1　ファイルレベルのファイル共用

7.2.2　レコードレベルのファイル共用

7.2.3　ファイルの排他・共用の区別

7.2.4　各実行単位の施錠形式

7.2.5　ファイル共用を省略した場合の処理

7.2.6　ラージファイル入出力機能でのファイルの共用

7.2.7　ネットワーク上のファイルを使用する場合の注意事項

8.　プリンタへのアクセス

8.1　プリンタアクセスの種類と概要

8.2　プリンタアクセスの共通規則

8.2.1　ファイル割り当て

8.2.2　入出力手続き文と動作

8.2.3　行制御出力

8.2.4　実行時環境変数で行制御を操作する方法

8.3　入出力エラー処理

8.4　XMAP3による印刷（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）

8.4.1　前提条件とプログラムの作成方法

8.4.2　プリンタへの出力と割り当て方法

8.4.3　出力形態とレコード形式

8.4.4　入出力手続き文と動作

8.4.5　書式オーバレイの出力方法

8.4.6　XMAP3による印刷モードの注意事項

9.　報告書作成機能

9.1　報告書作成機能の概要

9.2　ファイル割り当ての共通規則

9.3　入出力エラー処理

9.3.1　USE手続き

9.4　ファイルの作成と割り当て方法

9.5　ファイル編成とレコード形式

9.6　報告書ファイルの出力

9.7　報告書ファイルの入力

10.　ACCEPT／DISPLAY／STOP文による入出力

10.1　ACCEPT／DISPLAY／STOP文による入出力の種類と概要

10.2　少量入出力

10.2.1　入出力の対象とするファイルの割り当て方法

10.2.2　外部からのデータを入力するACCEPT文

10.2.3　日付や時刻を取得するACCEPT文

10.2.4　DISPLAY文によるデータの出力

10.2.5　システム入出力関数レベルの指定

10.2.6　STOP文

10.3　コマンド行へのアクセス

10.3.1　コマンド行へのアクセスの種類と概要

10.3.2　引数を個別に取得する方法

10.3.3　引数を一括して取得する方法

10.4　環境変数へのアクセス

10.5　COBOLログファイル出力機能

10.5.1　COBOLログファイル出力機能の概要

10.5.2　COBOLログファイルの出力形式

11.　整列併合機能

11.1　使用できるファイル

11.2　ファイルの割り当て

11.2.1　入出力用ファイル

11.2.2　整列作業用ファイル

11.2.3　注意事項

11.3　使用するメモリサイズ

11.3.1　整列処理のメモリサイズ

11.3.2　併合処理のメモリサイズ

11.4　使用できる特殊レジスタ

11.4.1　特殊レジスタの種類

11.4.2　SORT-RETURN特殊レジスタ

11.4.3　SORT-CORE-SIZE特殊レジスタ

11.5　注意事項

11.5.1　処理時間の短縮

11.5.2　その他の注意事項

12.　画面入出力機能（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Solaris(SPARC)で有効）

12.1　通信節による画面機能（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）

12.1.1　機能の概要

12.1.2　画面に対する入出力

12.1.3　仮想端末の共用

12.1.4　プリンタに対する帳票出力

12.2　画面節（SCREEN SECTION）による画面機能

12.2.1　画面の種類と構成

12.2.2　キーの機能

12.2.3　LINE／COLUMN句を使用した画面の座標指定

12.2.4　CRT STATUS句を使用したファンクションキー入力結果の取得

12.2.5　注意事項

12.3　画面節（WINDOW SECTION）による画面機能

12.3.1　画面の種類と構成

12.3.2　データの表示形式

12.3.3　データの入力方式

12.3.4　キーの機能

12.3.5　ポップアップ画面入出力機能

12.3.6　ユーザポップアップHELP機能

12.3.7　注意事項

12.4　リソース一覧

13.　COBOL入出力サービスルーチン

13.1　COBOL入出力サービスルーチンの概要

13.1.1　概要

13.1.2　COBOL入出力サービスルーチンが対応している機能

13.2　COBOL入出力サービスルーチンの説明

13.3　COBOL入出力サービスルーチンのインタフェース

13.3.1　サービスルーチンを呼び出す関数の形式

13.3.2　インタフェース領域の形式

13.4　リンクの指定

13.5　デバッグ情報の取得

13.5.1　COBOL入出力サービスルーチンで出力されるエラーメッセージ番号

13.5.2　インタフェース領域のダンプ出力

13.6　COBOL入出力サービスルーチンでのディスク書き込み保証

13.6.1　ファイルごとに指定する方法

13.6.2　プロセス内のすべてのファイルに対して指定する方法

13.6.3　CBLWDISKサービスルーチンを呼び出して保証する方法

13.6.4　注意事項

13.7　COBOL入出力サービスルーチンでのラージファイル入出力機能

13.7.1　ラージファイル入出力機能の指定方法

13.7.2　管理情報インタフェース領域の指定

13.7.3　注意事項

13.8　COBOL入出力サービスルーチンの使用例

13.9　注意事項

14.　ファイルのディスク書き込み保証

14.1　ファイルのディスク書き込み保証

14.1.1　対象となるファイル

14.1.2　ファイルクローズ時のディスク書き込み保証の指定方法

14.1.3　ファイル書き込み時のディスク書き込み保証の指定方法

14.1.4　整列併合機能の出力ファイルに対するディスク書き込み保証

14.1.5　注意事項

15.　バイトストリーム入出力サービスルーチン（UNIX32，HP-UX(IPF64)，AIX(64)，Linux(x64)で有効）

15.1　バイトストリーム入出力サービスルーチンの概要

15.2　バイトストリーム入出力サービスルーチンの説明

15.2.1　CBLSTMCLOSE

15.2.2　CBLSTMCREATE

15.2.3　CBLSTMOPEN

15.2.4　CBLSTMREAD

15.2.5　CBLSTMWRITE

15.3　使用例

15.4　バイトストリーム入出力サービスルーチンでのラージファイル入出力機能（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

15.4.1　ラージファイル入出力機能の指定方法

15.4.2　ラージファイル入出力機能を使用したときのバイトストリーム入出力サービスルーチン引数の上限値

15.4.3　注意事項

15.5　バイトストリーム入出力サービスルーチンでのディスク書き込み保証機能（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

第5編　COBOL実行単位と連絡

16.　COBOLの実行単位

16.1　実行単位の構成

16.2　引数の受け取りと外部スイッチ

16.2.1　コマンド行に指定する引数の形式

16.2.2　引数の受け取り方法（C言語インタフェースに従った形式の場合）

16.2.3　引数の受け取り方法（VOS3インタフェースに従った形式の場合）

16.2.4　外部スイッチ

16.3　COBOL実行単位の終了

16.3.1　実行単位の終了方法

16.3.2　実行単位の終了コード

17.　プログラム間の引数と返却項目

17.1　引数の受け渡し

17.1.1　引数の受け渡しの種類

17.1.2　使用例

17.1.3　引数の受け渡しの規則

17.2　復帰コードと返却項目

17.2.1　復帰コードと返却項目の使用方法

18.　プログラムの呼び出し

18.1　プログラム呼び出しの種類と概要

18.1.1　定数指定のCALL文

18.1.2　一意名指定のCALL文

18.2　プログラムの取り消し

18.2.1　取り消し対象のプログラム

18.2.2　取り消しで解放される資源

18.2.3　取り消し後の呼び出し

18.3　COBOL主プログラムと副プログラム

18.3.1　COBOLプログラムを主プログラムとして動作させる場合

18.3.2　COBOLプログラムを副プログラムとして動作させる場合

18.4　プログラム属性

18.4.1　プログラム属性

18.5　静的なリンクと動的なリンク

18.6　共用ライブラリに含まれるプログラムの呼び出しと共用ライブラリのアンロード

18.6.1　共用ライブラリの概要

18.6.2　共用ライブラリに含まれるプログラムの呼び出し方法

18.6.3　動的なリンクのプレロード機能（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

18.6.4　動的なリンクのプログラム検索トレース機能（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

18.6.5　共用ライブラリのアンロード

18.7　実行可能ファイルの呼び出し

18.7.1　実行可能ファイル呼び出しの概要

18.7.2　実行方式

18.7.3　実行可能ファイルの指定

18.7.4　引数の受け渡し

18.7.5　実行可能ファイルの終了コードの取得

18.7.6　実行可能ファイルを呼び出す場合の注意事項

19.　他言語とのプログラム間連絡

19.1　C言語との連携

19.1.1　概要

19.1.2　CプログラムからCOBOLプログラムを呼び出す方法

19.1.3　COBOLプログラムからCプログラムを呼び出す方法

19.1.4　注意事項

19.1.5　外部属性を持つデータ項目の共用

19.1.6　COBOLプログラムとCプログラムのリンク方法

第6編　オブジェクト指向機能

20.　オブジェクト指向機能

20.1　オブジェクト指向の紹介

20.1.1　ソフトウェア開発の現状

20.1.2　オブジェクト指向

20.2　COBOL2002でのオブジェクト指向機能

20.2.1　オブジェクト指向機能による定義

20.2.2　インスタンスオブジェクトの生成と消滅

20.2.3　メソッドの呼び起こし（メッセージパッシング）

20.2.4　オブジェクトプロパティ

20.2.5　オブジェクト指向による継承

20.2.6　オブジェクト指向でのインタフェース

20.2.7　オブジェクト指向による適合

20.2.8　オブジェクト指向によるポリモルフィズム

20.2.9　オブジェクト指向機能でのマルチスレッド対応

第7編　例外処理

21.　共通例外処理

21.1　共通例外処理の概要

21.1.1　共通例外の仕組みと使用する用語

21.1.2　共通例外処理の機能

21.1.3　共通例外処理の使用例

21.1.4　共通例外処理に対応している機能

21.2　例外

21.2.1　例外名

21.2.2　例外オブジェクト

21.2.3　例外の致命度

21.2.4　最新例外状態

21.3　TURN指令

21.3.1　TURN指令によるチェック

21.3.2　TURN指令の有効範囲

21.3.3　例外チェックが無効な場合の動作

21.4　共通例外の宣言手続き

21.4.1　実行される宣言手続き

21.4.2　宣言手続きからの復帰

21.5　例外の伝播

21.5.1　PROPAGATE指令による例外の自動伝播

21.5.2　EXIT文，GOBACK文のRAISING指定による例外の伝播

21.5.3　例外を受け取れないプログラムに例外を伝播させた場合の動作

21.6　明示的な例外の引き起こし

21.7　例外情報の参照

21.7.1　組み込み関数を使用した例外情報の参照

21.7.2　EXCEPTION-OBJECT

21.7.3　最新例外状態のクリア

21.8　例外の検出条件

21.8.1　例外が検出される文の詳細

21.8.2　例外検出での注意事項

21.8.3　例外処理の動作

21.9　共通例外処理の注意事項

21.9.1　共通例外処理を使用した場合の性能について

21.9.2　従来形式の例外処理と共通例外処理の関係

第8編　DB／DC連携

22.　データコミュニケーション機能（UNIX32，AIX(64)，Linux(x64)，Linux(IPF64)で有効）

22.1　データコミュニケーション機能の概要

22.2　DCシミュレーション

22.3　データコミュニケーション機能を使用したCOBOLプログラムの例

23.　データベース操作機能（Linux(x86)，Linux(x64)で有効）

23.1　データベースアクセス機能

23.1.1　埋め込みSQL文を使ったCOBOLプログラムの作成

23.1.2　プログラムの例

23.2　ODBCインタフェース機能の概要

23.2.1　ODBCインタフェース機能が動作する環境

23.2.2　コンパイル

23.2.3　SQL文のエラー処理

23.2.4　埋め込み変数

23.2.5　トランザクション

23.2.6　コネクション

23.2.7　タイムアウト秒数の設定

23.2.8　カーソルオプションの設定

23.2.9　データベース固有の注意事項

23.2.10　動的SQLのODBC API関数発行の変更

24.　XDMによるデータベース操作シミュレーション機能

24.1　データベース操作シミュレーションの概要

24.2　構造型データベース（XDM/SD）操作シミュレーション

24.3　リレーショナルデータベース（XDM/RD）操作シミュレーション

第9編　多様なCOBOLプログラムの作成

25.　CGIプログラム作成支援機能（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）

25.1　CGIプログラム作成支援機能の概要

25.1.1　概要

25.1.2　CGIプログラムが動作するのに必要な環境

25.1.3　CGIプログラム作成支援機能が提供する機能

25.2　CGIプログラムの種類と作成方法

25.2.1　スタティック型CGIプログラムの作成方法

25.2.2　インタプリット型CGIプログラムの作成方法

25.2.3　ダイナミック型CGIプログラムの作成方法

25.2.4　CGIプログラムのコンパイル，およびリンク方法

25.3　フォーム情報の取得とCGIリスト

25.3.1　CGIリストの概要

25.3.2　CGIリストのデータとCOBOLのデータ記述

25.3.3　CGIリストの作成と編集

25.4　CGI環境変数へのアクセス

25.5　HTMLファイルをCOBOLソースファイルに変換する方法

25.5.1　HTMLトランスレータを使ったHTMLファイルの変換

25.5.2　ccbl2002コマンドからのHTMLファイルの変換

25.6　HTMLテンプレート機能

25.6.1　HTMLテンプレート機能の概要

25.6.2　HTML拡張言語の文法

25.7　CGIプログラムの作成を支援するサービスルーチン

25.7.1　サービスルーチンの一覧

25.7.2　サービスルーチンの説明

25.7.3　サービスルーチンに関する注意事項

25.8　起動ファイルの作成方法

25.9　実行時エラーメッセージの取得方法

25.10　CGIプログラムのデバッグ

25.10.1　Webサーバを使用しない方法

25.10.2　Webサーバを使用する方法

25.11　注意事項

25.11.1　CGIプログラムを作成する場合の注意点

25.11.2　出力文字に関する注意点

26.　マルチスレッド環境での実行

26.1　マルチスレッド対応COBOLプログラムの概要

26.2　マルチスレッド対応COBOLプログラムの生成

26.2.1　マルチスレッド対応COBOLプログラムのコンパイル

26.2.2　マルチスレッド対応COBOLプログラムのリンク

26.3　整列併合機能を使用したマルチスレッド対応COBOLプログラムのリンク

26.4　索引ファイル機能を使用したマルチスレッド対応COBOLプログラムのリンク

26.5　マルチスレッド対応COBOLプログラムが対応している機能

26.6　マルチスレッド対応COBOLプログラムの開始と終了

26.7　実行時エラーが発生したときの動作

26.8　環境変数の取り扱い

26.8.1　スレッドごとに固有の出力ファイル名称を付ける機能

26.8.2　スレッドごとに環境変数を設定する機能

26.9　マルチスレッド対応COBOLプログラムのデバッグ

26.9.1　マルチスレッド対応COBOLプログラムのデバッグ

26.9.2　実行時デバッグ機能

26.10　マルチスレッド対応COBOLプログラムを使用する上での注意事項

26.10.1　EXTERNAL句を用いたデータの共用

26.10.2　呼び出してはいけないサービスルーチン

26.10.3　共用ライブラリがメモリ上から削除される条件

27.　Unicode機能（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

27.1　Unicode機能の概要

27.2　Unicode機能のサポート範囲

27.3　Unicode機能の前提条件

27.4　Unicode機能の詳細

27.4.1　コンパイル

27.4.2　実行

27.5　Unicodeに対応する機能

27.5.1　基本機能

27.5.2　入出力機能

27.5.3　CBLNCNVサービスルーチン

27.5.4　組み込み関数（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

27.6　入出力情報と取り扱う文字コード

27.7　Unicode機能での制限事項

27.7.1　Unicodeに対応していない機能

27.7.2　コンパイル時の制限事項

27.7.3　実行時の制限事項

28.　数字項目のけた拡張機能（HP-UX(IPF64)，AIX(64)，Linux(x64)で有効）

28.1　数字項目のけた拡張機能の概要

28.1.1　概要

28.1.2　数字項目のけた拡張機能で必要なコンパイラオプション

28.2　数字項目のけた拡張機能の詳細

28.2.1　数字項目のけた拡張機能で対象となるデータ項目

28.2.2　数字項目のけた拡張機能で対象となる定数

28.2.3　数字項目のけた拡張機能での有効けた数

28.3　数字項目のけた拡張機能での演算の中間結果

28.3.1　演算の中間結果

28.3.2　10進浮動小数点形式について

28.4　数字項目のけた拡張機能に対応する機能一覧

28.4.1　数字項目のけた拡張機能で対象となる機能

28.4.2　数字項目のけた拡張機能で対象となるソース単位

28.4.3　数字項目のけた拡張機能で対象となる節や文

28.5　数字項目のけた拡張機能の注意事項

第10編　サービスルーチン

29.　サービスルーチン

29.1　サービスルーチンの概要

29.2　戻り値の使い方

29.3　サービスルーチン使用時の注意事項

29.4　プログラム実行制御

29.4.1　CBLEND

29.4.2　CBLABN

29.4.3　CBLARGC

29.4.4　CBLARGV

29.5　ダイアログボックス／ウィンドウ

29.5.1　JCPOPUP（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Solaris(SPARC)で有効）

29.6　デバッグ機能

29.6.1　CBLDATADUMP（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

29.7　変換・転記・演算

29.7.1　CBLNCNV

29.7.2　CBLUBIT

29.8　データベース操作機能

29.8.1　CBLSQLERROR（Linux(x86)，Linux(x64)で有効）

29.9　XMAP3を使用した画面・帳票関連

29.9.1　CBLXMAPERROR（AIX(32)で有効）

第11編　プログラム作成上の留意点

30.　プログラミング上の留意点

30.1　処理速度の速いプログラムの作成

30.1.1　チェック項目一覧

30.1.2　チェック項目の説明

30.2　移植性の良いプログラムの作成

30.2.1　チェック項目一覧

30.2.2　チェック項目の説明

30.3　COBOLプログラムが使用するスタック領域

30.3.1　スタック領域に配置されるデータ

30.3.2　プログラム実行時呼び出し関係に依存するスタック領域の消費量

30.3.3　スタック領域のサイズ変更方法

31.　最適化機能

31.1　最適化のレベル

31.1.1　最適化オプションの種類

31.2　最適化の内容

31.2.1　そとPERFORM文のインライン展開

31.2.2　10進項目の2進項目化

31.2.3　不変式のループ外移動

31.2.4　コピー伝播

31.2.5　共通式の削除

31.2.6　定数の畳み込み

31.2.7　演算強さの軽減

第12編　コンパイルと実行

32.　COBOLソースの作成とコンパイル

32.1　コンパイル時の主な入出力ファイル

32.2　COBOLソースの作成方法

32.2.1　ソースファイル名と拡張子

32.2.2　原始プログラムの作成規則

32.2.3　正書法

32.3　さまざまな形態のCOBOL原始プログラムのコンパイル

32.3.1　原始文操作機能

32.3.2　スタックコンパイル機能（連続コンパイル機能）の利用

32.3.3　条件翻訳の利用

32.3.4　条件翻訳結果のコンパイルリスト

32.4　コンパイラの起動方法

32.4.1　ccbl2002コマンド

32.4.2　ccblコマンド（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC)で有効）

32.5　コンパイラオプション

32.5.1　構文規則

32.5.2　一般規則

32.5.3　コンパイラオプションの優先順位

32.5.4　コンパイラオプションの一覧

32.5.5　最終生成物の種類の設定

32.5.6　他製品との連携の設定

32.5.7　実行の設定

32.5.8　プログラムの最適化の設定

32.5.9　デバッグの設定

32.5.10　リンクの設定

32.5.11　規格の設定

32.5.12　他システムとの移行の設定

32.5.13　リスト出力の設定

32.5.14　その他の設定

32.6　コンパイラ環境変数

32.6.1　コンパイラ環境変数の設定方法

32.6.2　コンパイラ環境変数の一覧

32.6.3　コンパイラ環境変数の詳細

32.7　コンパイラ付属機能

32.7.1　TDコマンド生成機能

32.7.2　makefile生成機能

32.7.3　ヘルプ機能

33.　定義別のコンパイル方法とリポジトリファイル

33.1　リポジトリファイルを使用するCOBOLプログラム開発の概要

33.1.1　概要

33.1.2　リポジトリファイルを使用するCOBOLプログラムの作成手順

33.1.3　リポジトリファイルに格納される情報と適合チェック

33.2　リポジトリファイル

33.2.1　リポジトリファイルの生成とコンパイル時の利用

33.2.2　ソースファイル，リポジトリファイル，およびリポジトリ段落の関係

33.2.3　リポジトリファイルの生成方法

33.2.4　リポジトリファイルの参照方法

33.3　リポジトリ段落を指定したソースファイルのコンパイル方法

33.3.1　リポジトリ段落でほかの翻訳単位を参照する場合のコンパイル

33.3.2　リポジトリファイルの単独生成

33.3.3　プログラム定義だけのコンパイル

33.4　リポジトリファイルの管理

33.4.1　外部リポジトリに関連したコンパイルエラー発生時の対処方法

33.4.2　リポジトリ管理ツール

33.5　リポジトリファイルの生成に関連するコンパイラオプション

34.　実行可能ファイルと共用ライブラリの作成

34.1　実行可能ファイルの作成方法

34.1.1　コンパイルとリンクを同時に実行する方法

34.1.2　コンパイルとリンクを別々に実行する方法

34.1.3　ccbl2002コマンドの-lオプション

34.1.4　ccbl2002コマンド使用時の検索ライブラリの種別指定

34.1.5　ccコマンドおよびldコマンドの-lオプション

34.2　共用ライブラリの作成方法

34.2.1　共用ライブラリの作成

35.　プログラムの実行

35.1　実行可能ファイルの起動方法

35.2　画面環境の設定（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Solaris(SPARC)で有効）

35.3　プログラムの実行環境の設定

35.3.1　実行時環境変数の設定方法

35.3.2　実行時環境変数の一覧

35.3.3　一般

35.3.4　少量データ

35.3.5　ファイル

35.3.6　画面（XMAP）（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）

35.3.7　整列併合

35.3.8　拡張機能

35.3.9　デバッグ

35.3.10　オブジェクト指向

第13編　デバッグ

36.　アプリケーションデバッグ機能

36.1　デバッグ機能の種類と概要

36.2　異常終了時要約情報リスト

36.2.1　異常終了時要約情報リストの内容

36.2.2　トレースバック表示

36.2.3　環境変数情報表示

36.2.4　異常終了時要約情報リストの出力先

36.2.5　プログラム混在時のリストの内容

36.3　データ領域ダンプリスト

36.3.1　データ領域ダンプリストの内容

36.3.2　データ領域ダンプリストの出力先

36.4　データ領域ダンプリスト出力情報の選択

36.5　プログラム間整合性チェック

36.5.1　整合性チェックの内容

36.5.2　整合性チェックの警告エラー出力

36.6　添字，指標の繰り返し回数，制御変数チェック

36.7　データ例外検出機能

36.8　コアダンプの出力

36.9　シグナル

36.10　DISPLAY文による一意名の16進ダンプ表示（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

36.11　テストデバッグ機能

36.12　カバレージ機能

第14編　64bitアプリケーションの作成

37.　64bitアプリケーションの作成

37.1　UNIX64 COBOL2002について

37.1.1　使用できない機能

37.1.2　UNIX64 COBOL2002固有の言語仕様

37.1.3　UNIX64 COBOL2002各機能の固有仕様

37.2　COBOLソースの作成とコンパイル

37.3　プログラムの実行

37.3.1　プログラムの実行環境の設定

37.3.2　プログラムの実行時の注意事項

37.4　実行可能ファイルと共用ライブラリの作成

37.4.1　実行可能ファイルと共用ライブラリの作成時の注意事項

第15編　Linux(x86) COBOL2002，Linux(x64) COBOL2002でのUTF-8ロケールの対応

38.　Linux(x86) COBOL2002，Linux(x64) COBOL2002でのUTF-8ロケールの対応

38.1　Linux(x86) COBOL2002，Linux(x64) COBOL2002について

38.1.1　動作環境

38.1.2　使用できる機能

38.1.3　使用できるサービスルーチン

38.2　コンパイル時の注意事項

38.3　実行可能ファイルと共用ライブラリの作成時の注意事項

38.4　実行時の注意事項

付録

付録A　COBOLで使用する文字集合

付録A.1　概要

付録A.2　シフトJISの場合

付録A.3　EUCの場合

付録A.4　Unicodeの場合

付録B　日立COBOL85からの古い仕様

付録B.1　COBOL85移行用コンパイラオプション

付録C　コンパイルリスト

付録C.1　リストの出力

付録C.2　リストの見方

付録D　COBOLで使用するファイル

付録D.1　COBOL2002で使用するファイル

付録D.2　COBOLプログラムの実行時に必要なファイル

付録E　コンパイラの制限値

付録F　入出力状態の値

付録G　COBOL85とCOBOL2002のコンパイラオプションの対応

付録H　サービスルーチンのリソース一覧

付録I　各バージョンの変更内容

付録J　このマニュアルの参考情報

付録J.1　関連マニュアル

付録J.2　このマニュアルでの表記

付録J.3　英略語

付録J.4　KB（キロバイト）などの単位表記について

付録K　用語解説

索引

[商品名称に関する表示]

All Rights Reserved. Copyright (C) 2014, 2017, Hitachi, Ltd.

前書き

■ 対象製品

P-1M36-1131　 COBOL2002 Net Server Suite※1　 03-05（適用OS：AIX V6.1，AIX V7.1，AIX V7.2）
P-1M36-2131　 COBOL2002 Net Server Runtime※1　 03-05（適用OS：AIX V6.1，AIX V7.1，AIX V7.2）
P-1M36-1231　 COBOL2002 Net Server Suite(64)　 03-05（適用OS：AIX V6.1，AIX V7.1，AIX V7.2）
P-1M36-2231　 COBOL2002 Net Server Runtime(64)　 03-05（適用OS：AIX V6.1，AIX V7.1，AIX V7.2）
P-9S36-1131　 COBOL2002 Net Server Suite※1※2　 03-05（適用OS：Linux 5 AP (x86)，Linux 5 AP (AMD/Intel 64)※3，Linux Server 6 (32-bit x86)，Linux Server 6 (64-bit x86_64)，Linux Server 7 (64-bit x86_64)）
P-9S36-2131　 COBOL2002 Net Server Runtime※1※2　 03-05（適用OS：Linux 5 AP (x86)，Linux 5 AP (AMD/Intel 64)※3，Linux Server 6 (32-bit x86)，Linux Server 6 (64-bit x86_64)，Linux Server 7 (64-bit x86_64)）
P-9W36-1231　 COBOL2002 Net Server Suite(64)※2　 03-05（適用OS：Linux 5 AP (AMD/Intel 64)※3，Linux Server 6 (64-bit x86_64)，Linux Server 7 (64-bit x86_64)）
P-9W36-2231　 COBOL2002 Net Server Runtime(64)※2　 03-05（適用OS：Linux 5 AP (AMD/Intel 64)※3，Linux Server 6 (64-bit x86_64)，Linux Server 7 (64-bit x86_64)）

注※1　Cosminexus連携機能は，AIX(64) COBOL2002およびLinux(x64) COBOL2002でだけサポートします。AIX(32) COBOL2002およびLinux(x86) COBOL2002ではサポートしません。
注※2　XML連携機能は，Linux Server 6 (32-bit x86)，Linux Server 6 (64-bit x86_64)，Linux Server 7 (64-bit x86_64)でだけサポートします。
注※3　AMD64には対応していません。
これらのプログラムプロダクトのほかにもこのマニュアルをご利用になれる場合があります。詳細は「リリースノート」でご確認ください。
COBOL2002は，COBOL2002規格（ISO/IEC 1989:2002）の主な機能に対応しています。COBOL85互換機能（コンパイラオプション）指定時，COBOL2002は，COBOL85規格（ISO85，ANSI85，JIS88，JIS92）の上位水準に準拠します。

■ 輸出時の注意

本製品を輸出される場合には、外国為替及び外国貿易法の規制並びに米国輸出管理規則など外国の輸出関連法規をご確認の上、必要な手続きをお取りください。
なお、不明な場合は、弊社担当営業にお問い合わせください。

■ 商標類

HITACHI，Cosminexus，HiRDB，OpenTP1，XDM，XMAPは，株式会社 日立製作所の商標または登録商標です。
AMDは，Advanced Micro Devices, Inc.の商標です。
IBM，AIXは，世界の多くの国で登録されたInternational Business Machines Corporationの商標です。
IBM，AIX 5Lは，世界の多くの国で登録されたInternational Business Machines Corporationの商標です。
Intelは，アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
Itaniumは，アメリカ合衆国および / またはその他の国におけるIntel Corporationの商標です。
Linuxは，Linus Torvalds氏の日本およびその他の国における登録商標または商標です。
Microsoftは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
Motifは，Open Software Foundation, Inc.の商標です。
ODBCは，米国Microsoft Corporationが提唱するデータベースアクセス機構です。
OLEは，米国Microsoft Corporationが開発したソフトウェア名称です。
OracleとJavaは，Oracle Corporation 及びその子会社，関連会社の米国及びその他の国における登録商標です。
Red Hatは，米国およびその他の国でRed Hat, Inc. の登録商標もしくは商標です。
すべてのSPARC商標は，米国SPARC International, Inc. のライセンスを受けて使用している同社の米国およびその他の国における商標または登録商標です。SPARC商標がついた製品は，米国Sun Microsystems, Inc. が開発したアーキテクチャに基づくものです。
UNIXは，The Open Groupの米国ならびに他の国における登録商標です。
Windowsは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
その他記載の会社名，製品名などは，それぞれの会社の商標もしくは登録商標です。

■ 発行

2017年1月　3000-3-D08-20

■ 著作権

All Rights Reserved. Copyright (C) 2014, 2017, Hitachi, Ltd.

変更内容

変更内容（3000-3-D08-20）　COBOL2002 Net Server Suite 03-05（適用OS：AIX V6.1，AIX V7.1，AIX V7.2），COBOL2002 Net Server Runtime 03-05（適用OS：AIX V6.1，AIX V7.1，AIX V7.2），COBOL2002 Net Server Suite(64) 03-05（適用OS：AIX V6.1，AIX V7.1，AIX V7.2），COBOL2002 Net Server Runtime(64) 03-05（適用OS：AIX V6.1，AIX V7.1，AIX V7.2）

追加・変更内容
変更個所

次のOSに対応した。

AIX V7.2

－

ファイル入出力エラー処理でのファイル属性の整合性チェックに関する説明を追加した。
6.3.5

AIX(32)，AIX(64)で，HiRDBによる索引編成ファイルの内部発行されるSQL文で行値構成子を使用する機能に対応した。
これに伴い，次の実行時環境変数に対応した。

CBLRDBROWVALCONSTRUCTOR

6.9.5，35.3.2，35.3.5

AIX(32)，AIX(64)で，ISAMによる索引編成ファイルのクローズ時のディスク書き込み保証機能に対応した。
これに伴い，次の実行時環境変数に対応した。

CBLISAMFSYNC

14.1.1，14.1.2，14.1.5，35.3.2，35.3.5，付録F

AIX(32)，AIX(64)で，バイトストリーム入出力サービスルーチンのクローズ時のディスク書き込み保証機能に対応した。
これに伴い，次の実行時環境変数に対応した。

CBLSTMFSYNC

14.1.1，15.5，35.3.2，35.3.5

AIX(32)，AIX(64)で，バイトストリーム入出力サービスルーチンでのラージファイル入出力機能に対応した。
これに伴い，次の実行時環境変数に対応した。

CBLSTMLARGEFILE

15.1，15.4，35.3.2，35.3.5

AIX(32)，AIX(64)で，Unicode機能でUCS-4，サロゲートおよびIVSに対応した。
これに伴い，次の組み込み関数に対応した。

COUNT-CHAR関数

DISPLAY-OF関数

LENGTH-OF-SUBSTRING関数

NATIONAL-OF関数

SUBSTRING関数

21.8.1，27.2，27.3，27.4.2，27.5.1，27.5.4，27.7.3，37.1.2，付録K

AIX(32)で，XMAP3を使用した画面・帳票関連のエラー情報の取得に対応した。
これに伴い，次のサービスルーチンに対応した。

CBLXMAPERROR

29.1，29.9

AIX(32)，AIX(64)で，-V3Recコンパイラオプション指定時の仕様チェックを緩和する機能に対応した。
これに伴い，次のオプションに対応した。

-V3RecEased

32.5.3，32.5.4，32.5.12，付録G

AIX(32)，AIX(64)で，-Switchコンパイラオプションの次の機能に対応した。

1バイトで印字できないコードも，照合順序として固有の文字位置に割り付ける機能（Unprintableサブオプション）

日本語項目を-Switchオプションの適用対象外とする機能（noApplyJpnItemサブオプション）

32.5.4，32.5.12，付録G

AIX(32)，AIX(64)で，APPLY FILE-SHARE句を無効にする機能に対応した。
これに伴い，次のオプションに対応した。

-IgnoreAPPLY,FILESHARE

32.5.4，32.5.12，付録G

AIX(32)，AIX(64)で，HiRDBによる索引編成ファイルの「出力ファイルの高速オープン機能」で使用するファイルオプションRDBOPURGE/NORDBOPURGEに対応した。
35.3.5

AIX(32)，AIX(64)で，テストデバッグ機能でテストデバッグ実行結果およびトラブルシュート情報の出力をサポートした。これに伴い，COBOL2002で使用するファイルに「.tdo〔実行結果出力ファイル（テストデバッグ）〕」を追加した。
また，カバレージ機能で実行結果出力ファイルへのトラブルシュート情報の出力をサポートした。
付録D.1

COBOL2002 Net Server Suite 03-05（適用OS：Linux 5 AP (x86)，Linux 5 AP (AMD/Intel 64)，Linux Server 6 (32-bit x86)，Linux Server 6 (64-bit x86_64)，Linux Server 7 (64-bit x86_64)），COBOL2002 Net Server Runtime 03-05（適用OS：Linux 5 AP (x86)，Linux 5 AP (AMD/Intel 64)，Linux Server 6 (32-bit x86)，Linux Server 6 (64-bit x86_64)，Linux Server 7 (64-bit x86_64)），COBOL2002 Net Server Suite(64) 03-05（適用OS：Linux 5 AP (AMD/Intel 64)，Linux Server 6 (64-bit x86_64)，Linux Server 7 (64-bit x86_64)），COBOL2002 Net Server Runtime(64) 03-05（適用OS：Linux 5 AP (AMD/Intel 64)，Linux Server 6 (64-bit x86_64)，Linux Server 7 (64-bit x86_64)）

追加・変更内容
変更個所

ファイル入出力エラー処理でのファイル属性の整合性チェックに関する説明を追加した。
6.3.5

Linux(x86)，Linux(x64)で，ISAMによる索引編成ファイルのクローズ時のディスク書き込み保証機能に対応した。
これに伴い，次の実行時環境変数に対応した。

CBLISAMFSYNC

14.1.1，14.1.2，14.1.5，35.3.2，35.3.5，付録F

Linux(x86)，Linux(x64)で，バイトストリーム入出力サービスルーチンのクローズ時のディスク書き込み保証機能に対応した。
これに伴い，次の実行時環境変数に対応した。

CBLSTMFSYNC

14.1.1，15.5，35.3.2，35.3.5

Linux(x86)，Linux(x64)で，バイトストリーム入出力サービスルーチンでのラージファイル入出力機能に対応した。
これに伴い，次の実行時環境変数に対応した。

CBLSTMLARGEFILE

15.1，15.4，35.3.2，35.3.5

Linux(x86)，Linux(x64)で，Unicode機能でUCS-4，サロゲートおよびIVSに対応した。
これに伴い，次の組み込み関数に対応した。

COUNT-CHAR関数

DISPLAY-OF関数

LENGTH-OF-SUBSTRING関数

NATIONAL-OF関数

SUBSTRING関数

21.8.1，27.2，27.3，27.4.2，27.5.1，27.5.4，27.7.3，37.1.2，付録K

Linux(x86)，Linux(x64)で，データベース操作機能（ODBCインタフェース）に対応した。
これに伴い，次のサービスルーチン，コンパイラオプション，および実行時環境変数に対応した。
サービスルーチン

CBLSQLERROR

コンパイラオプション

-SQLDisp

-SQL,ODBC

実行時環境変数

CBLSQLCOMMOD

CBLSQLCURUSE

CBLSQLDYNAMIC

CBLSQLLOGINTIMEOUT

CBLSQLQUERYTIMEOUT

CBLSQLROWCOUNT

CBLSQLSUPPRESSMSG

CBLSQLWMSG

23.，26.5，27.5，27.5.1，29.1，29.8，32.5.3，32.5.4，32.5.6，32.5.14，34.1.3，34.1.5，35.3.2，35.3.8，付録G

Linux(x86)，Linux(x64)で，-V3Recコンパイラオプション指定時の仕様チェックを緩和する機能に対応した。
これに伴い，次のオプションに対応した。

-V3RecEased

32.5.3，32.5.4，32.5.12，付録G

Linux(x86)，Linux(x64)で，APPLY FILE-SHARE句を無効にする機能に対応した。
これに伴い，次のオプションに対応した。

-IgnoreAPPLY,FILESHARE

32.5.4，32.5.12，付録G

Linux(x86)，Linux(x64)で，テストデバッグ機能でテストデバッグ実行結果およびトラブルシュート情報の出力をサポートした。これに伴い，COBOL2002で使用するファイルに「.tdo〔実行結果出力ファイル（テストデバッグ）〕」を追加した。
また，カバレージ機能で実行結果出力ファイルへのトラブルシュート情報の出力をサポートした。
付録D.1

単なる誤字・脱字などはお断りなく訂正しました。

はじめに

このマニュアルは，次に示すプログラムプロダクトの機能と使用方法について説明したものです。

P-1M36-1131 COBOL2002 Net Server Suite

P-1M36-2131 COBOL2002 Net Server Runtime

P-1M36-1231 COBOL2002 Net Server Suite(64)

P-1M36-2231 COBOL2002 Net Server Runtime(64)

P-9S36-1131 COBOL2002 Net Server Suite

P-9S36-2131 COBOL2002 Net Server Runtime

P-9W36-1231 COBOL2002 Net Server Suite(64)

P-9W36-2231 COBOL2002 Net Server Runtime(64)

このマニュアルには，COBOL2002 V1製品であるHP-UX版/Solaris版/Linux(IPF)版の説明を残しています。

COBOL2002 V1製品の仕様は，V1製品のマニュアルおよびリリースノートでご確認ください。

なお，Linux(x86) COBOL2002，Linux(x64) COBOL2002をご使用になる場合は，初めに「38.　Linux(x86) COBOL2002，Linux(x64) COBOL2002でのUTF-8ロケールの対応」をお読みください。

対象読者

このマニュアルは，COBOL2002の機能を知りたい方，またはCOBOL2002の文法規則を機能から調べたい方を対象としています。また，COBOLの基本的な言語仕様と，UNIXの操作方法について理解していることを前提としています。

用語の定義

このマニュアルでの用語の定義を次に示します。

パス名とパスプレフィクス

パス名とパスプレフィクスは，次のとおりです。

絶対パス名

ルートディレクトリのシンボル「/」で始まるパス名。

　/ディレクトリ名/ディレクトリ名/ … /ファイル名

相対パス名

カレントディレクトリからの相対のパス名。

・カレントディレクトリの1階層上位のディレクトリを経由する場合

　../ディレクトリ名/ディレクトリ名/ … /ファイル名

・カレントディレクトリ下のディレクトリを経由する場合

　ディレクトリ名/ディレクトリ名/ … /ファイル名

絶対パスプレフィクス

ルートディレクトリのシンボル「/」で始まるパスプレフィクス。

相対パスプレフィクス

カレントディレクトリからの相対のパスプレフィクス。

このマニュアルで使用する記号

このマニュアルで使用する記号を次に示します。

記号
意味

［　］キー
文字キーやF（ファンクション）キーを意味する。

［　］+［　］キー
＋の前のキーを押したまま，あとのキーを押すことを意味する。

｛　｝
この記号で囲まれている複数の項目のうちから一つを選択することを意味する。項目が縦に複数行にわたって記述されている場合は，そのうちの1行分を選択する。

｛　｝+
この記号で囲まれている複数の項目のうちから一つを選択することを意味する。同じ要素の繰り返し指定はできないが，異なる要素であれば，複数指定できる。例えば，｛A｜B｜C｝+と表記されている場合は，A・B・Cをすべて選択してもよい。
項目が縦に複数行にわたって記述されている場合は，そのうちの1行分を選択する。

〔　〕
この記号で囲まれている項目は省略してもよいことを意味する。
複数の項目が縦または横に並べて記述されている場合には，すべてを省略するか，記号｛　｝と同じく，どれか一つを選択する。

…
記述が省略されていることを意味する。
この記号の直前に示された項目を繰り返して複数個指定できる。

下線
括弧で囲まれた複数の項目のうち1項目に対して使用され，括弧内のすべてを省略したときにシステムがとる標準値を意味する。

｜
横に並べられた複数の項目に対して項目間の区切りを示し，「または」を意味する。

［　］
ウィンドウのメニューバーから選択するメニュー，コマンド，またはボタンを意味する。

プログラム構造表記法（PAD）と流れ図

このマニュアルでは，手続き的アルゴリズムの制御構造（主にプログラムの処理手続き）をPAD（Problem Analysis Diagram）または流れ図で示しています。

このマニュアルで使用するPADと流れ図の要素，およびそれぞれの要素の対応を，次のように定義します。

ウィンドウ図

マニュアル中のウィンドウ図は，説明に直接関係のない部分を省略して記述しています。したがって，実際に操作していて表示されるウィンドウとは一部異なります。

サポート機能一覧

規格

機能 | 製品種別
F | H | A | B | J | K | L | S
基本機能 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
順編成ファイル | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
相対編成ファイル | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
索引編成ファイル | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
整列併合 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
プログラム間連絡 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
組み込み関数 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
オブジェクト指向 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
共通例外処理 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
再帰呼び出し | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
利用者定義関数 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
局所場所節(LOCAL-STORAGE SECTION) | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
原始文操作 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
自由形式正書法 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
TYPEDEF句とSAME AS句 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
翻訳指令 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
区分化※ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○

（凡例）

F：HP-UX(IPF) COBOL2002

H：HP-UX(IPF64) COBOL2002

A：AIX(32) COBOL2002

B：AIX(64) COBOL2002

J：Linux(x86) COBOL2002

K：Linux(x64) COBOL2002

L：Linux(IPF64) COBOL2002

S：Solaris(SPARC) COBOL2002

○：サポートしている

注※

覚え書きとしてサポートしている。

X/Open

機能
製品種別

F
H
A
B
J
K
L
S

テキスト編成ファイル
○
○
○
○
○
○
○
○

ファイル共用
（ファイルシェア）
順編成ファイル
○
○
○
○
○
○
○
○

相対編成ファイル
○
○
○
○
○
○
○
○

ISAMによる索引編成ファイル
○
○
○
○
○
○
○
○

テキスト編成ファイル
○
○
○
○
○
○
○
○

CSV編成ファイル
×
×
×
×
×
×
×
×

HiRDBによる索引編成ファイル
×
×
×
×
×
×
×
×

Btrieveによる索引編成ファイル
－
－
－
－
－
－
－
－

コマンド行および環境変数へのアクセス
○
○
○
○
○
○
○
○

画面節（SCREEN SECTION）による画面操作
○
○
○
○
×
×
×
○

C言語インタフェース
○
○
○
○
○
○
○
○

インターナショナリゼーション
○
○
○
○
○
○
○
○

（凡例）

F：HP-UX(IPF) COBOL2002

H：HP-UX(IPF64) COBOL2002

A：AIX(32) COBOL2002

B：AIX(64) COBOL2002

J：Linux(x86) COBOL2002

K：Linux(x64) COBOL2002

L：Linux(IPF64) COBOL2002

S：Solaris(SPARC) COBOL2002

○：サポートしている

×：サポートしていない

－：該当しない

拡張機能

機能
製品種別

F
H
A
B
J
K
L
S

日本語
○
○
○
○
○
○
○
○

ブール演算
○
○
○
○
○
○
○
○

アドレス操作
○
○
○
○
○
○
○
○

1バイト2進およびCOMP-X項目
○
○
○
○
○
○
○
○

浮動小数点項目
○
○
○
○
○
○
○
○

ISAMによる索引編成ファイル機能の拡張（合成キー，逆順読み）
○
○
○
○
○
○
○
○

CSV編成ファイル
○
○
○
○
○
○
○
○

HiRDBによる索引編成ファイル
○
○
○
○
×
×
○
○

Btrieveによる索引編成ファイル
－
－
－
－
－
－
－
－

リモートファイルアクセス
×
×
×
×
×
×
×
×

ラージファイル入出力
順編成ファイル
○
○
○
○
○
○
○
○

相対編成ファイル
×
×
×
×
×
×
×
×

ISAMによる索引編成ファイル
×
×
×
×
×
×
×
×

テキスト編成ファイル
○
○
○
○
○
○
○
○

CSV編成ファイル
○
○
○
○
○
○
○
○

HiRDBによる索引編成ファイル
×
×
×
×
×
×
×
×

Btrieveによる索引編成ファイル
－
－
－
－
－
－
－
－

COBOL入出力サービスルーチン
○
○
○
○
○
○
○
○

バイトストリーム入出力サービスルーチン
○
○
○
○
○
○
×
○

ファイル入出力拡張機能
ファイルサイズがレコード長の整数倍でない固定長形式の順ファイル入出力
○
○
○
○
○
○
○
○

ファイルバッファサイズ指定機能
○
×
○
○
○
○
×
×

画面節（WINDOW SECTION）による画面操作
画面節（WINDOW SECTION）
○
○
○
○
×
×
×
○

JCPOPUPサービスルーチン
○
○
○
○
×
×
×
○

通信節による画面操作（XMAP3）
○
×
○
×
×
×
×
○

COPY文の接頭辞／接尾辞
○
○
○
○
○
○
○
○

プリンタへのアクセス
XMAP3による印刷
○
×
○
×
×
×
×
○

GDIモード印刷
－
－
－
－
－
－
－
－

ESC/Pモード印刷
－
－
－
－
－
－
－
－

ファイルのディスク書き込み保証
（書き込み時）
順編成ファイル
○
○
○
○
○
○
○
○

相対編成ファイル
○
○
○
○
○
○
○
○

ISAMによる索引編成ファイル
○
○
○
○
○
○
○
○

テキスト編成ファイル
×
×
×
×
×
×
×
×

CSV編成ファイル
×
×
×
×
×
×
×
×

HiRDBによる索引編成ファイル
×
×
×
×
×
×
×
×

Btrieveによる索引編成ファイル
－
－
－
－
－
－
－
－

ファイルのディスク書き込み保証
（クローズ時）
順編成ファイル
○
○
○
○
○
○
○
○

相対編成ファイル
○
○
○
○
○
○
○
○

ISAMによる索引編成ファイル
×
×
○
○
○
○
×
×

テキスト編成ファイル
○
○
○
○
○
○
○
○

CSV編成ファイル
○
○
○
○
○
○
○
○

HiRDBによる索引編成ファイル
×
×
×
×
×
×
×
×

Btrieveによる索引編成ファイル
－
－
－
－
－
－
－
－

報告書作成機能
○
○
○
○
○
○
○
○

MIOS7 COBOL85との互換機能
×
×
×
×
×
×
×
×

イベントログファイル／syslogファイル出力機能
×
×
×
×
×
×
×
×

データコミュニケーション機能
○
×
○
○
○
○
○
○

データベース操作機能（ODBCインタフェース）
－
－
－
－
○
○
－
－

XDMによるデータベースシミュレーション機能
構造型データベース（XDM/SD）
○
○
○
○
○
○
○
○

リレーショナルデータベース（XDM/RD）
○
○
○
○
○
○
○
○

OLE2オートメーション機能
クライアント機能
－
－
－
－
－
－
－
－

サーバ機能
－
－
－
－
－
－
－
－

CGIプログラム作成支援機能
○
×
○
×
×
×
×
○

マルチスレッド環境
作成と実行
○
○
○
○
○
○
○
○

デバッグ
×
×
△
△
△
△
×
×

MSMQアクセス機能
－
－
－
－
－
－
－
－

エンディアン切り替え
×
×
×
×
○
○
○
×

Unicode機能
○
×
○
○
○
○
×
×

数字項目のけた拡張機能
×
○
×
○
×
○
×
×

動的長基本項目機能
×
×
○
○
○
○
×
×

定数長拡張機能
英数字定数長の拡張
×
×
○
○
○
○
×
×

（凡例）

F：HP-UX(IPF) COBOL2002

H：HP-UX(IPF64) COBOL2002

A：AIX(32) COBOL2002

B：AIX(64) COBOL2002

J：Linux(x86) COBOL2002

K：Linux(x64) COBOL2002

L：Linux(IPF64) COBOL2002

S：Solaris(SPARC) COBOL2002

○：サポートしている

×：サポートしていない

△：サポートしている機能であるが，使える機能に一部制限がある

－：該当しない

デバッグ機能

機能 | 製品種別
F | H | A | B | J | K | L | S
実行時デバッグ機能 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
テストデバッグ機能 | GUIモード | × | × | × | × | × | × | × | ×
バッチモード | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
ラインモード | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
カバレージ機能 | GUIモード | × | × | × | × | × | × | × | ×
バッチモード | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○

（凡例）

F：HP-UX(IPF) COBOL2002

H：HP-UX(IPF64) COBOL2002

A：AIX(32) COBOL2002

B：AIX(64) COBOL2002

J：Linux(x86) COBOL2002

K：Linux(x64) COBOL2002

L：Linux(IPF64) COBOL2002

S：Solaris(SPARC) COBOL2002

○：サポートしている

×：サポートしていない

連携機能

機能 | 製品種別
F | H | A | B | J | K | L | S
XML連携機能 | ○ | ○ | ○ | ○ | ○ | ○ | × | ×
Cosminexus連携機能 | × | ○ | × | ○ | × | ○ | ○ | ○

（凡例）

F：HP-UX(IPF) COBOL2002

H：HP-UX(IPF64) COBOL2002

A：AIX(32) COBOL2002

B：AIX(64) COBOL2002

J：Linux(x86) COBOL2002

K：Linux(x64) COBOL2002

L：Linux(IPF64) COBOL2002

S：Solaris(SPARC) COBOL2002

○：サポートしている

×：サポートしていない

ウィンドウに表示されるタイトル名の表記

HP-UX(IPF) COBOL2002，AIX(32) COBOL2002，およびSolaris(SPARC) COBOL2002と，HP-UX(IPF64) COBOL2002およびAIX(64) COBOL2002では，ウィンドウに表示されるタイトル名が異なります。このマニュアルでは，HP-UX(IPF) COBOL2002，AIX(32) COBOL2002，およびSolaris(SPARC) COBOL2002のタイトル名を使用します。HP-UX(IPF64) COBOL2002またはAIX(64) COBOL2002をご使用になる場合は，次のように読み替えてください。

ウィンドウに表示されるタイトル名 | HP-UX(IPF64) COBOL2002またはAIX(64) COBOL2002の場合の読み替え
cbl2002term | cbl2002term 64bit

プログラム例について

このマニュアルのプログラム例は，断り書きがない場合はUNIX32 COBOL2002用です。プログラム例をUNIX64 COBOL2002で使用するには，プログラムの記述に変更が必要な場合がありますのでご注意ください。

1.　概要

電子計算機を利用する場合，電子計算機にさせたい作業内容をプログラミング言語で記述します。COBOL（COmmon Business Oriented Language（事務用共通言語））はプログラミング言語の一つです。

この章では，COBOL2002の概要について説明します。

＜この章の構成＞

1.1　COBOL2002の概要

1.2　COBOL2002の構成

1.3　COBOL2002が提供するコンポーネントの種類と関連性

1.1　COBOL2002の概要

＜この節の構成＞

1.1.1　COBOLの概要

1.1.2　COBOLの特長

1.1.3　COBOL2002の機能

1.1.4　COBOL2002の製品体系

1.1.1　COBOLの概要

COBOLは，事務処理用に最も使用されているプログラミング言語です。当初はビジネス向けプログラミング言語として開発されましたが，第1次規格（ANSI68，ISO72，JIS72），第2次規格（ANSI74，ISO78，JIS80），第3次規格（ISO85，ANSI85，JIS88，JIS92），第4次規格（ISO/IEC 1989:2002，JIS X3002:2011）と規格の改訂を重ね，現在ではビジネス向けだけでなく，汎用プログラミングにも広がっています。

ここでは，COBOLの特長，およびCOBOL2002の機能の概要について説明します。

なお，COBOLに関する公式の規格は，ISO（国際規格），ANSI（アメリカ規格），およびJIS（日本工業規格）で決められています。

1.1.2　COBOLの特長

COBOLの特長を次に示します。

大量データの高速処理ができるため，事務作業の効率化ができます。

事務作業で頻繁に使う帳票の作成やデータの表現方法が容易です。

簡単な英語でプログラムが書けるようになっていて，書き方も決まっているので，プログラムの見直しが容易です。

データとプログラムの手続きを分割して記述するので，まずデータが存在し，続いて処理方法を考えるという事務処理用プログラムの作成方法に対応しています。

1.1.3　COBOL2002の機能

＜この項の構成＞

(1)　COBOL2002で追加された機能

(2)　COBOL2002のWebシステム連携機能

(1)　COBOL2002で追加された機能

COBOL2002は，従来製品のCOBOL85との高い互換を保証しています。また，次に示す機能が追加されています。

オブジェクト指向機能

共通例外処理

翻訳指令

TYPEDEF句とSAME AS句

利用者定義関数

再帰呼び出し

局所場所節

自由形式のソース原文や登録集原文

(2)　COBOL2002のWebシステム連携機能

COBOL2002では，Webシステム構築に必要な次の連携機能を使用できます。これらの機能を使用することで，WebアプリケーションをCOBOLで開発できます。

XML連携機能（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

COBOLプログラムから，XMLデータをCOBOLのレコードとして入出力できます。COBOLのノウハウや既存COBOL資産を生かして，eビジネス向けのデータ交換用XMLデータを扱うアプリケーションを作成できます。

詳細については，マニュアル「COBOL2002　XML連携機能ガイド」を参照してください。

Cosminexus連携機能（HP-UX(IPF64)，AIX(64)，Linux(x64)，Linux(IPF64)，Solaris(SPARC)で有効）

日立アプリケーションサーバCosminexusのJavaアプリケーションから，COBOLプログラムをJavaBeansあるいはEJBとして呼び出せます。これによって，Webアプリケーションの基本機能となるビジネスロジック部分をCOBOLで作成できます。

詳細については，マニュアル「COBOL2002　Cosminexus連携機能ガイド」を参照してください。

1.1.4　COBOL2002の製品体系

COBOL2002では，次に示すプログラムプロダクトを用意しています。利用形態に合わせて適宜お選びください。

プログラムプロダクト名 | 開発環境 | 実行環境 | システム運用※
COBOL2002 Net Server Runtime | － | ○ | ○
COBOL2002 Net Server Suite | ○ | ○ | ○
COBOL2002 Net Server Runtime(64) | － | ○ | ○
COBOL2002 Net Server Suite(64) | ○ | ○ | ○

（凡例）

○：該当するプログラムプロダクトで使用できる

－：該当するプログラムプロダクトでは使用できない

注※

実際の運用環境で，開発したシステムを稼働できるライセンスを含むかどうかを表します。

＜この項の構成＞

(1)　COBOL2002 Net Server Runtime／COBOL2002 Net Server Runtime(64)

(2)　COBOL2002 Net Server Suite／COBOL2002 Net Server Suite(64)

(1)　COBOL2002 Net Server Runtime／COBOL2002 Net Server Runtime(64)

開発したCOBOLプログラムをUNIX上で運用するために，実行環境とシステム運用環境を提供するプログラムプロダクトです。COBOLプログラムの実行に必要な実行時ライブラリを提供しています。

(2)　COBOL2002 Net Server Suite／COBOL2002 Net Server Suite(64)

COBOL2002の機能を活用したアプリケーションプログラムの開発から，テスト／デバッグまでを支援するためのプログラムプロダクトです。COBOL2002コンパイラ，デバッガおよび実行時ライブラリを提供し，アプリケーションプログラムの開発から運用までを支援します。

1.2　COBOL2002の構成

COBOL2002の構成を，次に示します。

図1-1　COBOL2002の構成

1.3　COBOL2002が提供するコンポーネントの種類と関連性

COBOL2002では，コンパイラ・実行時ライブラリのほかにも，さまざまな周辺ツールを使用できます。ここでは，使用環境ごとに，使用できるコンポーネントを説明します。

＜この節の構成＞

1.3.1　開発環境について

1.3.2　実行環境について

1.3.3　デバッグ環境について

1.3.4　オンラインマニュアルについて

1.3.1　開発環境について

COBOL2002を利用した開発環境で使用できるコンポーネントと，その機能の概要を次に示します。

表1-1　開発環境のコンポーネント

コンポーネント | 機能概要
コンパイラ | COBOLプログラムのコンパイル

1.3.2　実行環境について

COBOL2002を利用した実行環境で使用できるコンポーネントと，その機能の概要を次に示します。

表1-2　実行環境のコンポーネント

コンポーネント | 機能概要
実行時ライブラリ | COBOLプログラムの実行
ISAM | 索引ファイルの作成や保守
SORT | COBOLの整列併合機能の実行

1.3.3　デバッグ環境について

COBOL2002を利用したデバッグ環境で使用できるコンポーネントと，その機能の概要を次に示します。

表1-3　デバッグ環境のコンポーネント

コンポーネント | 機能概要
テストデバッガ | COBOLプログラムのデバッグ
カバレージ | COBOLプログラムのテスト進捗状況管理の支援

1.3.4　オンラインマニュアルについて

COBOL2002でCD-ROMマニュアルとして提供されるオンラインマニュアルの概要を次に示します。

表1-4　オンラインマニュアルの種類

マニュアル名 | 概要
COBOL2002　使用の手引　手引編 | COBOL2002の機能と使用方法について説明しています。
COBOL2002　使用の手引　操作編 | COBOL2002で使用できるテストデバッガ，カバレージ，TDコマンド生成機能の操作方法について説明しています。
COBOL2002　言語 標準仕様編 | COBOL2002で使用する言語の文法のうち，規格仕様の部分について説明します。
COBOL2002　言語 拡張仕様編 | COBOL2002で使用する言語の文法のうち，日立拡張仕様の部分について説明します。
COBOL2002　メッセージ | COBOL2002がコンパイル時，実行時などに出力するメッセージの一覧を記載しています。
索引順編成ファイル管理 ISAM | 索引順編成ファイルの機能概要，ユティリティの操作，およびユティリティコマンドについて説明しています。
ソートマージ | ソートマージの機能概要，コマンド，およびエラーメッセージについて説明しています。※

注※

このプログラムプロダクトでは，ソートマージのコマンドは使用できません。ソートマージの機能は，COBOLの整列併合機能を利用して使用します。

2.　COBOL2002の主な新機能

COBOL2002には，幾つかの機能が追加されています。

この章では，COBOL2002の主な新機能について説明します。

＜この章の構成＞

2.1　オブジェクト指向機能

2.2　共通例外処理

2.3　翻訳指令

2.4　TYPEDEF句とSAME AS句

2.5　利用者定義関数

2.6　再帰呼び出し

2.7　局所場所節

2.8　自由形式のソース原文や登録集原文

2.1　オブジェクト指向機能

COBOL2002では，オブジェクト指向機能をサポートしています。オブジェクト指向プログラミングを適用すると，次のことができます。

データと手続きのカプセル化

親クラスの性質を子クラスに引き継ぐ継承

一つの手続きで複数のクラスを扱うポリモルフィズム

詳細は，「20.　オブジェクト指向機能」を参照してください。

2.2　共通例外処理

COBOL2002では，従来の入出力機能に関する例外宣言手続きに加えて，データ例外やけたあふれなど，さまざまな例外に対する例外宣言手続きを記述できます。また，例外オブジェクトを使用した例外処理もできます。

詳細は，「21.　共通例外処理」を参照してください。

2.3　翻訳指令

翻訳指令とは，COBOLプログラムのコンパイル（翻訳）時に，特定の動作や解釈をするようにコンパイラへの指示を与える指令です。

＜この節の構成＞

2.3.1　規格の互換性をチェックする翻訳指令

2.3.2　ソース原文の正書法を決定する翻訳指令

2.3.3　条件翻訳に関連する翻訳指令

2.3.4　コンパイルリストに関連する翻訳指令

2.3.5　例外処理に関連する翻訳指令

2.3.1　規格の互換性をチェックする翻訳指令

規格の互換性をチェックする翻訳指令を次に示します。

＜この項の構成＞

(1)　FLAG-85指令

(1)　FLAG-85指令

FLAG-85指令は，第3次規格COBOLと第4次規格COBOLとの間で互換性に欠けるおそれがある構文に対して，フラグを立てる選択種目を指定します。

FLAG-85指令の言語仕様については，マニュアル「COBOL2002　言語　標準仕様編　3.3.9 FLAG-85指令」を参照してください。

2.3.2　ソース原文の正書法を決定する翻訳指令

ソース原文の正書法を決定する翻訳指令を次に示します。

＜この項の構成＞

(1)　SOURCE FORMAT指令

(1)　SOURCE FORMAT指令

SOURCE FORMAT指令は，後続するソースの正書法が，固定形式または自由形式のどちらであるかを指定します。

詳細は，「32.2.3　正書法」を参照してください。また，SOURCE FORMAT指令の言語仕様については，マニュアル「COBOL2002　言語　標準仕様編　3.3.14 SOURCE FORMAT指令」を参照してください。

2.3.3　条件翻訳に関連する翻訳指令

条件翻訳とは，ソースコード中に翻訳指令を記述すれば，コンパイル時に特定の行を有効にしたり，無効にしたりできる機能です。

条件翻訳に関する翻訳指令を次に示します。

＜この項の構成＞

(1)　DEFINE指令

(2)　EVALUATE指令

(3)　IF指令

(1)　DEFINE指令

DEFINE指令は，翻訳変数と呼ばれる記号名に対して特定の定数値を指定します。

詳細は，「32.3.3　条件翻訳の利用」を参照してください。また，DEFINE指令の言語仕様については，マニュアル「COBOL2002　言語　標準仕様編　3.3.7 DEFINE指令」を参照してください。

(2)　EVALUATE指令

EVALUATE指令は，多方向分岐を条件翻訳します。

詳細は，「32.3.3　条件翻訳の利用」を参照してください。また，EVALUATE指令の言語仕様については，マニュアル「COBOL2002　言語　標準仕様編　3.3.8 EVALUATE指令」を参照してください。

(3)　IF指令

IF指令は，単方向または双方向分岐の条件翻訳をします。

詳細は，「32.3.3　条件翻訳の利用」を参照してください。また，IF指令の言語仕様については，マニュアル「COBOL2002　言語　標準仕様編　3.3.10 IF指令」を参照してください。

2.3.4　コンパイルリストに関連する翻訳指令

コンパイルリストに関連する翻訳指令を次に示します。

コンパイルリストは，-SrcListオプションを指定した場合に出力されます。コンパイルリストの出力形式，および-SrcListオプションを指定したときの出力形式の違いについては，「付録C　コンパイルリスト」を参照してください。

＜この項の構成＞

(1)　LISTING指令

(2)　PAGE指令

(1)　LISTING指令

LISTING指令は，コンパイルリストにソースを出力するかどうかを指定します。詳細は，「付録C.1　リストの出力」の「(3)　コンパイルリストの出力に関連する翻訳指令」を参照してください。

また，LISTING指令の言語仕様については，マニュアル「COBOL2002　言語　標準仕様編　3.3.11 LISTING指令」を参照してください。

(2)　PAGE指令

PAGE指令は，コンパイルリストの改ページを指定します。PAGE指令のコンパイルリストでの効果は，固定形式正書法の改ページ標識「/」と同じです。

詳細は，「付録C.1　リストの出力」の「(3)　コンパイルリストの出力に関連する翻訳指令」を参照してください。また，PAGE指令の言語仕様については，マニュアル「COBOL2002　言語　標準仕様編　3.3.12 PAGE指令」を参照してください。

2.3.5　例外処理に関連する翻訳指令

例外処理に関連する翻訳指令を次に示します。

＜この項の構成＞

(1)　PROPAGATE指令

(2)　TURN指令

(1)　PROPAGATE指令

PROPAGATE指令は，呼び出し元のプログラムへ例外を伝播させるために使用します。

詳細は，「21.　共通例外処理」を参照してください。また，PROPAGATE指令の言語仕様については，マニュアル「COBOL2002　言語　標準仕様編　3.3.13 PROPAGATE指令」を参照してください。

(2)　TURN指令

TURN指令は，特定の例外に対してチェックするかどうかを指定します。

詳細は，「21.　共通例外処理」を参照してください。また，TURN指令の言語仕様については，マニュアル「COBOL2002　言語　標準仕様編　3.3.15 TURN指令」を参照してください。

2.4　TYPEDEF句とSAME AS句

COBOLでは，レベル番号，データ項目の名前，PICTURE句やUSAGE句などのデータ属性を指定して，データ項目の構造や形式を表現します。

TYPEDEF句は，データ構造のひな型となるデータ型を定義します。TYPEDEF句を使用して定義したデータ型をTYPE句によって参照することで，同じ構造のデータ項目を定義できます。

SAME AS句は，あるデータ名の記述項が，別のデータ記述項の指定と同じことを表し，同じ構造のデータ項目を定義します。

TYPEDEF句，SAME AS句の言語仕様については，マニュアル「COBOL2002　言語　標準仕様編　9.16.84 TYPEDEF句」および「COBOL2002　言語　標準仕様編　9.16.70 SAME AS句」を参照してください。

＜この節の構成＞

2.4.1　TYPEDEF句

2.4.2　SAME AS句

2.4.1　TYPEDEF句

TYPEDEF句を使用したデータ型の指定について説明します。

＜この項の構成＞

(1)　データ型の定義と参照

(2)　弱く型付けされた項目と強く型付けされた項目

(1)　データ型の定義と参照

データ型は，TYPEDEF句を使用して定義します。型名を指定したTYPE句をデータ名に指定すれば，TYPEDEF句で定義した型を参照できます。

なお，TYPEDEF句で定義された型名を1か所で参照する場合，TYPE句指定によって暗黙的に展開されるデータ名は一意となりますが，TYPEDEF句で定義された型名を複数個所で参照する場合，TYPE句指定によって暗黙的に展開されるデータ名が一意とならない（同じデータ名が複数個所に存在する）ため，一意に参照するためにデータ名の修飾が必要です。

データ型の定義と参照の例を次に示します。

(2)　弱く型付けされた項目と強く型付けされた項目

データ型は，TYPEDEF句にSTRONG指定があるかどうかによって，次の二つに分類されます。

STRONG指定なし：弱く型付けされたデータ型

STRONG指定あり：強く型付けされたデータ型（集団項目のデータ型にだけ指定できます）

(a)　弱く型付けされた項目

弱く型付けされた項目とは，弱く型付けされたデータ型をTYPE句に指定することで定義されたデータ項目のことです。この項目は，指定された型名からそのデータ構造が決まること以外は，型付けされていない項目と同じように使用できます。

(b)　強く型付けされた項目

強く型付けされた項目とは，強く型付けされたデータ型をTYPE句に指定することで定義されたデータ項目のことです。この項目は，集団項目のデータ内容の妥当性を確保するための仕組みです。集団項目中の基本データ項目に格納する内容の整合性を損なうおそれがある操作は，すべて禁止されています。整合性を損なうおそれがある操作の手続き文を書いた場合，コンパイル時にエラーとなります。

（整合性を損なうおそれがある操作の例）

型の異なる集団項目からの転記

VALUE句による初期化

再命名，再定義された一意名を使ったデータ項目の更新

部分参照による値の更新

また，USAGE句にOBJECT REFERENCE指定のある項目を集団項目の従属項目として定義する場合は，STRONG指定のあるデータ型の中で定義しなければなりません。

このシステムでは，強く型付けされた項目同士の比較を許していません。強く型付けされた項目を比較する場合，強く型付けされた項目に従属するすべての基本項目同士を比較してください。

強く型付けされた項目の詳細については，マニュアル「COBOL2002　言語　標準仕様編　4.4.3(2) 強く型付けされた集団項目」，「COBOL2002　言語　標準仕様編　9.16.83 TYPE句」，および「COBOL2002　言語　標準仕様編　9.16.84 TYPEDEF句」を参照してください。

2.4.2　SAME AS句

SAME AS句は，あるデータ名のデータ構造を，ファイル節，作業場所節，局所場所節，または連絡節に定義された別のデータ記述項とまったく同じように定義することを示します。

SAME AS句の使用例を，次に示します。

（例1）

01レベルの記述項を参照する場合

（例2）

集団項目中の記述項を参照する場合

2.5　利用者定義関数

利用者定義関数とは，関数名段落（FUNCTION-ID）を指定すれば，ユーザが任意に作成できる関数です。

利用者定義関数は，関数を利用するプログラムの中から関数一意名によって参照（活性化）でき，関数定義の手続き部見出しのRETURNING指定で規定した一つの値を返します。また，常に再帰属性となるので，自分自身を呼び出せます。

利用者定義関数については，マニュアル「COBOL2002　言語　標準仕様編　5.3 利用者定義関数」および「COBOL2002　言語　標準仕様編　7.4 関数名段落（FUNCTION-ID）」を参照してください。

＜この節の構成＞

2.5.1　利用者定義関数の参照

2.5.2　利用者定義関数の引数と返却項目

2.5.1　利用者定義関数の参照

利用者定義関数は，送り出し側の作用対象として，関数一意名によって参照（呼び出し）されます。関数一意名で参照される利用者定義関数は，リポジトリ段落に指定された関数定義となります。

利用者定義関数を使用する場合，該当する利用者定義関数に対応する関数指定子をリポジトリ段落で指定しておく必要があります。

利用者定義関数の参照については，マニュアル「COBOL2002　言語　標準仕様編　4.3.2(2) 関数一意名」を参照してください。また，リポジトリ段落に関する言語仕様については，マニュアル「COBOL2002　言語　標準仕様編　8.2.7(1) 一般形式」を参照してください。

関数定義の概念を次に示します。

図2-1　関数定義

上記の図では，関数一意名を使用して利用者定義関数を参照しています。

2.5.2　利用者定義関数の引数と返却項目

利用者定義関数の引数および返却項目について説明します。

＜この項の構成＞

(1)　引数

(2)　返却項目

(3)　利用者定義関数の注意事項

(1)　引数

関数一意名で引数を指定した場合，関数定義に指定された仮引数の，BY REFERENCE／BY VALUE指定に従って引数を受け渡します。ただし，実引数によっては，BY CONTENTが仮定されることがあります。

仮引数に関する言語仕様についてはマニュアル「COBOL2002　言語　標準仕様編　10.1 手続き部の構成」を参照してください。実引数に関する言語仕様についてはマニュアル「COBOL2002　言語　標準仕様編　4.3.2(2) 関数一意名」を参照してください。また，BY REFERENCE／BY VALUE指定については，「17.1.1　引数の受け渡しの種類」を参照してください。

利用者定義関数の引数の扱いを次に示します。

表2-1　利用者定義関数の引数の扱い

関数定義の仮引数の指定 | 実引数 | 実引数の扱い
BY REFERENCE | 受け取り側作用対象として許可された，オブジェクトプロパティ／オブジェクト参照以外の項目 | BY REFERENCE
定数，算術式，ブール式，オブジェクトプロパティ，オブジェクト参照，および受け取り側作用対象として許可されない項目 | BY CONTENT
BY VALUE | － | BY VALUE

（凡例）

－：該当しない

引数は，コンパイル時に整合性チェックされます。

(2)　返却項目

返却項目の属性は，関数一意名に対応する関数定義のRETURNINGに指定された項目の属性で決まります。

(3)　利用者定義関数の注意事項

利用者定義関数の注意事項を，次に示します。

利用者定義関数に-Main,Systemまたは-Main,V3オプションを指定した場合，エラーにはなりませんが，-Mainオプションが指定されたプログラムとしてコンパイルはされません。

利用者定義関数には，ENTRY文を指定できません。

CBL，CLS，CLT，CLUで始まる関数名を指定した場合，動作は保証しません。

2.6　再帰呼び出し

再帰呼び出しとは，活性状態にあるプログラムを，直接的または間接的に呼び出すことです。COBOL2002では，RECURSIVE句が指定されたプログラム定義，利用者定義関数，およびメソッド定義を再帰呼び出しできます。

詳細は，「18.4　プログラム属性」を参照してください。

注意事項

再帰呼び出しでは，呼び出す処理単位ごとにスタック領域を使用するため，大量に再帰呼び出しをした場合，スタック領域が不足する場合があります。スタック領域が不足した場合，システム（OS）の設定によりスタック領域を拡張する必要があります。詳細は，システムのマニュアルを参照してください。

2.7　局所場所節

局所場所節とは，プログラムの実行中だけ有効となるデータ領域項目を定義する個所です。局所場所節に定義したデータ項目は，プログラムが呼び出されたときに領域が確保され，プログラムの実行中だけ有効となります。また，以前呼び出されたときの状態は，保持されません。

詳細は，「4.1.3　局所場所節のデータ領域」を参照してください。

2.8　自由形式のソース原文や登録集原文

COBOL2002では，自由形式正書法に従って，自由形式のソース原文や登録集原文を作成できます。自由形式正書法では，ソース原文や登録集原文を，行中の任意の位置に記述できます。

詳細は，マニュアル「COBOL2002　言語　標準仕様編　2.5 自由形式正書法」を参照してください。

3.　翻訳グループを構成する定義の種類

COBOL2002には，コンパイラの翻訳単位として翻訳グループという概念があります。翻訳グループは，一つ以上のソース単位の集合のことです。翻訳グループには，さまざまなソース単位を含めることができます。COBOL2002では，翻訳グループが1回のコンパイル単位となります。

この章では，翻訳グループについて説明します。

＜この章の構成＞

3.1　翻訳グループの概要と考え方

3.2　定義の種類

3.1　翻訳グループの概要と考え方

翻訳グループは，1個以上の翻訳単位から構成されます。翻訳単位は，次に示す定義のどれかに該当します。

最外側のプログラム定義

関数定義

クラス定義

インタフェース定義

各翻訳単位のコンパイルが成功すると，プログラム定義，関数定義，クラス定義などに対してオブジェクトファイル（.o）が生成されます。実行単位は，オブジェクトファイルから生成された実行可能ファイルや共用ライブラリによって構成されます。

翻訳グループについては，マニュアル「COBOL2002　言語　標準仕様編　6. 翻訳グループの構造（Structured compilation group）」を参照してください。

COBOL2002では，翻訳グループが1回のコンパイルの入力単位となります。翻訳グループの構成概念を次に示します。

図3-1　翻訳グループの構成

3.2　定義の種類

COBOL2002では，既存のプログラム定義のほかに，オブジェクト指向機能のためのクラス定義，および利用者定義関数のための関数定義があります。また，インタフェース定義のように，クラス定義とのインタフェースだけを表す定義があります。

各定義のコンパイル方法や生成されるオブジェクトファイルとの関係については，「32.　COBOLソースの作成とコンパイル」を参照してください。

＜この節の構成＞

3.2.1　プログラム定義

3.2.2　関数定義

3.2.3　クラス定義

3.2.4　インタフェース定義

3.2.1　プログラム定義

プログラム定義は，見出し部でプログラム名段落を指定して定義します。COBOL85で記述されたプログラムは，COBOL2002のプログラム定義に該当します。

プログラム名段落の言語仕様については，マニュアル「COBOL2002　言語　標準仕様編　7.8 プログラム名段落（PROGRAM-ID）」を参照してください。

プログラム定義には，最外側のプログラムと内側のプログラムがあります。

最外側のプログラム
ほかのプログラムに含まれないプログラムです。
最外側のプログラムでは，プログラム名段落に指定したプログラム名称が，オブジェクトファイル中に外部参照として出力されます。このため，ほかの翻訳単位のプログラム（COBOL言語以外を含む）から呼び出せます。
最外側のプログラムは，複数の内側のプログラムを含むことができます。

内側のプログラム
ほかのプログラムに含まれるプログラムです。
内側のプログラムは，そのプログラムを呼び出せる位置にある最外側のプログラム，または内側のプログラムから呼び出せます。また，プログラム名段落で指定したプログラム名称が，オブジェクトファイル中に外部参照として出力されないため，別の翻訳単位のプログラムからは呼び出せません。
内側のプログラムは，複数の内側のプログラム（入れ子のプログラム）を含むことができます。

一つの翻訳グループ中には，複数の最外側のプログラムを記述できます。この翻訳グループを翻訳する場合，スタックコンパイル（連続コンパイル）が実行されます。翻訳グループに複数の最外側のプログラムおよび内側のプログラムを記述した場合の翻訳単位の考え方を次に示します。

図3-2　翻訳単位の考え方

内側のプログラム(1)，(2)

内側のプログラム(3)に直接含まれる内側のプログラムです。

内側のプログラム(3)，(4)

最外側のプログラム(5)に直接含まれる内側のプログラムです。

最外側のプログラム(5)，(6)

翻訳グループ（SAMPLE1.CBL）に含まれる最外側のプログラムです。

このプログラム定義では，一つの翻訳グループ（SAMPLE1.CBL）に二つの最外側のプログラム（最外側のプログラム(5)，(6)）が含まれているので，コンパイラを1回起動すると，1回のスタックコンパイルによって二つの翻訳単位がコンパイルされます。

3.2.2　関数定義

関数定義は，見出し部で関数名段落を指定して定義します。

関数名段落の言語仕様については，マニュアル「COBOL2002　言語　標準仕様編　7.4 関数名段落（FUNCTION-ID）」を参照してください。

利用者定義関数の基本的な規則や動作は，内側のプログラムを持たない最外側のプログラム定義と同じです。ただし，利用者定義関数には，RETURNING指定が必要です。また，常に再帰属性となるので，自分自身を呼び出すことができます。

利用者定義関数は，関数一意名を指定することで呼び出されます。

関数定義の例を次に示します。

図3-3　関数定義

3.2.3　クラス定義

クラス定義は，見出し部でクラス名段落を指定して定義します。

クラス名段落の言語仕様については，マニュアル「COBOL2002　言語　標準仕様編　7.2 クラス名段落（CLASS-ID）」を参照してください。また，クラス定義の詳細については，「20.　オブジェクト指向機能」を参照してください。

クラス定義は，ファクトリ定義，インスタンス定義，およびそれらの各メソッド定義を含むことができます。

ファクトリ定義
クラス定義固有のファクトリオブジェクトの型を定義します。ファクトリ定義は，ファクトリデータ定義およびファクトリメソッド定義から構成されます。すべてのクラスにはファクトリオブジェクトが一つあり，ファクトリに固有なデータとメソッドを持ちます。ファクトリオブジェクトの主な用途は，オブジェクトインスタンスの生成，およびクラスに属するすべてのインスタンスに共通するデータの管理です。
ファクトリ名段落については，マニュアル「COBOL2002　言語　標準仕様編　7.3 ファクトリ段落（FACTORY）」を参照してください。

インスタンス定義
クラス定義固有のインスタンスオブジェクトの型を定義します。インスタンス定義は，インスタンスデータ定義およびインスタンスメソッド定義から構成されます。インスタンスオブジェクトとは，それ自身に固有なデータ項目やファイル結合子から構成されるプログラムで，そのクラス定義の中で定義されたメソッド群を共有します。インスタンス定義には，データの特性と，そのクラスに属する各インスタンスオブジェクトに関して呼び起こされるメソッド群を記述します。
オブジェクト段落については，マニュアル「COBOL2002　言語　標準仕様編　7.7 オブジェクト段落（OBJECT）」を参照してください。

メソッド定義
メソッド定義は，メソッドが定義されたクラスのインスタンスオブジェクトおよびファクトリオブジェクトに含まれるデータを操作する手続き文の集まりです。メソッドは，それぞれ固有のメソッド名を持ち，固有のデータ部や手続き部を持ちます。メソッドは，インスタンスオブジェクトまたはファクトリオブジェクトを参照する一意名とそのメソッド名を指定することで呼び起こされます。メソッドには引数や返却項目を指定できます。
メソッド名段落については，マニュアル「COBOL2002　言語　標準仕様編　7.6 メソッド名段落（METHOD-ID）」を参照してください。

クラス定義の例を次に示します。

図3-4　クラス定義

3.2.4　インタフェース定義

インタフェース定義は，見出し部でインタフェース名段落を指定して定義します。インタフェース定義を使用することによって，特定のクラスに依存しないインタフェースを定義できます。

インタフェース名段落の言語仕様については，マニュアル「COBOL2002　言語　標準仕様編　7.5 インタフェース名段落（INTERFACE-ID）」を参照してください。インタフェースについては，マニュアル「COBOL2002　言語　標準仕様編　付録I 用語の定義（Terms and Definitions）」のインタフェースの説明を参照してください。

また，インタフェース定義の詳細については，「20.　オブジェクト指向機能」を参照してください。

インタフェース定義には，メソッド原型定義を含めることができます。メソッド原型については，マニュアル「COBOL2002　言語　標準仕様編　付録I 用語の定義（Terms and Definitions）」のメソッド原型の説明，およびマニュアル「COBOL2002　言語　標準仕様編　7.6 メソッド名段落（METHOD-ID）」を参照してください。

インタフェース定義の例を次に示します。

図3-5　インタフェース定義

4.　COBOLプログラムのデータ領域

この章では，COBOLプログラムで使用するデータ領域について説明します。

＜この章の構成＞

4.1　データ領域の種類

4.2　データ属性の種類

4.1　データ領域の種類

COBOLプログラムのデータ領域とは，データ部で記述された領域を指します。

COBOLプログラムで使用できるデータ領域を次に示します。

連絡節のデータ領域

作業場所節のデータ領域

局所場所節のデータ領域

ファイル節

報告書節

画面節（SCREEN SECTION）

画面節（WINDOW SECTION）

通信節

サブスキーマ節

ソース単位の定義によって記述できるデータ定義の種別を，次に示します。

表4-1　ソース単位の定義によって記述できるデータ定義の種別

定義の種類
連絡節
作業場所節
局所場所節
ファイル節
画面節（SCREEN SECTION／WINDOW SECTION）
通信節
報告書節
サブスキーマ節

プログラム定義
○
○
○
○
○
○

メソッド定義
○
×
○
×
×
×

関数定義
○
○
○
○
○
×

ファクトリ定義
インスタンス定義
×
○
×
○
×
×

（凡例）

○：記述できる

×：記述できない

＜この節の構成＞

4.1.1　連絡節のデータ領域

4.1.2　作業場所節のデータ領域

4.1.3　局所場所節のデータ領域

4.1.4　その他の節のデータ領域

4.1.1　連絡節のデータ領域

連絡節のデータ領域には，仮引数や返却項目を記述します。

ソース要素の連絡節のデータ領域に記述された仮引数や返却項目は，要素が呼ばれるとき，呼ばれる側の要素，呼ぶ側の要素の両方から参照されます。指標名の場合，呼ばれる側の指標名と呼ぶ側の指標名は，別の指標名（領域）を参照します。

連絡節は，ソース要素が呼び出され，呼び出し先の要素の手続き部見出しにUSING／RETURNINGが指定されている場合だけ有効となります。

連絡節は，節の見出し，およびそれに続く77レベル記述項やレコード記述項から構成されます。

連絡節の言語仕様については，マニュアル「COBOL2002　言語　標準仕様編　9.6 連絡節（LINKAGE SECTION）」を参照してください。

連絡節の記述例を，次に示します。

図4-1　連絡節の記述例

4.1.2　作業場所節のデータ領域

作業場所節のデータ領域には，ファイルの一部ではないレコード項目，およびその従属データ項目を記述します。

作業場所節中で記述されるデータは，静的データまたは初期化データです。

作業場所節は，節の見出し，およびそれに続く77レベル記述項やレコード記述項から構成されます。

作業場所節の言語仕様については，マニュアル「COBOL2002　言語　標準仕様編　9.4 作業場所節（WORKING-STORAGE SECTION）」を参照してください。また，静的データ，および初期化データの詳細については，マニュアル「COBOL2002　言語　標準仕様編　10.5.2 関数，メソッド，オブジェクトまたはプログラムの状態」および「COBOL2002　言語　標準仕様編　付録I 用語の定義（Terms and Definitions）」を参照してください。

4.1.3　局所場所節のデータ領域

局所場所節のデータ領域には，自動データを記述します。

局所場所節は，プログラム定義，関数定義，メソッド定義などの再帰的に呼び出せるプログラムが呼び出されたときに，呼び出される単位ごとに確保されるデータを定義します。

局所場所節は，節の見出し，およびそれに続く77レベル記述項やレコード記述項から構成されます。

局所場所節の言語仕様については，マニュアル「COBOL2002　言語　標準仕様編　9.5 局所場所節（LOCAL-STORAGE SECTION）」を参照してください。

局所場所節の例を次に示します。

図4-2　局所場所節の記述例

なお，自動データの詳細については，マニュアル「COBOL2002　言語　標準仕様編　付録I 用語の定義（Terms and Definitions）」を参照してください。

4.1.4　その他の節のデータ領域

その他の節に記述されるデータは，静的データまたは初期化データです。

それぞれの節の言語仕様については，次を参照してください。

節の種類
参照個所

ファイル節
COBOL2002　言語　標準仕様編　9.3 ファイル節（FILE SECTION）

報告書節
COBOL2002　言語　標準仕様編　13.4 データ部（DATA DIVISION）（報告書作成機能）

画面節（SCREEN SECTION）
COBOL2002　言語　拡張仕様編　12. 画面節（SCREEN SECTION）による画面機能

画面節（WINDOW SECTION）
COBOL2002　言語　拡張仕様編　13. 画面節（WINDOW SECTION）による画面機能

通信節
COBOL2002　言語　拡張仕様編　11. 通信節による画面機能
COBOL2002　言語　拡張仕様編　8. データコミュニケーション機能

サブスキーマ節
COBOL2002　言語　拡張仕様編　19.1.1 データ部（構造型データベース（XDM/SD）操作シミュレーション機能）

また，静的データ，および初期化データの詳細については，マニュアル「COBOL2002　言語　標準仕様編　付録I 用語の定義（Terms and Definitions）」を参照してください。

4.2　データ属性の種類

COBOL2002では，データやファイルを共用できます。データやファイルを共用すると，複数プログラム間でのデータやファイルの共用が容易になります。

データやファイルを共用するには，その属性が大域属性（GLOBAL句）または外部属性（EXTERNAL句）である必要があります。

＜この節の構成＞

4.2.1　大域属性（GLOBAL句）

4.2.2　外部属性（EXTERNAL句）

4.2.1　大域属性（GLOBAL句）

データ名およびファイル名は，大域名か局所名のどちらかに分類されます。

データ名やファイル名にGLOBAL句を指定すると大域名となります。指定しない場合は，局所名となります。

局所名を使用すると，名前に関連づけられている対象を，局所名が定義されているプログラム中だけから参照できます。

大域名を使用すると，名前に関連づけられている対象を，大域名が定義されているプログラム中，およびそのプログラムに含まれるプログラム中から参照できます。大域名は複数の含まれるプログラム間で参照できますが，同じ名前が定義されているプログラムを含むプログラム中からは参照できません。

大域名および局所名の有効範囲を次に示します。

図4-3　大域名と局所名の有効範囲

データ名やファイル名は，大域名か局所名のどちらかに分類されます。また，定義されたプログラム中の指定によって，大域属性か局所属性かが決まる名前もあります。ファイル名，レコード名，データ名，および条件名が，それぞれ局所／大域の属性になる場合を次に示します。

ファイル名
ファイル名が定義されているファイル記述項※にGLOBAL句がある場合は大域名となります。大域名でない場合は局所名となります。

レコード名
レコード名が次のどちらかに該当する場合は大域名となります。大域名でない場合は局所名となります。

その名前が定義されているレコード記述項※にGLOBAL句がある

GLOBAL句があるファイル記述項※に関連している

データ名
データ名が次のどちらかに該当する場合は大域名となります。大域名でない場合は局所名となります。

その名前が定義されているデータ記述項※にGLOBAL句がある

GLOBAL句を持つほかのデータ記述項に従属している

条件名（データ記述項※で定義されているもの）
条件名が定義されているデータ記述項が，GLOBAL句があるほかの記述項に従属している場合は大域名となります。大域名でない場合は局所名となります。

注※

ファイル記述項，レコード記述項，およびデータ記述項では，GLOBAL句の指定が規則によって禁止される場合があります。

GLOBAL句については，マニュアル「COBOL2002　言語　標準仕様編　9.16.30 GLOBAL句」を参照してください。

4.2.2　外部属性（EXTERNAL句）

EXTERNAL句を指定したデータ名やファイル名は，外部属性を持ち，COBOL実行単位内で一つの領域を共用できます。

COBOL実行環境中では，次の範囲でEXTERNAL領域を指定できます。

ファイル数：255個まで

データ領域の数：32,767まで

ファイル数，またはデータ領域の数が上限を超えた場合は，実行時エラーとなります。

EXTERNAL句については，マニュアル「COBOL2002　言語　標準仕様編　9.16.25 EXTERNAL句」を参照してください。

＜この項の構成＞

(1)　共有可能属性と共有不可能属性

(2)　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属性チェック

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指定の有無

相対キー指定の有無，最大けた数

コンパイラオプション
次に示すコンパイラオプションの指定の有無
-StdVersion,1，-StdVersion,2，-Switch,EBCDIC，-Switch,EBCDIK，-XMAP,LinePrint，-IgnoreLCC，-Compati85,IoStatus，-Compati85,Linage，-NumCsv

WRITE文の制御文字の種別（ADVANCING／POSITIONING指定の有無，AFTER／BEFORE指定の混在）

レコード名称

ファイルに記述されたレコード数

各レコードの指定順序，各レコードのデータ項目属性（「4.2.2　外部属性（EXTERNAL句）」の「(2)　EXTERNAL属性チェック」－「(a)　データ項目に対するチェック項目」を参照）

レコード形式

LOCK MODE句の指定

DECIMAL-POINT IS COMMA句の有無（-NumCsvオプション指定時のCSV編成ファイルだけが対象）

CHARACTER TYPE句の有無（WRITE文のFROM指定の一意名，またはその下位項目にCHARACTER TYPE句が指定されている場合も含む）

5.　手続き文

この章では，COBOLで使用する手続き文の仕様と使用例について説明します。

＜この章の構成＞

5.1　概要

5.2　算術演算機能

5.3　文字列操作文

5.4　条件分岐文

5.5　表操作

5.6　手続き分岐

5.7　データ転記文

5.1　概要

ここでは，手続き文の概要について説明します。

＜この節の構成＞

5.1.1　基本的な内部操作手続き文

5.1.2　条件式

5.1.3　中間結果の作成条件

5.1.4　CORRESPONDING指定

5.1.1　基本的な内部操作手続き文

基本的な内部操作手続き文の分類を，次に示します。

表5-1　基本的な内部操作手続き文の分類

分類
文
参照先

算術演算

ADD

COMPUTE

DIVIDE

MULTIPLY

SUBTRACT

5.2　算術演算機能

文字列操作

EXAMINE※1

INSPECT

STRING

TRANSFORM※1

UNSTRING

5.3　文字列操作文

条件分岐

EVALUATE

IF

5.4　条件分岐文

表操作

SEARCH

5.5　表操作

手続き分岐

ALTER※1

CONTINUE

EXIT※2

GO TO

PERFORM

5.6　手続き分岐

データ転記

INITIALIZE

MOVE

SET※2

5.7　データ転記文

オブジェクト指向

INVOKE※2

SET※2

20.　オブジェクト指向機能

例外

EXIT※2

GOBACK※2

RAISE

RESUME

SET

USE※2

21.　共通例外処理

入出力

CLOSE

COMMIT※2

DELETE

OPEN

READ

REWRITE

ROLLBACK※2

START

UNLOCK

USE※2

WRITE

6.　ファイル入出力機能

整列併合

MERGE

RELEASE

RETURN

SORT

11.　整列併合機能

少量入出力

ACCEPT※2

DISPLAY※2

STOP※2

10.　ACCEPT／DISPLAY／STOP文による入出力

報告書機能

GENERATE

INITIATE

SUPPRESS

TERMINATE

9.　報告書作成機能

プログラム間連絡

CALL

CANCEL

ENTRY

EXIT※2

GOBACK※2

STOP※2

16.　COBOLの実行単位

通信

COMMIT※2

DISABLE

ENABLE

RECEIVE

ROLLBACK※2

SEND

TRANSCEIVE

22.　データコミュニケーション機能（UNIX32，AIX(64)，Linux(x64)，Linux(IPF64)で有効）

画面

ACCEPT※2

DISPLAY※2

ERASE

REPLY

USE※2

WAIT

12.　画面入出力機能（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Solaris(SPARC)で有効）

その他

ENTER※1

－

（凡例）

－：廃要素のため，このマニュアルでは解説なし

注※1

廃要素です。

注※2

複数の機能で使用します。

5.1.2　条件式

条件式の評価の流れを，幾つかの場合に分けて説明します。

条件式の文法規則については，マニュアル「COBOL2002　言語　標準仕様編　4.7.4 条件式（Conditional expressions）」を参照してください。

＜この項の構成＞

(1)　条件がすべてANDで連結されている場合

(2)　条件がすべてORで連結されている場合

(3)　条件がORとANDで連結されている場合

(4)　条件が括弧で囲まれている場合

(1)　条件がすべてANDで連結されている場合

条件がすべてANDで連結されている条件式の評価の流れを次に示します。

図5-1　条件1 AND 条件2 AND … 条件nの評価

この場合の条件式の例を次に示します。

（例）

IF A = 10 AND B = 20 AND C = 30
 THEN
   DISPLAY '--- THEN ---'
 ELSE
   DISPLAY '--- ELSE ---'
END-IF.

A=10かつB=20かつC=30のときだけTHENのDISPLAY文を実行します。一つでも条件が真とならない場合は，ELSEのDISPLAY文を実行します。

(2)　条件がすべてORで連結されている場合

条件がすべてORで連結されている条件式の評価の流れを次に示します。

図5-2　条件1 OR 条件2 OR … 条件nの評価

この場合の条件式の例を次に示します。

（例）

IF A = 10 OR B = 20 OR C = 30
 THEN
   DISPLAY '--- THEN ---'
 ELSE
   DISPLAY '--- ELSE ---'
END-IF.

A=10，B=20，C=30のどれか一つでも条件が真ならばTHENのDISPLAY文を実行します。すべての条件が偽の場合にだけ，ELSEのDISPLAY文を実行します。

(3)　条件がORとANDで連結されている場合

条件がORとANDで連結されている条件式の評価の流れを次に示します。

図5-3　条件1 OR 条件2 AND 条件3の評価

この場合の条件式の例を次に示します。

（例）

IF A = 10 OR B = 20 AND C = 30
 THEN
   DISPLAY '--- THEN ---'
 ELSE
   DISPLAY '--- ELSE ---'
END-IF.

A=10，またはB=20かつC=30のどちらか一つでも条件が真ならばTHENのDISPLAY文を実行します。すべての条件が偽の場合にだけ，ELSEのDISPLAY文を実行します。

(4)　条件が括弧で囲まれている場合

条件が括弧で囲まれている条件式の評価の流れを次に示します。

図5-4　（条件1 OR NOT 条件2） AND 条件3 AND 条件4の評価

この場合の条件式の例を次に示します。

（例）

IF ( A = 10 OR NOT B = 20 ) AND C = 30 AND D = 40
 THEN
   DISPLAY '--- THEN ---'
 ELSE
   DISPLAY '--- ELSE ---'
END-IF.

括弧で囲まれている条件，C=30およびD=40がANDで連結されているので，これらの条件がすべて真ならば，条件式の真理値は真となります。どれか一つでも偽となれば，条件式の真理値は偽となります。

次に括弧内の条件について検証します。A=10とNOT B=20はORで連結されているので，どちらか一方の条件が真ならば，括弧内の条件は真となります。ここで，NOTは条件B=20の真理値を否定しているため，B=20が真ならばNOT B=20は偽，B=20が偽ならばNOT B=20は真となります。

5.1.3　中間結果の作成条件

コンパイラは，算術式の作用対象の演算順序などによって，一つ以上の中間結果を作成します。この中間結果は記憶装置の一部またはレジスタ上に作成され，算術演算の結果が出るまで保留されます（演算結果を連続して使用する場合，記憶装置内の同じ場所を使用することがあります）。

中間結果は次の場合に作成されます。

ADD文，SUBTRACT文，MULTIPLY文，DIVIDE文，およびCOMPUTE文

EVALUATE文，IF文，PERFORM文，およびSEARCH文中に算術式が含まれるとき

組み込み関数の引数，添字，部分参照中に算術式が含まれるとき

中間結果の作成例を次に示します。

（例）

COMPUTE A = B + (C / D) + ((E ** F) * G) - H

上記のCOMPUTE文は，次に示す連続した単一の演算操作に変換されます。

C / D      → IR1
E ** F     → IR2
IR2 * G    → IR3
B + IR1    → IR4
IR4 + IR3  → IR5
IR5 - H    → A

IRn（nは数字）は，コンパイラによって作成された中間結果の記憶場所を表します。

結果項目Aの精度は，作成される中間結果の整数部および小数部のけた数の影響を受けます。

なお，詳細は「5.2　算術演算機能」を参照してください。

5.1.4　CORRESPONDING指定

CORRESPONDING指定は，ADD文，SUBTRACT文，およびMOVE文で使用します。

CORRESPONDING指定については，マニュアル「COBOL2002　言語　標準仕様編　10.6.5 CORRESPONDING指定」を参照してください。

CORRESPONDING指定をすると，一つの文で集団項目中の幾つもの「対応する」項目間の加減算や転記ができます。

CORRESPONDINGを指定したMOVE文，ADD文，またはSUBTRACT文で，対応する項目が一つもない場合は，転記が行われません。

対応とは，D1とD2をそれぞれ集団項目の一意名とするときに，D1とD2から一つずつとったデータ項目の組が，次の条件を満たす場合を指します。

D1に従属するデータ項目とD2に従属するデータ項目にFILLER以外の同じデータ名があり，D1とD2の直前までの修飾語の名前の系列が同じである。

CORRESPONDING指定付きのMOVE文では，そのデータ項目の少なくとも一つは基本項目であり，結果的に行われる転記は転記の規則に従って正しいものである。
CORRESPONDING指定付きのADD文またはSUBTRACT文では，そのデータ項目の両方が基本数字データ項目である。

D1およびD2の記述は，レベル番号66，77，88，または用途が指標，オブジェクトを含んでいてはならない。

D1またはD2に従属するデータ項目が，REDEFINES句，RENAMES句，OCCURS句，または用途が指標，オブジェクトを含むとき，そのデータ項目は対応の対象とはならない。また，REDEFINES句，OCCURS句，または用途が指標，オブジェクトを含むデータ項目に従属するときも，対応の対象とはならない。D1およびD2は，どちらも部分参照されてはならない。

上記の条件を満足する各データ項目の名前は，暗黙の修飾語の結果，一意にならなければならない。
対応する項目の例を，次に示します。

（例1）

D1同士とF1同士は対応します。

H1は一方が基本項目で他方が集団項目ですが，MOVE文では，基本項目から集団項目への転記ができるので対応しています。ただし，ADD文およびSUBTRACT文では基本項目でなければならないので，対応しません。

B1，C1は集団項目なので対応しません。

E1は修飾語の系列が異なる（E1 OF C1 OF B1とE1 OF C1 OF H1）ので対応しません。

つまり，(A)は(B)と同じことになります。

（A）

MOVE CORRESPONDING X TO Z

（B）

MOVE D1 OF C1 OF B1 OF X TO D1 OF C1 OF B1 OF Z
MOVE F1 OF C1 OF B1 OF X TO F1 OF C1 OF B1 OF Z
MOVE H1 OF X             TO H1 OF Z

（例2）

A1とE1は対応します。

B1はOCCURS句を含む項目，C1，D1はOCCURS句を含む項目に従属する項目なので，対応しません。

F1はREDEFINES句を含む項目なので対応しません。

つまり，(A)は(B)と同じことになります。

（A）

MOVE CORRESPONDING Y TO Z

（B）

MOVE A1 OF Y TO A1 OF Z
MOVE E1 OF Y TO E1 OF Z

5.2　算術演算機能

ここでは，算術演算機能について説明します。

＜この節の構成＞

5.2.1　算術演算機能の特徴

5.2.2　算術文

5.2.3　有効けた数

5.2.4　演算の中間結果

5.2.1　算術演算機能の特徴

算術文（詳細は「5.2.2　算術文」を参照）は，複数個の答えを持つことがあります。これらの文は，次のように書かれたものとして実行されます。

文の初期評価（添字などの評価）の一部であるすべてのデータ項目の参照を行い，これらのデータ項目に対して必要な計算や結合を行い，括弧の演算の結果を一時的な記憶場所に蓄える文（初期評価の一部である項目を表す規則は，個々の文によって異なる）

各単一の結果のデータ項目に，この一時的な記憶場所の値を転送したり，結び付けたりする一連の文（これらの文は，複数個の答が並べてあるのと同じ順序で，左から右に書かれているものとみなされる）

算術文の例を次に示します。なお，例中のtempは，任意の一時的な記憶場所を示します。

（例1）

(A)と(B)は同じことを表します。

(A)

ADD a b c TO c d(c) e

(B)

ADD a b c GIVING temp
ADD temp TO c
ADD temp TO d(c)
ADD temp TO e

（例2）

(A)と(B)は同じことを表します。

(A)

MULTIPLY a(i) BY i，a(i)

(B)

MOVE a(i) TO temp
MULTIPLY temp BY i
MULTIPLY temp BY a(i)

算術文については，マニュアル「COBOL2002　言語　標準仕様編　10.8.2 ADD文」，「COBOL2002　言語　標準仕様編　10.8.8 COMPUTE文」，「COBOL2002　言語　標準仕様編　10.8.13 DIVIDE文」，「COBOL2002　言語　標準仕様編　10.8.29 MULTIPLY文」，および「COBOL2002　言語　標準仕様編　10.8.48 SUBTRACT文」を参照してください。

5.2.2　算術文

算術文には，COMPUTE文，ADD文，SUBTRACT文，MULTIPLY文，およびDIVIDE文があります。各文の説明を，次に示します。

なお，例中のtemp，quot，rem-tmp，およびremは，任意の一時的な記憶場所を示します。

＜この項の構成＞

(1)　COMPUTE文

(2)　ADD文

(3)　SUBTRACT文

(4)　MULTIPLY文

(5)　DIVIDE文

(1)　COMPUTE文

COMPUTE文は，算術式の値を一つ以上のデータ項目に収めます。

COMPUTE文による演算の例を次に示します。なお，A～Dは整数項目を表します。

（例）

COMPUTE A = B +  C.    ←BにCを加算し，その結果をAに収める
COMPUTE A = B -  C.    ←BからCを減算し，その結果をAに収める
COMPUTE A = B *  C.    ←BにCを乗算し，その結果をAに収める
COMPUTE A = B /  C.※   ←BをCで除算し，その結果をAに収める
COMPUTE A = B ** C.    ←BをC乗し，その結果をAに収める

注※

剰余を求めたい場合には，次のようなCOMPUTE文を組み合わせます。

COMPUTE A =  B / C          ←BをCで除算し，その商をAに収める
COMPUTE D =  B - C * A      ←商Aを使って剰余を求め，Dに収める

(2)　ADD文

ADD文は，幾つかの数字作用対象の和を一つ以上のデータ項目に収めます。

ADD文による演算の例を次に示します。

（例1）

ADD文は，続く注記行のCOMPUTE文と同じです。

      ADD A TO B
     *COMPUTE B = A + B
      ADD A B C TO D
     *COMPUTE D = A + B + C + D
      ADD A B TO C D
     *COMPUTE temp = A + B
     *COMPUTE C = temp + C
     *COMPUTE D = temp + D

（例2）

ADD文は，続く注記行のCOMPUTE文と同じです。

      ADD A B TO C GIVING D
     *COMPUTE D = A + B + C
      ADD A B GIVING C D ROUNDED
     *COMPUTE temp = A + B
     *COMPUTE C = temp
     *COMPUTE D ROUNDED = temp

（例3）

ADD文は，続く注記行の二つのCOMPUTE文を合わせたものと同じです。

      05 A.
        10 D1 PIC S9(6).
        10 D2 PIC S9(3)V9(2) USAGE COMP.
      05 B.
        10 D1 PIC S9(5)V9 USAGE COMP.
        10 D2 PIC 9(5)V9(5).
        ：
          ADD CORRESPONDING A TO B ROUNDED
     *    COMPUTE D1 OF B = D1 OF A + D1 OF B
     *    COMPUTE D2 OF B = D2 OF A + D2 OF B

(3)　SUBTRACT文

SUBTRACT文は，幾つかの数字作用対象の和を，一つ以上のデータ項目から減じ，その結果を一つ以上のデータ項目に収めます。

SUBTRACT文による演算の例を次に示します。

（例1）

SUBTRACT文は，続く注記行のCOMPUTE文と同じです。

      SUBTRACT A FROM B
     *COMPUTE B = B - A
      SUBTRACT A B C FROM D
     *COMPUTE D = D - (A + B + C)
      SUBTRACT A B FROM C D
     *COMPUTE temp = A + B
     *COMPUTE C = C - temp
     *COMPUTE D = D - temp

（例2）

SUBTRACT文は，続く注記行のCOMPUTE文と同じです。

      SUBTRACT A FROM B GIVING C
     *COMPUTE C = B - A
      SUBTRACT A B C FROM D GIVING E
     *COMPUTE E = D - (A + B + C)
      SUBTRACT A B FROM C GIVING D E ROUNDED
     *COMPUTE temp = C - (A + B)
     *COMPUTE D = temp
     *COMPUTE E ROUNDED = temp

（例3）

SUBTRACT文は，続く注記行の二つのCOMPUTE文を合わせたものと同じです。

      05 A.
       10 D1 PIC S9(6).
       10 D2 PIC S9(3)V9(2) USAGE COMP.
      05 B.
       10 D1 PIC S9(5)V9 USAGE COMP.
       10 D2 PIC 9(5)V9(5).
             :
          SUBTRACT CORRESPONDING A FROM B
     *COMPUTE D1 OF B = D1 OF B - D1 OF A
     *COMPUTE D2 OF B = D2 OF B - D2 OF A

(4)　MULTIPLY文

MULTIPLY文は，数字作用対象同士の積を計算し，その結果を一つ以上のデータ項目に収めます。

MULTIPLY文による演算の例を次に示します。

（例1）

MULTIPLY文は，続く四つのCOMPUTE文を合わせたものと同じです。

      MULTIPLY A BY B ROUNDED C D
     *COMPUTE temp = A
     *COMPUTE B ROUNDED = temp * B
     *COMPUTE C = temp * C
     *COMPUTE D = temp * D

（例2）

MULTIPLY文は，続く四つのCOMPUTE文を合わせたものと同じです。

      MULTIPLY A BY B GIVING C D ROUNDED E
     *COMPUTE temp = A * B
     *COMPUTE C = temp
     *COMPUTE D ROUNDED = temp
     *COMPUTE E = temp

(5)　DIVIDE文

DIVIDE文は，一つの作用対象をほかの数字作用対象で割り，その商と剰余を一つ以上のデータ項目に収めます。

DIVIDE文による演算の例を次に示します。

（例1）

DIVIDE文は，続く注記行のCOMPUTE文の組と同じです。

      DIVIDE A INTO B ROUNDED A C
     *COMPUTE temp = A
     *COMPUTE B ROUNDED = B / temp
     *COMPUTE A = A / temp
     *COMPUTE C = C / temp

（例2）

DIVIDE文は，続く注記行のCOMPUTE文と同じです。

      DIVIDE A INTO B GIVING C D ROUNDED
     *COMPUTE temp = B / A
     *COMPUTE C = temp
     *COMPUTE D ROUNDED = temp

（例3）

DIVIDE文は，続く注記行のCOMPUTE文と同じです。

      DIVIDE A BY B GIVING C D ROUNDED
     *COMPUTE temp = A / B
     *COMPUTE C = temp
     *COMPUTE D ROUNDED = temp

（例4）

DIVIDE文は，続く注記行のCOMPUTE文の組と同じです。

      DIVIDE A INTO B GIVING C ROUNDED REMAINDER D
     *COMPUTE quot = B / A
     *COMPUTE rem-tmp = quot.
     *COMPUTE rem = B - A * rem-tmp.
     *COMPUTE C ROUNDED = quot
     *COMPUTE D = rem

（例5）

DIVIDE文は，続く注記行のCOMPUTE文と同じです。

      DIVIDE A BY B GIVING C ROUNDED REMAINDER D
     *COMPUTE quot = A / B
     *COMPUTE rem = A - B * quot
     *COMPUTE C ROUNDED = quot
     *COMPUTE D = rem

5.2.3　有効けた数

算術文の有効けた数に関する共通事項を次に示します。

なお，HP-UX(IPF64)，Linux(x64)の場合，数字項目のけた拡張機能での有効けた数については，「28.2.3　数字項目のけた拡張機能での有効けた数」を参照してください。

作用対象のデータ記述が同じである必要はありません。
計算の過程で，すべての必要な変数と小数点の位置が合わせられます。

作用対象の数字の最大けた数は18けたです。
また，作用対象の合成※の最大けた数も18けたです。

注※

作用対象の合成とは，指定された各作用対象を小数点で位置合わせし，重ね合わせてできる仮想のデータ項目です。

各作用対象のけた数の合計は，想定した位取りも含めて30けた以内です。

5.2.4　演算の中間結果

中間結果のけた数は，次の規則に従って確保されます。

なお，HP-UX(IPF64)，Linux(x64)の場合，数字項目のけた拡張機能での演算の中間結果については，「28.3　数字項目のけた拡張機能での演算の中間結果」を参照してください。

演算の結果，上位けたや下位けたに切り捨てが発生しないけた数を確保します。

除算の場合，割り切れるとは限らないので，小数部のけた数は算術文中に現れる項目の最大のものとします。
除数のPICTURE句で，999PPVのように小数点の左側にPがある場合には，演算速度の効率を考慮して，Pのけた数を商の中間結果に加えて大きくします。
ここで確保されないけたに入る値は，切り捨てられます。

べき乗の場合（右辺（べき数）が一意名のとき），演算結果の上位けたや下位けたがどこまで大きくなるかわからないため，中間結果を30けたとして，小数部のけた数は算術式中に現れる項目の小数部の最大値とします。
ここで確保されないけたに入る値は，切り捨てられます。

中間結果の取れるけた数は，最大の30けたとし，これを超えた場合は補正をします。
このシステムで適用する中間結果の計算式を「表5-2　中間結果のけた数（加減算）」および「表5-3　中間結果のけた数（乗算，除算，べき乗）」に示します。ただし，作用対象に数字定数がある場合，中間結果はその計算結果の取れる最大値を格納できるけた数を確保します。

表5-2　中間結果のけた数（加減算）

演算の種類 | 整数部のけた数 | 小数部のけた数
加減算が連続(a₁±a₂±...±an)していて，かつ整数けたが最大9けた以下の場合 | Max(I₁,I₂,…,In) ＋ i※ | MAX(Dn-1,Dn)
上記以外の場合 | Max(I₁,In) ＋ 1

（凡例）

I₁：連続する加減算の最初の数の整数部のけた数

In-1：演算の左辺の整数部のけた数

Dn-1：演算の左辺の小数部のけた数

In：演算の右辺の整数部のけた数

Dn：演算の右辺の小数部のけた数

注※

iは，次に示す式を満足する整数を表します。

log₁₀(n) ≦ i ≦ log₁₀(n-1) + 1

iを加算することで，中間結果の整数部のけた数が9けたを超えた場合，整数部のけた数の算出方法が「上記以外の場合」に変わります。

表5-3　中間結果のけた数（乗算，除算，べき乗）

演算の種類
整数部のけた数（I）
小数部のけた数（D）

乗算
I₁ + I₂
D₁ + D₂

除算
I₁ + D₂
MAX (D₁ - D₂,Dmax)

べき乗

右辺が整数の数字直定数（L≠0）のとき

I₁ × L

右辺が整数の数字直定数 (L＝0)のとき

1

右辺が上記以外のとき

30 - Dmax

右辺が整数の数字直定数（L≠0）のとき

D₁ × L

右辺が整数の数字直定数（L＝0）のとき

0

右辺が上記以外のとき

Dmax

（凡例）

I：中間結果の整数部のけた数

D：中間結果の小数部のけた数

I₁：演算の左辺の整数部のけた数

D₁：演算の左辺の小数部のけた数

I₂：演算の右辺の整数部のけた数

D₂：演算の右辺の小数部のけた数

Df：受け取り側作用対象の小数部のけた数

Dmax：算術式中のすべての作用対象と結果項目（ROUNDED指定ありの場合はDf + 1）の中で最大の小数部のけた数（算術式が条件式中に書かれたときは比較の作用対象を含む。また，べき数と除数の作用対象と浮動小数点数のものは除く。）

MAX(x,y)：xとyの最大数

L：整数の数字直定数の値

表5-4　中間結果が30けたを超える場合の補正値

補正条件 | 最終的な整数部 | 最終的な小数部
Dの値 | Iの値
D ≦ Dmax | (任意) | 30 - D | D
D ＞ Dmax | I + Dmax ≦ 30 | I | 30 - I
I + Dmax ＞ 30 | 30 - Dmax | Dmax

注

表中のIとDは，「表5-3　中間結果のけた数（乗算，除算，べき乗）」で計算された値です。

PICTURE句で整数部にPの指定がある場合，小数部のけた数は0として計算します。小数部にPの指定がある場合は，整数部は負として計算します。例えば，999PPVの整数部のけた数は5で，小数部のけた数は0です。また，中間結果のけた数（I + D）が30けたを超えた場合，「表5-2　中間結果のけた数（加減算）」と「表5-3　中間結果のけた数（乗算，除算，べき乗）」の値は，「表5-4　中間結果が30けたを超える場合の補正値」のように補正されます。

演算の中間結果のけた数を求める例を次に示します。

（例）

      77 A PIC S9(3)V9(3).
      77 B PIC S9(4)V9(3).
      77 C PIC S9(3)V9(2).
      77 D PIC S9(7)V9(4).
          :
          COMPUTE D = C + (A / B).

上記のCOMPUTE文を実行すると，中間結果のけた数は次のようになります。

除算A/Bの中間結果のけた数

整数部：I=I₁+D₂=3+3=6（けた）

小数部：D=MAX(D₁-D₂,Dmax)=MAX(0,4)=4（けた）

加算C+(A/B)の中間結果のけた数

除算A/Bの中間結果のけた数は，上記の計算式から，I₂=6，D₂=4として計算します。

整数部：I=MAX(I₁,I₂)+1=MAX(3,6)+1=7（けた）

小数部：D=MAX(D₁,D₂)=MAX(2,4)=4（けた）

演算の中間結果についての注意事項

次の場合，浮動小数点演算となるため，中間結果のけた数の計算式は適用されません。

浮動小数点項目や浮動小数点数字定数が算術演算の対象に指定されている場合

被べき数（底）が浮動小数点項目であるか，またはべき数（指数）が整数でない場合

関数値のデータ属性が内部浮動小数点形式の組み込み関数の場合

浮動小数点項目，べき乗が含まれる算術式，または除算が含まれる算術式を引数に指定した組み込み関数の場合

中間結果が30けたを超えると，切り捨てが行われるため，正しい値が求まらないことがあります。そのため，中間結果が30けたを超える計算をしてはいけません。

中間結果の計算式は，COBOLの規格で規定されていないため，このシステムが独自に規定したものです。

5.3　文字列操作文

文字列操作文は，文字をつなぎ合わせたり，分解したり，置き換えたりします。

文字列操作文には，STRING文，UNSTRING文，およびINSPECT文があります。

＜この節の構成＞

5.3.1　STRING文

5.3.2　UNSTRING文

5.3.3　INSPECT文

5.3.1　STRING文

STRING文は，幾つかのデータ項目の内容の一部または全部をつなぎ合わせて，一つのデータ項目に移します。

STRING文については，マニュアル「COBOL2002　言語　標準仕様編　10.8.47 STRING文」を参照してください。

STRING文の例を次に示します。

（例1）

受け取り開始位置を指定しない（POINTER指定のない）STRING文

三つのデータ項目AA，BB，CCのデータの一部または全部を取り出して，文字列を作成します。

データ項目AAにはコンマ（,），BBにはセミコロン（;），CCには空白（ ）がデータの区切り文字として入っていて，区切り文字までのデータを取り出して文字列を作成します。

このSTRING文を実行すると，次のようにデータを転記します。なお，文中のかたかなは，半角かたかな文字を表します。

AAのデータを，コンマ（,）の直前までMSG-01に転記します。
'12345'

英数字定数'ハ'を，1.に続けて転記します。
'12345ハ'

BBのデータを，セミコロン（;）の直前まで，2.に続けて転記します。
'12345ハ CHECK OK'

英数字定数'デス。'を，3.に続けて転記する。
'12345ハ CHECK OKデス。'

CCのデータを，空白（ ）の直前まで，4.に続けて転記します（CCのデータの区切り文字は空白で，セミコロンはデータの一部です）。
'12345ハ CHECK OKデス。 READY;'
MSG-01の残りの部分の内容は変更されません。

（例2）

受け取り開始位置を指定する（POINTER指定のある）STRING文

データ項目D1，D2，D3，D4のデータの一部または全部を取り出し，MSG-02の領域がいっぱいになるまで転記して文字列を作成します。

MSG-02がいっぱいかどうかの判定には，OVERFLOW指定を使用します。

送り出し側作用対象のデータ項目からは，先頭から最初の空白の直前までのデータを取り出します。

受け取り開始位置は，POINTER項目の初期値で指定します。

      77 D1     PIC X(10).
      77 D2     PIC X(10).
      77 D3     PIC X(10).
      77 D4     PIC X(10).
      77 PTR-1  PIC 9(5) USAGE COMP.
      77 MSG-02 PIC X(25).
                      ：
          MOVE 6     TO PTR-1.
          MOVE SPACE TO MSG-02.
          STRING D1 D2 D3 D4
            DELIMITED BY SPACE
            INTO MSG-02
            WITH POINTER PTR-1
            ON OVERFLOW
              DISPLAY  'OVERFLOW CONDITION;'
          END-STRING.

PTR-1の初期値が6の場合，このSTRING文を実行すると，次のようにデータを転記します。

D1のデータを，最初の空白の直前までMSG-02に転記します。
PTR-1の初期値は6なので，MSG-02の6文字目からデータを転記し，先頭の5文字の内容は変更しません。
'_____123,45'

D2のデータを続けて転記します。
D2のデータには空白がないので，右端の文字Jまですべて転記します。
'_____123,45ABCDEFGHIJ'

D3のデータを続けて転記します。
D3のデータを4文字転記すると受け取り側作用対象がいっぱいになるので，転記を終了して，OVERFLOW指定に書かれたDISPLAY文を実行します。D3の残りのデータとD4のデータは使用しません。
PTR-1には，転記した文字数が加えられています（この場合，MSG-02のサイズ+1=26が設定されています）。

5.3.2　UNSTRING文

UNSTRING文は，送り出し側作用対象の連続したデータを分解し，幾つかの受け取り側作用対象データ項目に移します。

UNSTRING文については，マニュアル「COBOL2002　言語　標準仕様編　10.8.52 UNSTRING文」を参照してください。

UNSTRING文の使用例を次に示します。

（例1）

コンマで区切られている19文字のデータを分解して転記します。

      77 SEND-02 PIC X(19).
      77 RR-21   PIC X(8).
      77 RR-22   PIC X(8).
      77 RR-23   PIC X(8).
            :
          UNSTRING SEND-02 DELIMITED BY ','
                   INTO RR-21 RR-22 RR-23.

（例2）

100バイトのデータ項目中にコンマで区切られたデータが入っているときに，データ項目のデータを3個ずつ取り出して転記します。

すべてのデータを処理したかどうかの判定には，OVERFLOW指定を使用します。

送り出し側作用対象：

受け取り側作用対象

実行 | 結果
AAの値 | BBの値 | CCの値 | CTRの値 | OVERFLOW条件
1回目の実行 | K01 | K02 | K03 | 3 | 成立する
2回目の実行 | T1 | N4 | K05 | 3 | 成立する
： | ： | ： | ： | ： | 　　：
n回目の実行 | N1 | M35 |  | 2 | 成立しない

      77 SEND-03 PIC X(100).
      77 AA      PIC X(5).
      77 BB      PIC X(5).
      77 CC      PIC X(5).
      77 SW-1    PIC 9(1) VALUE 0.
      77 PTR-1   PIC 9(3) VALUE 1.
      77 CTR     PIC 9(3) VALUE 0.
                      :
          PERFORM TEST AFTER UNTIL SW-1 NOT = 0
            MOVE SPACE TO AA BB CC
            MOVE 0     TO SW-1, CTR
            UNSTRING SEND-03
               DELIMITED BY ',' OR ALL SPACE
               INTO AA, BB, CC,
               WITH POINTER PTR-1
               TALLYING IN CTR
               NOT ON OVERFLOW MOVE 1 TO SW-1
            END-UNSTRING
             :
            AA, BB, CCを使った処理をする
             :
          END-PERFORM.
               :

注

データの個数はCTRに入っています。

5.3.3　INSPECT文

INSPECT文は，データ項目中の文字や文字列の出現回数を数えたり，それらをほかの文字列で置き換えたりします。

INSPECT文については，マニュアル「COBOL2002　言語　標準仕様編　10.8.25 INSPECT文」を参照してください。

INSPECT文の例を次に示します。COUNT-nは，その文の実行の直前にゼロになっているものと仮定します。

（例1）

実行例

  INSPECT ITEM TALLYING
      COUNT-0 FOR ALL 'AB', ALL 'D'
      COUNT-1 FOR ALL 'BC'
      COUNT-2 FOR LEADING 'EF'
      COUNT-3 FOR LEADING 'B'
      COUNT-4 FOR CHARACTERS.

  INSPECT ITEM REPLACING
      ALL 'AB' BY 'XY', 'D' BY 'X'
      ALL 'BC' BY 'VW'
      LEADING 'EF' BY 'TU'
      LEADING 'B' BY 'S'
      FIRST 'G' BY 'R'
      FIRST 'G' BY 'P'
      CHARACTERS BY 'Z'.

実行結果

ITEMの初期値 | COUNT-0 | COUNT-1 | COUNT-2 | COUNT-3 | COUNT-4 | ITEMの終了値
EFABDBCGABCFGG | 3 | 1 | 1 | 0 | 5 | TUXYXVWRXYZZPZ
BABABC | 2 | 0 | 0 | 1 | 1 | SXYXYZ
BBBC | 0 | 1 | 0 | 2 | 0 | SSVW

（例2）

実行例

  INSPECT ITEM TALLYING
    COUNT-0 FOR CHARACTERS
    COUNT-1 FOR ALL 'A'.
  INSPECT ITEM REPLACING
    CHARACTERS BY 'Z'
    ALL 'A' BY 'X'.

実行結果

ITEMの初期値 | COUNT-0 | COUNT-1 | ITEMの終了値
BBB | 3 | 0 | ZZZ
ABA | 3 | 0 | ZZZ

（例3）

実行例

   INSPECT ITEM TALLYING
     COUNT-0 FOR ALL 'AB' BEFORE 'BC'
     COUNT-1 FOR LEADING 'B' AFTER 'D'
     COUNT-2 FOR CHARACTERS AFTER 'A' BEFORE 'C'.
   INSPECT ITEM REPLACING
     ALL 'AB' BY 'XY' BEFORE 'BC'
     LEADING 'B' BY 'W' AFTER 'D'
     FIRST 'E' BY 'V' AFTER 'D'
     CHARACTERS BY 'Z' AFTER 'A' BEFORE 'C'.

実行結果

ITEMの初期値 | COUNT-0 | COUNT-1 | COUNT-2 | ITEMの終了値
BBEABDABABBCABEE | 3 | 0 | 2 | BBEXYZXYXYZCABVE
ADDDDC | 0 | 0 | 4 | AZZZZC
ADDDDA | 0 | 0 | 5 | AZZZZZ
CDDDDC | 0 | 0 | 0 | CDDDDC
BDBBBDB | 0 | 3 | 0 | BDWWWDB

（例4）

実行例

   INSPECT ITEM TALLYING
     COUNT-0 FOR ALL 'AB' AFTER 'BA' BEFORE 'BC'.
   INSPECT ITEM REPLACING
     ALL 'AB' BY 'XY' AFTER 'BA' BEFORE 'BC'.

実行結果

ITEMの初期値 | COUNT-0 | ITEMの最終値
ABABABABC | 1 | ABABXYABC

（例5）

実行例

  INSPECT ITEM CONVERTING
    'ABCD' TO 'XYZX' AFTER QUOTE BEFORE '#'.

上記のINSPECT文は，次のINSPECT文と同じです。

   INSPECT ITEM REPLACING
     ALL 'A' BY 'X' AFTER QUOTE BEFORE '#'
     ALL 'B' BY 'Y' AFTER QUOTE BEFORE '#'
     ALL 'C' BY 'Z' AFTER QUOTE BEFORE '#'
     ALL 'D' BY 'X' AFTER QUOTE BEFORE '#'.

実行結果

ITEMの初期値 | ITEMの最終値
AC'AEBDFBCD#AB'D | AC'XEYXFYZX#AB'D

5.4　条件分岐文

条件分岐文には，EVALUATE文およびIF文があります。

＜この節の構成＞

5.4.1　EVALUATE文

5.4.2　IF文

5.4.1　EVALUATE文

EVALUATE文は，多枝分岐，多枝結合の構造を記述し，複数の条件を評価できます。プログラムが次に取る動作は，これらの評価の結果によって決まります。

EVALUATE文については，マニュアル「COBOL2002　言語　標準仕様編　10.8.18 EVALUATE文」を参照してください。

EVALUATE文の例を次に示します。

（例1）

各選択対象の組中の選択対象の数は，選択主体の数と等しくする必要があります。

             ：
   EVALUATE X ALSO Y ALSO Z
       WHEN 1 ALSO 2 ALSO ANY
         ADD A TO B
       WHEN 3 ALSO 4 ALSO 5
         ADD C TO B
       WHEN OTHER
         ADD B TO A
   END-EVALUATE.
             ：

（例2）

   EVALUATE A
     WHEN  1
     WHEN  3
     WHEN  5
          :
     WHEN 19
       MOVE 'ODD' TO B             *>1.
     WHEN  2
     WHEN  4
           :
     WHEN 20
       MOVE 'EVEN' TO B            *>2.
     WHEN OTHER
       MOVE 'OUT  OF  RANGE' TO B  *>3.
   END-EVALUATE.

整数項目Aの値が20以下の奇数のとき，1.のMOVE文が実行されます。

整数項目Aの値が20以下の偶数のとき，2.のMOVE文が実行されます。

整数項目Aの値が20を超えるとき，または0以下のとき，3.のMOVE文が実行されます。

5.4.2　IF文

IF文は，条件を評価し，真ならばTHENの処理を，偽ならばELSEの処理を実行します。

IF文については，マニュアル「COBOL2002　言語　標準仕様編　10.8.23 IF文」を参照してください。

IF文の処理の流れを次に示します。

図5-5　IF文の処理の流れ

IF文の例を次に示します。

（例1）

THEN節とELSE節の両方に手続きがある場合

実行例

処理の流れ

（例2）

THEN節だけに手続きがある場合（ELSE NEXT SENTENCEを省略したとき）

実行例

処理の流れ

C1に対する文1はa1で，文2は省略されています。

C2に対する文1はa2で，文2はa3です。

C3に対する文1はS2で，文2はS3です。

C4に対する文1はS5で，文2は省略されています。

省略されているELSE NEXT SENTENCEを補うと，例2の実行例は次のようになります。

実行例

5.5　表操作

表操作にはSEARCH文があります。

＜この節の構成＞

5.5.1　SEARCH文

5.5.1　SEARCH文

SEARCH文は，指定した条件を満足する表要素を探し，対応する指標の値がその表要素を指すようにします。

SEARCH文については，マニュアル「COBOL2002　言語　標準仕様編　10.8.41 SEARCH文」を参照してください。

WHEN指定がある場合の，SEARCH文の流れを次に示します。

図5-6　SEARCH文の処理の流れ（WHEN指定が二つある場合）

流れ図

注※1

SEARCH文中に書かれたときだけ実行されます。

注※2

GO TO文のある無条件文の終了を必要としません。SEARCH文の終わりに制御が移ります。

SEARCH文の例を次に示します。

（例）

多次元の表引き操作とSEARCH文

SEARCH文で参照する表が2次元以上の場合，各OCCURS句にINDEXED BYで，指標名を付けておく必要があります。

SEARCH文が変更するのは，一意名1用の指標名の値，および（VARYING指定があれば）指標名1または一意名2だけです。

2次元以上の表全体を表引きするには，各次元にSEARCH文を何度か実行しなければなりません。

      01 TBL.
        05 A OCCURS 10
             ASCENDING K1 INDEXED BY IX.
          10 K1 PIC X(2).
          10 B OCCURS 5
               DESCENDING K2 INDEXED BY JX.
            20 K2 PIC 9(4).
            20 C  PIC X(20).

K1の値が 'AB 'で，K2の値が1950のときの表要素Cを求めるには，次のようにします。

          SEARCH ALL A AT END GO TO OWARI
                 WHEN K1(IX) = 'AB'
                      NEXT SENTENCE.

          SEARCH ALL B AT END GO TO OWARI
                 WHEN K2(IX，JX) = 1950
                      MOVE C(IX，JX) TO X
                      GO TO OWARI.

5.6　手続き分岐

手続き分岐文には，GO TO文，PERFORM文，およびCONTINUE文があります。

＜この節の構成＞

5.6.1　GO TO文

5.6.2　PERFORM文

5.6.3　CONTINUE文

5.6.1　GO TO文

GO TO文については，マニュアル「COBOL2002　言語　標準仕様編　10.8.21 GO TO文」を参照してください。

GO TO文の例を次に示します。

（例1）

          MOVE A TO B
          GO TO P           *>1.
          ADD C TO D        *>2.
              ：
      P.
              ：

1.のGO TO文を実行すると，制御はPに移ります。

2.のADD文は実行されません。

（例2）

      01 DATA-1 PIC 9(9).
                ：
           GO TO P1 P2 P3
              DEPENDING DATA-1.
                ：
       P1.
                ：
       P2.
                ：

DATA-1の値が2のとき，GO TO文を実行すると，2番目に指定した手続き名（P2）に制御が移ります。

5.6.2　PERFORM文

PERFORM（実行）文は，幾つかの手続きに明示的に制御を移し，指定した手続きの実行が終わると，暗黙的に制御を戻します。また，PERFORM文は，そのPERFORM文の範囲に含まれる一つ以上の文の実行を制御するためにも使用されます。

PERFORM文については，マニュアル「COBOL2002　言語　標準仕様編　10.8.31 PERFORM文」を参照してください。

＜この項の構成＞

(1)　基本的なPERFORM文の実行例

(2)　VARYING指定のあるPERFORM文の実行例

(3)　PERFORM文の実行範囲

(1)　基本的なPERFORM文の実行例

(a)　ある条件を満たすまで処理を繰り返す場合（PERFORM UNTIL条件）

処理の流れ

実行例

      PERFORM UNTIL フラグ = '1'     *>1.
        READ 入力ファイル
          AT END MOVE '1' TO フラグ  *>2.
        END-READ
        IF  フラグ = '0'
          COMPUTE A = A + 1          *>3.
        END-IF
      END-PERFORM.

ファイル終了フラグが'1'になるまで（ファイル入力が終了するまで），1.～3.の処理を繰り返します。

入力ファイルからレコードを入力します。ファイル終了条件が成立すると，ファイル終了フラグに'1'をセットします。

ファイル終了条件が成立しない場合は，Aに1を加算します。

(b)　指定した回数だけ処理を繰り返す場合（PERFORM 回数 TIMES）

処理の流れ

実行例

      PERFORM 10 TIMES      *>1.
        COMPUTE I = I + 10  *>2.
        DISPLAY I           *>3.
      END-PERFORM.

2.と3.を10回繰り返します。

Iに10を加算した結果をIに入れます。

Iを出力します。
Iが初期設定で0になっている場合，出力結果は，10から始まって10飛びの数です。

(c)　手続きを呼び出す場合（そとPERFORM）

処理の流れ

実行例

      主処理.
          OPEN INPUT 入力ファイル
               OUTPUT 出力ファイル.
          PERFORM 入力処理.                   *>1.
          PERFORM UNTIL 終了フラグ = '1'      *>2.
            PERFORM 出力処理                  *>3.
            PERFORM 入力処理                  *>4.
          END-PERFORM.
          CLOSE 入力ファイル
                出力ファイル.
          STOP RUN.
      入力処理.
          READ 入力ファイル
               AT END MOVE '1' TO 終了フラグ  *>5.
          END-READ.
      出力処理.
          MOVE 入力レコード TO 出力レコード.  *>6.
          WRITE 出力レコード.

入力処理を呼び出します。

うちPERFORMで3.，4.をファイル終了条件が成立するまで繰り返します。

出力処理を呼び出します。

入力処理を呼び出します。

入力処理を実行します。

出力処理を実行します。

(d)　条件を満たす前にPERFORM文を終了する場合

実行例

          PERFORM VARYING I FROM 1 BY 1 UNTIL I > 10
              ：
            PERFORM VARYING J FROM 1 BY 1 UNTIL J > 10
              ：
              IF A(J) = 0
                EXIT PERFORM  …1.
              END-IF
            END-PERFORM  …2.
              ：
          END-PERFORM.

1.のEXIT PERFORM文を実行すると，2.のEND-PERFORMの次の文に制御が移ります。

(2)　VARYING指定のあるPERFORM文の実行例

(a)　PERFORM文にTEST BEFORE指定があり，VARYING指定中の条件が一つの場合（一つの一意名を変化させる場合）

処理の流れ

形式

          PERFORM WITH TEST BEFORE VARYING
                  一意名2 FROM ｛一意名3｜定数1｝
                          BY   ｛一意名4｜定数2｝
                          UNTIL  条件1
            無条件文1
                ：
          END-PERFORM.

一意名2のデータ項目の内容を定数1，またはPERFORM文の開始時の一意名3のデータ項目の現在値に等しくします。

条件1を検査します。
条件1を満たしていれば，制御はPERFORM文の終わりに移ります。
条件1を満たしていなければ，3.に進みます。

指定された文の組（無条件文1）を1回実行します。

一意名2のデータ項目の値に，定数2または一意名4のデータ項目の増加分または減少分を加え，2.に戻ります。

PERFORM文の実行を開始するとき，すでに条件1が満たされていれば，制御はPERFORM文の終わりに移ります。

PERFORM文にTEST BEFORE指定もTEST AFTER指定も書かない場合は，TEST BEFORE指定を書いたものとみなされます。

(b)　PERFORM文にTEST BEFORE指定があり，VARYING指定中の条件が二つの場合（二つの一意名のデータ項目を変化させる場合）

処理の流れ

形式

          PERFORM WITH TEST BEFORE VARYING
                  一意名2 FROM ｛一意名3｜定数1｝
                          BY   ｛一意名4｜定数2｝
                          UNTIL 条件1
            AFTER 一意名5 FROM ｛一意名6｜定数3｝
                          BY   ｛一意名7｜定数4｝
                          UNTIL  条件2
            無条件文1
               ：
          END-PERFORM

一意名2のデータ項目の内容を，定数1または一意名3のデータ項目の現在値に等しくします。

一意名5のデータ項目の内容を，定数3または一意名6のデータ項目の現在値に等しくします。

条件1を検査します。
条件1を満たしていれば，制御はPERFORM文の終わりに移ります。
条件1を満たしていなければ，4.に進みます。

条件2を検査します。
条件2を満たしていれば，一意名2のデータ項目の内容に定数2または一意名4のデータ項目の内容を加え，2.に戻ります。
条件2を満たしていなければ，5.に進みます。

指定された文の組（無条件文1）を1回実行します。

一意名5のデータ項目の内容に定数4または一意名7のデータ項目の内容を加えて，4.に戻ります。

PERFORM文の実行が終わったとき，一意名5のデータ項目には，定数3または一意名6のデータ項目の現在値が入っています。一意名2のデータ項目には，増加分や減少分によって最後に変更された値が入っています。

PERFORM文の実行を始めたときに条件1が満足されていると，一意名2のデータ項目には，定数1または一意名3のデータ項目の現在値が入っています。

PERFORM文にTEST BEFORE指定もTEST AFTER指定も書かない場合は，TEST BEFORE指定を書いたものとみなされます。

(c)　PERFORM文にTEST AFTER指定があり，VARYING指定中の条件が一つの場合（一つの一意名を変化させる場合）

処理の流れ

形式

      PERFORM WITH TEST AFTER
              VARYING 一意名2
              FROM ｛一意名3｜定数1｝
              BY ｛一意名4｜定数2｝UNTIL 条件1
        無条件文1
            ：
      END-PERFORM.

一意名2のデータ項目の内容を，定数1またはPERFORM文開始時の一意名3のデータ項目の現在値に等しくします。

指定された文の組（無条件文1）を1回実行します。

条件1を検査します。
条件1を満たしていれば，制御はPERFORM文の終わりに移ります。
条件1を満たしていなければ，4.に進みます。

一意名2のデータ項目の値に定数2または一意名4のデータ項目の値の増加分または減少分を加え，2.に戻ります。

(d)　PERFORM文にTEST AFTER指定があり，VARYING指定中の条件が二つの場合（二つの一意名のデータ項目を変化させる場合）

処理の流れ

形式

      PERFORM WITH TEST AFTER
              VARYING 一意名2 FROM 一意名3
              BY 一意名4 UNTIL 条件1
              AFTER 一意名5 FROM 一意名6
              BY 一意名7 UNTIL 条件2
        無条件文1
            ：
      END-PERFORM.

一意名2のデータ項目の内容を，定数1または一意名3のデータ項目の現在値に等しくします。

一意名5のデータ項目の内容を，定数3または一意名6のデータ項目の現在値に等しくします。

指定された文の組（無条件文1）を1回実行します。

条件2を検査します。
条件2を満たしていれば，5.に進みます。
条件2を満たしていなければ，一意名5のデータ項目の内容に定数4または一意名7のデータ項目の内容を加え，3.に戻ります。

条件1を検査します。
条件1を満たしていれば，制御はPERFORM文の終わりに移ります。
条件1を満たしていなければ，6.に進みます。

一意名2のデータ項目の内容に定数2または一意名4のデータ項目の内容を加えて2.に戻ります。

PERFORM文の実行が完全に終わったあと，AFTER指定またはVARYING指定によって変更される各データ項目には，指定された文の組が最後に実行されたときと同じ値が入っています。

PERFORM文の指定された文の組の実行中に，次の項目を変更した場合，その変更が評価されてPERFORM文の実行に影響を与えます。

VARYING指定の一意名2のデータ項目

BY指定の一意名4のデータ項目

AFTER指定の一意名5のデータ項目

FROM指定の一意名3のデータ項目

二つの一意名のデータ項目を変化させるとき，一意名5の繰り返し（FROM，BY，UNTIL）が完全に1回終わるたびに，一意名2のデータ項目の内容が変更されます。三つ以上の一意名のデータ項目を変化させるときの機構も，一意名が二つのときと同じで，AFTER指定のデータ項目の繰り返しが完全に終わるたびに，先行するAFTER指定のデータ項目が変更されます。

(3)　PERFORM文の実行範囲

PERFORM文の実行範囲にほかのPERFORM文がある場合，含まれているPERFORM文の実行範囲は，初めのPERFORM文の論理的な実行範囲の内側に完全に含まれているか，または完全に外側である必要があります。PERFORM文の実行範囲内で始められたほかのPERFORM文の制御は，前者のPERFORM文の出口を通ることはできません。また，実行中の2個以上のPERFORM文は，共通の出口を持つこともできません。

PERFORM文の詳細については，マニュアル「COBOL2002　言語　標準仕様編　10.8.31 PERFORM文」を参照してください。

PERFORM文の実行範囲の例を次に示します。

（例1）

正しい例（完全に内側に含まれている）

（例2）

正しい例（完全に外側にある）

（例3）

正しい例（同時に実行されていない）

（例4）

誤った例（後者のPERFORM文の制御が，前者のPERFORM文の出口を通っている）

（例5）

正しい例（同時に実行されていない）

5.6.3　CONTINUE文

CONTINUE文は，条件文や無条件文などに使用し，実行文が存在しないことを示します。CONTINUE文は，実行に影響を与えません。

CONTINUE文については，マニュアル「COBOL2002　言語　標準仕様編　10.8.9 CONTINUE文」を参照してください。

CONTINUE文の例を次に示します。

（例）

          IF 条件1 THEN
            無条件文1
          ELSE
            CONTINUE  *>ELSE側の処理は何もないことを示す
          END-IF.

5.7　データ転記文

データ転記文には，INITIALIZE文，MOVE文，およびSET文があります。

＜この節の構成＞

5.7.1　INITIALIZE文

5.7.2　MOVE文

5.7.3　SET文

5.7.1　INITIALIZE文

INITIALIZE文は，特定の型のデータ領域に，あらかじめ決められた値を設定します。例えば，数字データにはゼロを，英数字データには空白を設定できます。

INITIALIZE文については，マニュアル「COBOL2002　言語　標準仕様編　10.8.24 INITIALIZE文」を参照してください。

INITIALIZE文の例を次に示します。

（例1）

      01 DATAX .
        05 A      PIC A(5).
        05 B      PIC X(5).
        05 C      PIC 9999.
        05 D      PIC S9(5).
        05 E      REDEFINES D PIC X(5).
        05 F      PIC S9(3)V9(2).
        05 G      PIC 9(4)PP.
        05 H      PIC X(4)0(3)9.
        05 I      PIC A(5)BA(5).
        05 J      PIC **,**9.
        05 K      PIC 99/99.
        05 L      PIC 9(4).9(2).
        05 M      PIC +¥9(5).
        05 N      PIC ¥9(5)-.
        05 O      PIC ¥**,***CR.
        05 P      PIC ¥**,***DB.
        05 Q      PIC ZZZ.99.
        05 R      PIC ***.99.
        05 S      PIC ¥¥¥,¥¥9+.
        05 T      PIC S9(3) USAGE PACKED-DECIMAL.
        05 U      PIC S9(3) USAGE COMP OCCURS 10 TIMES.
        05 V      PIC 1(3).
        05 W      PIC 1(3) USAGE BIT.
        05 X      PIC XAX.
        05 Y      PIC N(3).
        05 Z      PIC N(2)BN(1).
        05 FILLER PIC X.

項目
INITIALIZE DATAX
INITIALIZE DATAX REPLACING ALPHABETIC DATA BY 'A'
INITIALIZE DATAX REPLACING ALPHANUMERIC
DATA BY 'A1'
INITIALIZE DATAX REPLACING NUMERIC DATA BY 1
INITIALIZE DATAX REPLACING ALPHANUMERIC-EDITED
DATA BY 'A'

A
△△△△△
A△△△△
設定しない
設定しない
設定しない

B
△△△△△
設定しない
A1△△△
〃
〃

C
符号なし外部10進の「0000」
〃
設定しない
符号なし外部10進の「0001」
〃

D
符号付き外部10進の「00000」
〃
〃
符号付き外部10進の「00001」
〃

E
設定しない
〃
〃
設定しない
〃

F
符号なし外部10進の「00000」
〃
〃
符号なし外部10進の「00100」
〃

G
符号なし外部10進の「0000」
〃
〃
符号なし外部10進の「0000」
〃

H
△△△△000
〃
〃
〃
A△△△000△

I
△△△△△△△△△△△
〃
〃
〃
A△△△△△△△△△△

J
*****0
〃
〃
〃
設定しない

K
00/00
〃
〃
〃
〃

L
0000.00
〃
〃
〃
〃

M
+¥00000
〃
〃
〃
〃

N
¥00000△
〃
〃
〃
〃

O
*********
〃
〃
〃
〃

P
*********
〃
〃
〃
〃

Q
△△△.00
〃
〃
〃
〃

R
***.00
〃
〃
〃
〃

S
△△△△△¥0+
〃
〃
〃
〃

T
符号付き内部10進の「000」
〃
〃
符号付き内部10進の「001」
〃

U
各要素に2進形式の値000
〃
〃
各要素に2進形式の値001
〃

V
000
〃
〃
設定しない
〃

W
内部ブール形式の0
〃
〃
〃
〃

X
△△△
〃
A1△
〃
〃

Y
▲▲▲
〃
設定しない
〃
〃

Z
▲▲▲▲
〃
〃
〃
〃

FILLER※
設定しない
〃
〃
〃
〃

項目
INITIALIZE DATAX REPLACING NUMERIC
-EDITED DATA BY 4
INITIALIZE DATAX REPLACING NATIONAL
DATA BY N'花'
INITIALIZE DATAX REPLACING NATIONAL-EDITED DATA BY N'花'

A
設定しない
設定しない
設定しない

B
〃
〃
〃

C
〃
〃
〃

D
〃
〃
〃

E
〃
〃
〃

F
〃
〃
〃

G
〃
〃
〃

H
〃
〃
〃

I
〃
〃
〃

J
*****4
〃
〃

K
00/04
〃
〃

L
0004.00
〃
〃

M
+¥00004
〃
〃

N
¥00004△
〃
〃

O
¥*****4△△
〃
〃

P
¥*****4△△
〃
〃

Q
△△4.00
〃
〃

R
**4.00
〃
〃

S
△△△△△¥4+
〃
〃

T
設定しない
〃
〃

U
〃
〃
〃

V
〃
〃
〃

W
〃
〃
〃

X
〃
〃
〃

Y
〃
花▲▲
〃

Z
〃
設定しない
花▲▲▲

FILLER※
〃
〃
設定しない

（凡例）

△：半角の空白を示す

▲：全角の空白を示す

注※

FILLER句については，マニュアル「COBOL2002　言語　標準仕様編　9.16.22 記述項名句」を参照してください。

（例2）

オブジェクト参照を使用したINITIALIZE文の例

      01 DATAY USAGE OBJECT REFERENCE.
      01 DATAZ USAGE OBJECT REFERENCE.
               ：
          INITIALIZE DATAY REPLACING OBJECT-REFERENCE
                           DATA BY DATAZ.
               ：

この場合，次の文を実行した結果と同じになります。

          SET DATAY TO DATAZ.

5.7.2　MOVE文

MOVE文は，編集規則に従って，データを一つ以上のデータ領域に移します。

MOVE文については，マニュアル「COBOL2002　言語　標準仕様編　10.8.28 MOVE文」を参照してください。

MOVE文の例を次に示します。

（例1）

一つまたは複数のデータを転記する場合

                  ：
      01 A PIC X(3).
      01 B PIC X(3).
      01 C PIC X(3).
      01 D PIC X(3).
      01 E PIC X(3).
                  ：
          MOVE A TO B.      *>1.
          MOVE A TO C D E.  *>2.
                  ：

データを項目Aから項目Bに転記します。

データを項目Aから項目C，D，Eに転記します。

（例2）

MOVE文の送り出し側作用対象に添字が付いている場合

添字はデータを先頭の受け取り側作用対象に移す直前に1回だけ評価されます。

下記の例では，(A)は(B)と同じです。

(A)

MOVE a(b) TO b c(b).

(B)

MOVE a(b) TO temp.
MOVE temp TO b.
MOVE temp TO c(b).

tempは，このシステムが用意した中間結果の項目を示します。

5.7.3　SET文

SET文は，次の手段を提供します。

表要素に関連する指標を設定して，表操作の参照点を確立する

外部スイッチの状態を変更する

条件変数の値を変更する

オブジェクト参照を設定する

画面項目に関連する属性を変更する

最新例外状態をクリアする

SET文については，マニュアル「COBOL2002　言語　標準仕様編　10.8.43 SET文」，およびマニュアル「COBOL2002　言語　拡張仕様編　13.5.8 SET文（WINDOW SECTION）」を参照してください。

＜この項の構成＞

(1)　表要素に関連する指標を設定するSET文

(2)　外部スイッチの状態を変更するSET文

(3)　条件変数の値を変更するSET文

(4)　オブジェクト参照を設定するSET文

(5)　最新例外状態をクリアするSET文

(1)　表要素に関連する指標を設定するSET文

表要素に関連する指標を設定して，表操作の参照点を確立するSET文の例を次に示します。

（例1）

指標名から指標名に転記する場合

      05 A PIC X(5) OCCURS 10 INDEXED BY K.
      05 B PIC 9(8) OCCURS 10 INDEXED BY J.

指標名Kには，表の6番目の要素を参照するときの値，5×6=30が入っています。ここで次のSET文を実行すると，Kの値30を出現番号6に換算して(30/5=6)，Bの出現番号6に対応する値8×6=48をJに設定します。

      SET J TO K.

（例2）

指標データ項目から指標名に転記する場合

      05 A PIC PP999 OCCURS 15 INDEXED BY K.
      05 B USAGE INDEX.

Bの値が30のとき，次のSET文を実行すると，Bの値を出現番号に対応して換算しないで，そのままKに設定します。

      SET K TO B.

（例3）

整数項目または整数から指標名に転記する場合

      05 A PIC X(5) OCCURS 30 INDEXED BY K.
      05 B PIC 9(2) VALUE 11.

ここで次のSET文のどちらかを実行すると，Bの値11または整数11を出現番号とみなし，それに対応する値5×11=55をKに設定します。

      SET K TO B

または

      SET K TO 11

（例4）

      05 A PIC X(5) OCCURS 12 INDEXED BY K.
      05 B USAGE INDEX.
      05 C USAGE INDEX.

Kには，Aの出現番号7に対応する値5×7=35が入っています。ここで次のSET文を実行すると，Kの値を変換しないで，35をそのままBに設定します。

      SET B TO K

そのあとで次のSET文を実行すると，Bの値を変換しないで，35をそのままCに設定します。

      SET C TO B

（例5）

      05 A PIC 9(3) OCCURS 20 INDEXED BY K.
      05 B PIC 9(8).

Kには，Aの出現番号12に対応する値3×12=36が入っています。ここで次のSET文を実行すると，Kの値を出現番号12に変換(36/3)してBに12を設定します。

      SET B TO K

（例6）

      05 A PIC X(7) OCCURS 30 INDEXED BY K.
      05 B PIC A(3) OCCURS 30 INDEXED BY J.
      05 C PIC 9(2) VALUE 3.

Kには出現番号6に対応する値7×6=42が入っています。Jには出現番号25に対応する値3×25=75が入っています。

ここで，次のSET文を実行すると，Kには出現番号6+3=9に対応する値7×9=63が入ります。

      SET K UP BY C

そのあとで次のSET文を実行すると，Kには出現番号9-1=8に対応する値7×8=56が入ります。

      SET K DOWN BY 1

また，次のSET文を実行すると，Jには出現番号25-3=22に対応する値3×22=66が入ります。

      SET J DOWN BY C

そのあとで次のSET文を実行すると，Jには出現番号22+8=30に対応する値3×30=90が入ります。

      SET J UP BY 8

(2)　外部スイッチの状態を変更するSET文

外部スイッチの状態を変更するSET文の例を次に示します。

（例）

      ENVIRONMENT DIVISION.
      CONFIGURATION SECTION.
      SPECIAL-NAMES.
      UPSI-0 IS SW0
             ON  STATUS IS ONIND0
             OFF STATUS IS OFFIND0.
           ：
      PROCEDURE DIVISION.
           ：
          IF OFFIND0 THEN
            SET SW0 TO ON
          END-IF.

外部スイッチの状態を変更するSET文の詳細は，「16.2.4　外部スイッチ」を参照してください。

(3)　条件変数の値を変更するSET文

条件変数の値を変更するSET文の例を次に示します。

（例）

      03 OF-WEEK PIC X(3).
      88 HOLIDAY VALUE 'SUN'.  *>1.
      88 WEEKDAY VALUE 'MON' 'TUE' 'WED'
                       'THU' 'FRI' 'SAT'.  *>1.

OF-WEEKに対する条件名

ここで次のSET文を実行すると，OF-WEEKには'SUN'が設定されます。

      SET HOLIDAY TO TRUE

また，次のSET文を実行すると，OF-WEEKにはWEEKDAYに指定された最初の定数である'MON'が設定されます。

      SET WEEKDAY TO TRUE

複数の条件名を書いたときは，そのSET文中に指定したのと同じ順序で，各条件名に対して別々のSET文を書いたのと同じ結果となります。条件名に添字が付いている場合は，繰り返すたびに一つずつ順番に評価します。

(4)　オブジェクト参照を設定するSET文

「20.2.7　オブジェクト指向による適合」を参照してください。

(5)　最新例外状態をクリアするSET文

「21.7.3　最新例外状態のクリア」を参照してください。

6.　ファイル入出力機能

COBOL2002の入出力処理では，順編成ファイル，相対編成ファイル，索引編成ファイル，テキスト編成ファイル，CSV編成ファイル，およびHiRDBによる索引編成ファイルが使用できます。この章では，これらのファイルに入出力するためのアクセス方法について説明します。

＜この章の構成＞

6.1　ファイル入出力機能の種類と概要

6.2　ファイル割り当ての共通規則

6.3　入出力エラー処理

6.4　順編成ファイル

6.5　相対編成ファイル

6.6　ISAMによる索引編成ファイル

6.7　テキスト編成ファイル

6.8　CSV編成ファイル（表計算プログラムファイル）

6.9　HiRDBによる索引編成ファイル（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC)で有効）

6.10　ラージファイル入出力機能

6.11　ファイル入出力拡張機能

6.1　ファイル入出力機能の種類と概要

＜この節の構成＞

6.1.1　使用できるファイル編成

6.1.2　使用できるファイル形式

6.1.1　使用できるファイル編成

このシステムで使用できるファイル編成を次に示します。

表6-1　COBOL2002で使用できるファイル編成

ORGANIZATION句の指定
ファイル編成
ファイル形式
ファイル管理
システム
使用できるファイル

SEQUENTIAL
順編成ファイル（固定長）
バイナリデータの集合
－

COBOL85またはCOBOL2002で作成した順編成固定長ファイル

ほかのアプリケーションで作成したレコード長の整数倍の長さを持つバイナリファイル

順編成ファイル（可変長）
COBOL2002が独自に定める形式のファイル
COBOL2002独自のファイル管理システム

COBOL85またはCOBOL2002で作成した順編成可変長ファイル※¹

RELATIVE
相対編成ファイル
COBOL2002が独自に定める形式のファイル
COBOL2002独自のファイル管理システム

COBOL85またはCOBOL2002で作成した相対編成ファイル

INDEXED
ISAMによる索引編成ファイル
ファイル管理システムに依存する
索引順編成ファイル管理

COBOL85またはCOBOL2002で作成した索引編成ファイル※²

ISAMユティリティで作成した索引編成ファイル

LINE SEQUENTIAL
テキスト編成ファイル
テキスト形式
－

COBOL85またはCOBOL2002で作成したテキスト編成ファイル

エディタなどで作成したテキストファイル

CSV
CSV編成ファイル
表計算プログラム用CSV形式
－

COBOL85またはCOBOL2002で作成したCSV編成ファイル

表計算プログラムで作成したCSVファイル

RDB
HiRDBによる索引編成ファイル
ファイル管理システムに依存する
HiRDB

HiRDBユティリティで作成したファイル

（凡例）

－：該当しない

注※1

ただし，行制御ありで作成したファイルは使用できません。

注※2

既存の索引編成ファイルに対してOPEN OUTPUTを実行した場合，標準は追加書きとなります。詳細は，「6.6.1　ファイルの作成と割り当て方法」の「(5)　索引編成ファイルに対するOPENモード」を参照してください。

6.1.2　使用できるファイル形式

このシステムのファイル入出力処理で扱えるファイル形式は，それぞれのファイル編成で使用するファイル管理システムに依存します。ファイル編成とファイル管理システムの対応については，「表6-1　COBOL2002で使用できるファイル編成」を参照してください。

SELECT句のASSIGN句で，装置名にMTやLPを指定しても意味を持ちません。

ファイルサイズが2GB以上のファイル（ラージファイル）への入出力の詳細は，「6.10　ラージファイル入出力機能」を参照してください。
ラージファイル入出力機能を使用できるファイル編成は，次のとおりです。

順編成ファイル

テキスト編成ファイル

CSV編成ファイル

6.2　ファイル割り当ての共通規則

COBOLプログラムからファイルにアクセスするには，環境部のファイル管理記述項で，SELECT句で指定したCOBOLのファイル名に対して，ASSIGN句を使って物理ファイル名（OSのファイルシステム上での実体ファイル名）を割り当てる必要があります。SELECT句，ASSIGN句の文法規則については，マニュアル「COBOL2002　言語　標準仕様編　8.3.4 ファイル管理記述項」を参照してください。

SELECT句で指定したファイル名に対して，物理ファイル名を割り当てる方法には，次の3種類があります。

定数指定
SELECT句のファイル名に対して，ASSIGN句で「'/DIR/FILE1.FIL'」のように物理ファイル名を直接指定する方法です。

環境変数指定
SELECT句のファイル名に対してASSIGN句で「SYS001」のような外部装置名を指定しておき，実行時に環境変数を使って外部装置名に対応する物理ファイル名を割り当てる方法です。

データ名指定
SELECT句のファイル名に対してASSIGN句でCOBOLのデータ名を指定しておき，データ名に物理ファイル名を転記して，指定する方法です。

ここでは，物理ファイル割り当て時の共通規則，それぞれの割り当て方法，およびプログラムとファイルとの関係について順に説明します。

＜この節の構成＞

6.2.1　定数指定

6.2.2　環境変数指定

6.2.3　データ名指定

6.2.1　定数指定

定数指定は，SELECT句で指定したファイル名に対し，ASSIGN句で物理ファイルを直接割り当てる方法です。

形式

SELECT 〔OPTIONAL〕 ファイル名 ASSIGN TO '物理ファイル名'

構文規則

物理ファイル名は，引用符（'）で囲んで指定します。

物理ファイル名は，ルートからの絶対パス名を指定します。このファイル名は，ファイルシステムの規則に従って指定する必要があります。

ディレクトリ名，ファイル名にNULL文字（X'00'）および半角空白文字（X'20'）を含んではなりません。NULL文字または半角空白文字を含んだディレクトリやファイル名を指定した場合，NULL文字または半角空白文字の直前までの文字列が有効となり，以降の文字列は無視されます。

一般規則

次の場合，定数で指定した物理ファイルがなければ，指定した名称の物理ファイルが作成されます。
（物理ファイルが作成される場合）

ファイルをOUTPUTモードで開いたとき

SELECT句のOPTIONAL指定のあるファイルをI-OまたはEXTENDモードで開いたとき
このとき，SELECT句にOPTIONAL指定がある場合は，入出力状態に05が設定されます。

ファイルが作成される場所は，定数に指定した物理ファイル名の絶対パスに従います。ただし，指定した物理ファイル名中のディレクトリ名に相当するディレクトリがないと，物理ファイルは作成されません。

定数によって指定されるファイル名が有効となるかどうかは，ファイルシステムに依存します。

ファイル名が絶対パス名でない場合は，OSの環境設定に従います。

ファイルを標準入力（stdin）から読み込んだり，標準出力（stdout）または標準エラー出力（stderr）へ書き出したりしたい場合は，定数にstdin，stdout，またはstderrを指定します。ただし，索引編成ファイル，相対編成ファイル，順編成の行制御のない可変長ファイルには，stdin，stdout，およびstderrを指定できません。また，順編成の可変長ファイルには，stdinを指定できません。指定した場合，実行時にエラーとなります。

標準入出力ファイルを扱う場合，COBOLはすでに開かれているものとして処理します。

標準入力（stdin），標準出力（stdout），および標準エラー出力（stderr）を指定する場合は，英小文字で指定してください。「STDIN」のように英大文字で指定した場合，物理ファイル名として扱われます。

入出力状態の値とファイル自動生成規則（定数指定の場合）

定数指定でファイルを割り当てた場合，ファイル入出力時の入出力状態の値，および物理ファイルが自動作成されるかどうかは，次の規則に従います。

OPENモード
OPTIONAL指定の有無
物理ファイルの状態

すでに存在する
存在しない

INPUT
なし
FS=00
FS=35

あり
FS=00
FS=05
自動作成されない

I-O
なし
FS=00
FS=35

あり
FS=00
FS=05
自動作成される※1

OUTPUT
なし
FS=00
再作成する※2
FS=00
自動作成される※1

EXTEND
なし
FS=00
FS=35

あり
FS=00
FS=05
自動作成される※1

（凡例）

FS=nn：FILE STATUS句を指定したときに，入出力状態にnnが設定されることを示す

注※1

自動作成される物理ファイル名は，SELECT句で指定した定数の名称となります。

注※2

再作成とは，ファイル中にデータレコードがない状態にすることです。

COBOLプログラムの記述例

プログラム内で使用するファイル名"FILE-1"を，"/DIR"ディレクトリに格納されている"FILE1.FIL"ファイルに割り当てる例を，次に示します。

      SELECT FILE-1 ASSIGN TO '/DIR/FILE1.FIL'

6.2.2　環境変数指定

環境変数指定は，指定したファイル名に対し，ASSIGN句で外部装置名（処理系作成者語）を割り当てる方法です。外部装置名に対応する物理ファイル名は，外部装置名に対応する環境変数を使用して指定します。

COBOLプログラムでの外部装置名の記述と，環境変数の指定形式を次に示します。

形式（COBOLプログラム）

SELECT 〔OPTIONAL〕 ファイル名 ASSIGN TO 外部装置名

形式（環境変数）

CBL_外部装置名=物理ファイル

構文規則

ASSIGN句で指定した外部装置名に対応する環境変数は，外部装置名の先頭にCBL_を付けたものとなります。この環境変数に，外部装置名と対応づけたい物理ファイル名を指定します。

外部装置名に「-」が含まれる場合，環境変数名では「_」に置き換えます。

物理ファイル名は，ルートからの絶対パス名を指定します。このファイル名は，ファイルシステムの規則に従って指定する必要があります。

ディレクトリ名，ファイル名にNULL文字（X'00'）を含んではなりません。NULL文字を含んだディレクトリやファイル名を指定した場合，NULL文字の直前までの文字列が有効となり，以降の文字列は無視されます。

一般規則

次の場合，環境変数で指定した物理ファイルがなければ，指定した名称の物理ファイルが作成されます。
（物理ファイルが作成される場合）

ファイルをOUTPUTモードで開いたとき

SELECT句のOPTIONAL指定のあるファイルをI-OまたはEXTENDモードで開いたとき
このとき，SELECT句にOPTIONAL指定がある場合は，入出力状態に05が設定されます。

ファイルが作成される場所は，環境変数に指定した物理ファイル名の絶対パスに従います。ただし，指定した物理ファイル名中のディレクトリ名に相当するディレクトリがないと，物理ファイルは作成されません。

外部装置名にSYSIN，SYSOUT，SYSPUNCHを割り当てた場合，次に示す文があると同一ファイルへの割り当てになります。このとき，結果は保証しませんので注意してください。
・SYSIN指定のACCEPT文
・SYSOUT／SYSPUNCH指定のDISPLAY文

環境変数によって指定されるファイル名が有効となるかどうかは，ファイルシステムに依存します。

ファイル名が絶対パス名でない場合は，OSの環境設定に従います。

ファイルを標準入力（stdin）から読み込んだり，標準出力（stdout）または標準エラー出力（stderr）へ書き出したりしたい場合は，環境変数にstdin，stdout，またはstderrを指定します。ただし，索引編成ファイル，相対編成ファイル，順編成の行制御のない可変長ファイルには，stdin，stdout，およびstderrを指定できません。また，順編成の可変長ファイルには，stdinを指定できません。指定した場合，実行時にエラーとなります。

標準入出力ファイルを扱う場合，COBOLはすでに開かれているものとして処理します。

環境変数CBL_外部装置名は，OPEN文を実行するごとに環境変数の値が参照されます。

標準入力（stdin），標準出力（stdout），および標準エラー出力（stderr）を指定する場合は，英小文字で指定してください。「STDIN」のように英大文字で指定した場合，物理ファイル名として扱われます。

環境変数に物理ファイル名を割り当てていない場合は，作成するファイルの名称が不明のためエラーとなります。

入出力状態の値とファイル自動生成規則（環境変数指定の場合）

環境変数指定でファイルを割り当てた場合，ファイル入出力時の入出力状態の値，および物理ファイルが自動作成されるかどうかは，次の規則に従います。

OPENモード
OPTIONAL指定の有無
環境変数指定あり
環境変数指定なし

物理ファイルの状態

すでに存在する
存在しない

INPUT
なし
FS=00
FS=35
FS=90

あり
FS=00
FS=05
自動作成されない
FS=05
自動作成されない

I-O
なし
FS=00
FS=35
FS=90

あり
FS=00
FS=05
自動作成される※1
FS=90

OUTPUT
なし
FS=00
再作成される※2
FS=00
自動作成される※1
FS=90

EXTEND
なし
FS=00
FS=35
FS=90

あり
FS=00
FS=05
自動作成される※1
FS=90

（凡例）

FS=nn：FILE STATUS句を指定したときに，入出力状態にnnが設定されることを示す

注

環境変数の値にファイル名を指定していない場合は，環境変数名なしとみなされます。

注※1

自動作成される物理ファイル名は，環境変数で指定した名称となります。

注※2

再作成とは，ファイル中にデータレコードがない状態にすることです。

COBOLプログラムの記述例

プログラム内で使用するファイル名"FILE-1"を外部装置名SYS-01に割り当てる例を，次に示します。

      SELECT FILE-1 ASSIGN TO SYS-01

外部装置名SYS-01に対応する環境変数「CBL_SYS_01」に，物理ファイル名"/DIR/FILE1.FIL"を指定する例を，次に示します。sh（Bシェル）を使用する場合の指定例です。

CBL_SYS_01=/DIR/FILE1.FIL
export CBL_SYS_01

6.2.3　データ名指定

データ名指定は，SELECT句で指定したファイル名にASSIGN句でデータ名を割り当て，このデータ名に物理ファイル名を転記して，物理ファイルを割り当てる方法です。

データ名指定で物理ファイルを割り当てる場合のCOBOLプログラムの記述形式を次に示します。

形式（COBOLプログラム）

SELECT 〔OPTIONAL〕 ファイル名 ASSIGN TO データ名

構文規則

データ名に指定する物理ファイル名は，ルートからの絶対パス名を指定します。このファイル名は，ファイルシステムの規則に従って指定する必要があります。

ディレクトリ名，ファイル名にNULL文字（X'00'）および半角空白文字（X'20'）を含んではなりません。NULL文字または半角空白文字を含んだディレクトリやファイル名を指定した場合，NULL文字または半角空白文字の直前までの文字列が有効となり，以降の文字列は無視されます。

一般規則

次の場合，データ名で指定した物理ファイルがなければ，指定した名称の物理ファイルが作成されます。
（物理ファイルが作成される場合）

ファイルをOUTPUTモードで開いたとき

SELECT句のOPTIONAL指定のあるファイルをI-OまたはEXTENDモードで開いたとき
このとき，SELECT句にOPTIONAL指定がある場合は，入出力状態に05が設定されます。

ファイルが作成される場所は，データ名に指定した物理ファイル名の絶対パスに従います。ただし，指定した物理ファイル名中のディレクトリ名に相当するディレクトリがないと，物理ファイルは作成されません。

データ名の値によって指定されるファイル名が有効となるかどうかは，ファイルシステムに依存します。

ファイル名が絶対パス名でない場合は，OSの環境設定に従います。

物理ファイル名は，ファイルを開く前に設定する必要があります。また，ファイルを閉じる前に物理ファイル名を変更した場合，動作は保証しません。

ファイルを標準入力（stdin）から読み込んだり，標準出力（stdout）または標準エラー出力（stderr）へ書き出したりしたい場合は，データ名にstdin，stdout，またはstderrを指定します。ただし，索引編成ファイル，相対編成ファイル，順編成の行制御のない可変長ファイルには，stdin，stdout，およびstderrを指定できません。また，順編成の可変長ファイルには，stdinを指定できません。指定した場合，実行時にエラーとなります。

標準入出力ファイルを扱う場合，COBOLはすでに開かれているものとして処理します。

標準入力（stdin），標準出力（stdout），および標準エラー出力（stderr）を指定する場合は，英小文字で指定してください。「STDIN」のように英大文字で指定した場合，物理ファイル名として扱われます。

入出力状態の値とファイル自動生成規則

定数指定の場合と同じです。詳細は，「6.2.1　定数指定」の「入出力状態の値とファイル自動生成規則（定数指定の場合）」を参照してください。

COBOLプログラムの記述例

プログラム内で使用するファイル名"FILE-1"を，"/dir"ディレクトリに格納されている"file.dat"ファイルに，データ名指定で割り当てる例を，次に示します。

          :
      ENVIRONMENT DIVISION.
      INPUT-OUTPUT SECTION.
      FILE-CONTROL.
      SELECT FILE-1 ASSIGN TO FILE-NAME.
          :
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 FILE-NAME PIC X(60).
          :
      PROCEDURE DIVISION.
          MOVE '/dir/file.dat' TO FILE-NAME.
          :

6.3　入出力エラー処理

COBOL2002では，ファイルの入出力処理中にエラーが発生した場合，プログラムを終了させる方法とプログラムを続行してエラーの回復を処理する方法があります。

一般には，エラーメッセージを参照してエラーの原因を追及し，プログラムを修正して再実行します。これ以外の方法として，FILE STATUS句とUSE手続きを使用し，エラーの回復処理をプログラム中に設定しておくという方法があります。

FILE STATUS句については，マニュアル「COBOL2002　言語　標準仕様編　8.3.4(7) FILE STATUS句」を，USE手続きについては，マニュアル「COBOL2002　言語　標準仕様編　10.8.53 USE文」を，それぞれ参照してください。

ここでは，FILE STATUS句とUSE手続きを使用した入出力エラー処理について説明します。

なお，COBOL2002では，共通例外処理を使って入出力エラー処理もできます。詳細は，「21.　共通例外処理」を参照してください。

＜この節の構成＞

6.3.1　入出力エラー処理の概要

6.3.2　入出力状態の値

6.3.3　USE手続き

6.3.4　ファイル入出力文でのエラー情報出力機能（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

6.3.5　ファイル属性の整合性チェック

6.3.1　入出力エラー処理の概要

入出力エラー発生時，USE手続きと入出力手続き文の無条件文との関係を，次に示します。

表6-2　入出力エラー発生時の制御の流れ

条件 | AT END指定※1 | INVALID KEY指定※1 | 入出力エラー | その他のエラー
あり | なし | あり | なし
USE手続き | あり | AT END指定の手続き | USE処理※2 | INVALID KEY指定の手続き | USE処理※2 | USE処理※2 | USE処理※2
なし | AT END指定の手続き | ※3 | INVALID KEY指定の手続き | ※3 | ※3 | ※3

注※1

NOT AT END，NOT INVALID KEY指定の場合は，入出力文が正常終了したときだけ，NOT AT END，NOT INVALID KEYで指定した手続きに制御が渡ります。

注※2

USE手続き処理後，エラーの発生した入出力文の次の文に制御が渡ります。FILE STATUS句があれば，入出力状態の値が設定されます。

注※3

FILE STATUS句があれば次の文に制御が渡ります。

FILE STATUS句がなければ，次のように動作します。

共通例外処理の致命的例外の場合
プログラムの実行が，中止されます。

共通例外処理の非致命的例外の場合
プログラムの実行が，継続されます。

詳細は，「21.9.2　従来形式の例外処理と共通例外処理の関係」の「(3)　FILE STATUS句の指定と共通例外処理での異常終了」を参照してください。

共通例外処理の致命的例外，非致命的例外については，マニュアル「COBOL2002　言語　標準仕様編　10.5.11 条件操作」を参照してください。

6.3.2　入出力状態の値

FILE STATUS句を指定しておくと，入出力文でエラーが発生した場合，FILE STATUS句で指定したデータ項目に入出力状態の値が設定されます。入出力状態の値と意味については，「付録F　入出力状態の値」およびマニュアル「COBOL2002　言語　標準仕様編　5.1.12 入出力状態」を参照してください。

6.3.3　USE手続き

＜この項の構成＞

(1)　USE ERROR手続きでの処理

(2)　USE GLOBAL ERROR手続きでの処理

(1)　USE ERROR手続きでの処理

COBOLプログラムでUSE ERRORの手続き処理を使用したコーディング例を，次に示します。

図6-1　USE ERROR手続き処理のコーディング例

(2)　USE GLOBAL ERROR手続きでの処理

COBOLプログラムでUSE GLOBAL ERRORの手続き処理を使用したコーディング例を，次に示します。

図6-2　USE GLOBAL ERROR手続き処理のコーディング例

6.3.4　ファイル入出力文でのエラー情報出力機能（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

FILE STATUS句を指定した場合に，入出力文でエラーが発生したとき，FILE STATUS句で指定したデータ項目に入出力状態の値が設定され，実行時メッセージは出力されません。通常は入出力状態の値と実行中プログラムの処理内容によってエラー要因を特定できますが，入出力状態値90はエラー要因の数が多いため，その特定が困難です。この場合，エラー要因特定のため，FILE STATUS句の指定を取り消してプログラムを再実行し，実行時メッセージを出力する必要があります。

ファイル入出力文でエラー情報を出力する設定をしておくと，入出力文で入出力状態値90のエラーが発生した場合に，FILE STATUS句の指定があっても実行時メッセージを出力できます。これによって，実行時メッセージでエラー要因を特定できます。

ファイル入出力文でエラー情報を出力する場合は，実行時環境変数CBLIOMESSAGEにSTATUS90を指定します。

形式

CBLIOMESSAGE=STATUS90

規則

この環境変数にSTATUS90を指定した場合に，FILE STATUS句を指定したファイルの入出力文で入出力状態の値が90となるエラーが発生したとき，入出力状態の値を設定したあと，実行時メッセージを出力して処理を続行します。

出力する実行時メッセージは，FILE STATUS句を指定しなかった場合に出力される実行時メッセージと同じメッセージです。ただし，メッセージレベルはI（お知らせ）となります※。

この環境変数の指定がない，またはSTATUS90以外の値を指定した場合は，この機能は無効になります。

この環境変数の指定によって実行時メッセージの出力以外，COBOLプログラムの動作が変わることはありません。

この環境変数の指定は，FILE STATUS句を指定したすべてのファイルの入出力文に有効となります。ただし，例外として，テストデバッガ実行時にファイルシミュレーション機能の対象となるファイルに対しては，この機能は無効になります。

FILE STATUS句の指定がないファイルの動作は，この環境変数を指定しても変わりません。

注※

プログラム実行後に実行時メッセージが出力されているときは，メッセージレベルがIであれば処理が続行されていると判定できます。

注意事項

COBOL入出力サービスルーチンおよびバイトストリーム入出力サービスルーチンは，この機能の対象となりません。

6.3.5　ファイル属性の整合性チェック

既存の物理ファイルを開く際に，ファイル属性情報とプログラムの指定に矛盾※があるかをチェックします。矛盾がある場合は物理ファイルを開けないため，ファイル属性情報とプログラムの指定を一致させておく必要があります。

注※

ファイル編成によっては，物理ファイルを作成したプログラムに記述されたファイル管理記述項とファイル記述項の内容の一部の情報が，ファイル属性情報として物理ファイル内に格納されています。このファイル属性情報と，物理ファイルを開くプログラムに記述されたファイル管理記述項およびファイル記述項の指定の矛盾をチェックします。

＜この項の構成＞

(1)　整合性チェックの内容

(1)　整合性チェックの内容

順編成ファイル（可変長レコード形式）および相対編成ファイルの場合は，ファイル属性情報のファイル形式とレコード長をチェックします。

ISAMによる索引編成ファイルの場合は，ファイル属性情報のファイル形式，最大レコード長，最小レコード長，キー個数，主レコードキー，副レコードキーをチェックします。

6.4　順編成ファイル

＜この節の構成＞

6.4.1　ファイルの作成と割り当て方法

6.4.2　順編成ファイルの行制御

6.4.1　ファイルの作成と割り当て方法

順編成ファイルの作成方法と割り当て方法について説明します。

順編成ファイルについては，マニュアル「COBOL2002　言語　標準仕様編　5.1.7(1) 順編成」を参照してください。

＜この項の構成＞

(1)　固定長ファイルの作成方法

(2)　可変長ファイルの作成方法

(3)　ファイルの割り当て方法

(1)　固定長ファイルの作成方法

次の方法で作成できます。

COBOL2002の入出力機能

などのエディタ

Cプログラムなど，他言語プログラムでのファイル作成

(2)　可変長ファイルの作成方法

COBOL2002の入出力機能によって作成できます。

他言語のプログラムで可変長の順編成ファイルを作成したい場合は，COBOL入出力サービスルーチンを使用します。COBOL入出力サービスルーチンの詳細は，「13.　COBOL入出力サービスルーチン」を参照してください。

(3)　ファイルの割り当て方法

「6.2　ファイル割り当ての共通規則」に従って，物理ファイル名を割り当ててください。
物理ファイル名には，OSのファイルシステム上で有効となるファイル名を指定してください。

順編成ファイルを使用する場合は，ORGANIZATION句にSEQUENTIALを指定します。

6.4.2　順編成ファイルの行制御

順編成ファイルでは，ADVANCING指定のWRITE文を実行した場合，指定に従って行制御をします。LINAGE句の指定があるとき，PAGE指定は論理ページの最初の行に位置づくまで行送りします。なお，行制御して出力された順編成ファイルは，順編成ファイルとしては読み込むことができません。

出力例を次に示します。出力例のX'0A'は改行，X'0D'は復帰，X'0C'は改ページを示します。

WRITE REC AFTER ADVANCING 3を実行した場合

WRITE REC AFTER ADVANCING PAGEを実行した場合

LINAGE句の指定がない場合

LINAGE句の指定がある場合

WRITE REC BEFORE ADVANCING 3を実行した場合

6.5　相対編成ファイル

＜この節の構成＞

6.5.1　ファイルの作成と割り当て方法

6.5.1　ファイルの作成と割り当て方法

相対編成ファイルの作成方法と割り当て方法について説明します。

相対編成ファイルについては，マニュアル「COBOL2002　言語　標準仕様編　5.1.7(2) 相対編成」を参照してください。

＜この項の構成＞

(1)　ファイルの作成方法

(2)　ファイルの割り当て方法

(1)　ファイルの作成方法

固定長ファイル／可変長ファイル共に，COBOL2002の入出力機能によって作成できます。

他言語のプログラムで相対編成ファイルを作成したい場合は，COBOL入出力サービスルーチンを使用します。COBOL入出力サービスルーチンの詳細は，「13.　COBOL入出力サービスルーチン」を参照してください。

(2)　ファイルの割り当て方法

「6.2　ファイル割り当ての共通規則」に従って，物理ファイル名を割り当ててください。
物理ファイル名には，OSのファイルシステム上で有効となるファイル名を指定してください。

相対編成ファイルを使用する場合は，ORGANIZATION句にRELATIVEを指定します。

6.6　ISAMによる索引編成ファイル

ISAMによる索引編成ファイルの作成方法と割り当て方法について説明します。

索引編成ファイルについては，マニュアル「COBOL2002　言語　標準仕様編　5.1.7(3) 索引編成」，およびマニュアル「索引順編成ファイル管理 ISAM」を参照してください。

なお，このシステムでは，索引編成ファイルの操作や保守をするために，ISAMユティリティを使用できます。ISAMユティリティの詳細については，マニュアル「索引順編成ファイル管理 ISAM」を参照してください。

＜この節の構成＞

6.6.1　ファイルの作成と割り当て方法

6.6.2　ファイル編成とレコード形式

6.6.3　コンパイル，リンクの指定

6.6.1　ファイルの作成と割り当て方法

索引編成ファイルの作成方法と割り当て方法について説明します。

＜この項の構成＞

(1)　固定長ファイルの作成方法

(2)　可変長ファイルの作成方法

(3)　ファイルの割り当て方法

(4)　生成される物理ファイル

(5)　索引編成ファイルに対するOPENモード

(6)　プログラムとファイル割り当ての関係

(1)　固定長ファイルの作成方法

COBOL2002の入出力機能，またはISAMユティリティによって作成できます。

(2)　可変長ファイルの作成方法

COBOL2002の入出力機能，またはISAMユティリティによって作成できます。

(3)　ファイルの割り当て方法

「6.2　ファイル割り当ての共通規則」に従って，物理ファイル名を割り当ててください。

ただし，次の点に注意してください。

ISAMによる索引編成ファイルでは，拡張子の異なる複数の物理ファイルが一つの索引編成ファイルを構成しています。そのため，物理ファイル名は，拡張子を付けないで指定してください。物理ファイル名に拡張子を付けて指定した場合，動作は保証しません。

索引編成ファイルを使用する場合は，ORGANIZATION句にINDEXEDを指定します。

(4)　生成される物理ファイル

索引編成ファイルによって生成される物理ファイルを，次に示します。

ISAMのファイル種別 | ファイル拡張子 | 説明
キー定義ファイル | .DEF | データファイルとキーファイルとの対応を表すデータを格納しています。
キーファイル | 主キーファイル | .K01 | 主レコードキーでレコードを検索するために必要な情報を保持しています。主レコードキー以外のキーでレコードを検索するには，副キーファイルを使用します。
副キーファイル | .K02～.K99 | 主レコードキーとは別のキーでレコードを検索するために必要な情報を保持しています。副レコードキーは，1個の索引編成ファイルに対して複数指定できます。
データファイル | .DAT | 実際にレコードを格納しているファイルです。格納するレコード形式は，固定長レコードでも可変長レコードでもかまいません。

(5)　索引編成ファイルに対するOPENモード

索引編成ファイルに対してOUTPUTモードのOPEN文を実行する場合，環境変数CBLISAMDL，およびCBLD_ファイル名の指定によって，動作が異なります。環境変数の指定によるOPEN文の動作の違いを，次に示します。

CBLISAMDL | CBLD_ファイル名
ISAMDL | NOISAMDL | 指定なし
YES | 作成 | 追加書き | 作成
NOまたは指定なし | 作成 | 追加書き | 追加書き

（凡例）

作成：一度ファイルを削除した後，新規作成して出力する

追加書き：存在するファイルに対して，追加で出力する

(6)　プログラムとファイル割り当ての関係

定数指定，環境変数指定，データ名指定のそれぞれについて，プログラムと物理ファイルとの関係を索引編成ファイルの例で示します。

(a)　定数指定のASSIGN句の場合

(b)　環境変数指定のASSIGN句の場合

(c)　データ名指定のASSIGN句の場合

6.6.2　ファイル編成とレコード形式

ISAMによる索引編成ファイルでは，固定長と可変長のレコード形式が使用できます。

6.6.3　コンパイル，リンクの指定

索引編成ファイル入出力機能を使用したプログラムをコンパイル，およびリンクは，「34.1.3　ccbl2002コマンドの-lオプション」を参照してください。

6.7　テキスト編成ファイル

ここでは，テキスト編成ファイルについて説明します。

テキスト編成ファイルについては，マニュアル「COBOL2002　言語　拡張仕様編　2.1 テキスト編成」を参照してください。

＜この節の構成＞

6.7.1　ファイルの作成と割り当て方法

6.7.2　テキスト編成ファイルのファイル編成とレコード形式

6.7.3　入出力手続き文と動作

6.7.4　規則

6.7.5　レコード末尾の空白文字を出力する機能（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

6.7.1　ファイルの作成と割り当て方法

テキスト編成ファイルの作成方法と割り当て方法について説明します。

＜この項の構成＞

(1)　ファイルの作成方法

(2)　ファイルの割り当て方法

(1)　ファイルの作成方法

テキスト編成ファイルは，次の方法で作成できます。

COBOLの入出力機能

viなどのエディタ

Cプログラムなど，他言語プログラムでのファイル作成

(2)　ファイルの割り当て方法

「6.2　ファイル割り当ての共通規則」に従って，物理ファイル名を割り当ててください。
物理ファイル名には，OSのファイルシステム上で有効となるファイル名を指定してください。

テキスト編成ファイルを使用する場合は，ORGANIZATION句にLINE SEQUENTIALを指定します。

6.7.2　テキスト編成ファイルのファイル編成とレコード形式

テキスト編成ファイルは，固定長と可変長のレコード形式が使用できます。ただし，実際にアクセスする物理ファイル形式は，固定長／可変長による違いはありません。そのため，テキスト編成ファイルであれば，固定長／可変長のどちらでもアクセスできます。

＜この項の構成＞

(1)　ファイル形式

(2)　レコード形式

(1)　ファイル形式

テキスト編成ファイルは，テキストファイルの各行（表示できる文字で構成されたテキスト行）を1レコードとして，改行文字をレコードの区切り文字とした可変長形式のファイルです。

テキスト編成ファイルの形式を次に示します。

(2)　レコード形式

テキスト編成ファイルの各レコードは，レコード本体に改行文字が付けられた形式で構成されています。

テキスト編成ファイルのレコード形式を次に示します。

改行文字は，一般的にエディタなどで入力するとき［Enter］キーを押して入力する文字です。

次にWindowsとUNIXの改行文字の相違を示します。WindowsとUNIXの間でテキスト編成ファイルを移行するときは注意してください。

Windowsの改行文字

Windowsでの改行文字は，復帰文字（X'0D'）+改行文字（X'0A'）の2バイトで構成されています。COBOL2002のテキスト編成ファイルでは，この2バイトで構成された文字を改行文字と認識します。

ただし，テキスト編成ファイルのREAD文については，X'0A'だけでも改行文字と認識します。

UNIXの改行文字

UNIXでの改行文字は，改行文字（X'0A'）だけの1バイトで構成されています。COBOL2002のテキスト編成ファイルでは，この1バイトで構成された文字を改行文字と認識します。

6.7.3　入出力手続き文と動作

テキスト編成ファイルに対する入出力手続き文について説明します。なお，次に説明する規則以外については，順編成ファイルの場合と同じです。

＜この項の構成＞

(1)　READ文

(2)　WRITE文

(3)　REWRITE文

(1)　READ文

(a)　READ文でのテキスト編成ファイル固有の規則

物理ファイル上にあるレコードの区切り文字（改行文字）は，COBOLプログラムのレコード領域に格納されません。

テキスト行がレコード長より短いときは，改行文字までの文字列が入力され，残りの部分には空白（X'20'）が埋められます。改行文字はすべて切り捨てられます。

テキスト行がレコード長より長いときは，ファイルの開くモードによって次のように動作が異なります。

（I-Oモード以外で開いている場合）

レコード長で区切られた複数レコードとして入力されます。このとき，FILE STATUS句を指定していると，入出力状態には04が返されます。

（I-Oモードで開いている場合）

READ文はエラーとなります。このとき，FILE STATUS句を指定していると，入出力状態には30が返されます。

復帰文字（X'0Ｄ'）は1バイトのデータとして扱われます。

タブ文字（X'09'）はそのままデータとして入力され，空白には置き換えられません。

ファイルの終わりが改行文字でないときは，ファイルの終わりに改行文字があるとみなされます。

レコード中にNULL（X'00'）が含まれる場合，NULL（X'00'）以降はデータとして入力されません。

ファイル定義が可変長の場合，レコード記述項の最大長分の固定長として読み込まれます。このとき，レコード長には，ファイルから実際に読み込んだ長さが設定されます。
また，I-Oモード以外でファイルを開き，かつレコード記述項の長さが最大レコード長より短い場合，最大レコード長で確保されたレコード領域に最大レコード長で読み込まれます。このとき，DEPENDING ON指定のデータ名には，レコード記述項で定義したレコード長より大きい値が設定される場合があります。
このため，入出力状態が00の場合は改行文字の直前までの長さが，入出力状態が04の場合は最大レコード長が，それぞれDEPENDING ON指定のデータ名に設定されます。どちらの場合でも，COBOLプログラムから参照できるのは，レコード記述項で定義した長さ分の領域だけです。

(2)　WRITE文

(a)　WRITE文でのテキスト編成ファイル固有の規則

レコード領域の最後が半角空白文字（X'20'）以外のときは，改行文字を付けて出力されます。

レコード領域の最後が半角空白文字（X'20'）のときは，末尾の半角空白文字（終端から半角空白文字以外の文字が出現するまでの部分）が切り捨てられ，改行文字を付けて出力されます。出力レコードの末尾の空白文字列を出力したい場合は，「6.7.5　レコード末尾の空白文字を出力する機能（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）」を参照してください。

(3)　REWRITE文

(a)　REWRITE文でのテキスト編成ファイル固有の規則

REWRITE文を実行する直前の入出力文はREAD文で，このREAD文が成功していなければなりません。

REWRITE文は，読み込んだテキスト行の長さと更新用レコードの長さが等しい場合だけ，テキスト行が書き換えられます。それ以外の場合，REWRITE文はエラーとなり，FILE STATUS句を指定していると，入出力状態に44が返されます。なお，更新用レコードの長さとは，後続の半角空白文字を削除した長さを指します。更新するレコードの長さにレコード末尾の半角空白文字も含めたい場合は，「6.7.5　レコード末尾の空白文字を出力する機能（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）」を参照してください。

REWRITE文では，テキスト行のうち改行文字，またはファイルの終わり（EOF）の直前までを書き換えます。

6.7.4　規則

テキスト編成ファイルは，印字できる文字や制御コード（改行文字，復帰文字，タブ文字など）で構成されている必要があります。

出力先の物理ファイルに標準出力（stdout）または標準エラー出力（stderr）を指定し，そのファイルをリダイレクションした場合，動作は保証しません。

WRITE文を実行して文字を書き出す場合，X'20'未満の制御コードについてもそのまま書き出されます。

可変長ファイルに対してREWRITE文を実行する場合，次のどの方法でFD項を定義しても結果は同じになります。

01レベルを複数回記述する場合

        FD T-FILE.
        01 T-REC1 PIC X(10).
        01 T-REC2 PIC X(30).

VARYING句で可変長を定義する場合

        FD T-FILE RECORD VARYING IN SIZE FROM 1 TO 30
                         DEPENDING ON L-REC.
        01 T-REC PIC X(30).

OCCURS句で可変長を定義する場合

        FD T-FILE.
        01 T-REC.
          02 T-RECD PIC X OCCURS 30 TIMES DEPENDING ON L-REC.

HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，またはLinux(x64)でUnicode機能を使用している場合，テキスト編成ファイルはUTF-8で記述されているものとして扱ってください。Unicode機能については，「27.　Unicode機能（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）」を参照してください。

6.7.5　レコード末尾の空白文字を出力する機能（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

レコード末尾の空白文字を出力する設定をしておくと，テキスト編成ファイルに対するWRITE文，およびREWRITE文でレコード末尾に半角空白文字（X'20'）があった場合に，半角空白文字を削除しないで，そのままファイルに書き出せます。

レコード末尾の空白文字を出力する機能を使用するには，実行時環境変数CBLD_ファイル名にTEXTWRITESPACEを指定するか，実行時環境変数CBLTEXTWRITESPACEにYESを指定してください。

＜この項の構成＞

(1)　ファイル単位に指定する方法

(2)　実行単位中のすべてのファイルに指定する方法

(3)　規則

(4)　注意事項

(5)　使用例

(1)　ファイル単位に指定する方法

形式

CBLD_ファイル名={ TEXTWRITESPACE | NOTEXTWRITESPACE }

機能

環境変数CBLD_ファイル名にTEXTWRITESPACEを指定すると，実行単位中の任意のテキスト編成ファイルに対して，WRITE文およびREWRITE文でレコード末尾の連続する半角空白文字をファイルに書き出します。

環境変数CBLD_ファイル名にNOTEXTWRITESPACEを指定すると，この機能は無効になります。

(2)　実行単位中のすべてのファイルに指定する方法

形式

CBLTEXTWRITESPACE=YES

機能

環境変数CBLTEXTWRITESPACEにYESを指定した場合は，実行単位中のすべてのテキスト編成ファイルに対するWRITE文およびREWRITE文でレコード末尾からの連続する半角空白文字をファイルに書き出します。

環境変数CBLTEXTWRITESPACEにYESの指定がないか，またはYES以外を指定した場合は，この機能は無効になります。

(3)　規則

この機能を使用した場合，WRITE文やREWRITE文で書き出すレコードの長さは次のようになります。
固定長形式の場合：ファイル節に定義したレコード長
可変長形式の場合：WRITE文やREWRITE文実行時に指定されたレコード長

ファイル単位に指定する方法と実行単位中のすべてのファイルに指定する方法を併用した場合，ファイル単位に指定する方法での指定が優先されます。次に指定の組み合わせによる機能の有効・無効状態を示します。

表6-3　環境変数CBLTEXTWRITESPACEと環境変数CBLD_ファイル名の指定の組み合わせ

CBLTEXTWRITESPACE
CBLD_ファイル名

TEXTWRITESPACE
NOTEXTWRITESPACE
指定なし

YES
有効
無効
有効

環境変数指定なし
または
YES以外
有効
無効
無効

(4)　注意事項

WRITE文のADVANCING指定，またはPOSITIONING指定で書き出された改行文字に対しては，この機能を使用しても改行文字の前に半角空白文字は出力されません。半角空白文字を含んで改行文字を書き出したいときは，ADVANCING指定やPOSITIONING指定がないWRITE文で半角空白文字だけのレコードを書き出してください。

この機能が有効な場合，READ文で読み込んだ固定長形式のレコードを，REWRITE文を実行してレコード領域長より短いレコードに更新しようとしたときは，読み込んだレコード長と更新するレコード長が不一致となり，REWRITE文が失敗します。レコード領域長より短いレコードに対してREWRITE文を実行するときは，可変長形式のファイルで定義して，読み込んだレコード長と変わらないようにしてください。

（例）

入力レコード

'AAAAA'

固定長形式のファイル/レコード定義

FD FILE-1.
01 FILE-1-REC   PIC X(10).

可変長形式のファイル/レコード定義

FD FILE-2 RECORD IS VARYING IN SIZE FROM 1 TO 10 CHARACTERS
                   DEPENDING ON REC-LEN.
01 FILE-2-REC   PIC X(10).

表6-4　レコード定義より短いレコードに対するREWRITE文の動作

内容と結果 | 機能の有効・無効状態
有効 | 無効
固定長形式 | 可変長形式 | 固定長形式 | 可変長形式
READ文実行後のレコード領域の内容 | 'AAAAA△△△△△' | 'AAAAA'※ | 'AAAAA△△△△△' | 'AAAAA'※
REWRITE文でレコードを'aaaaa'に更新するときの結果 | 半角空白を含む10バイトを更新しようとしてKCCC3521R-Sエラーとなる。 | 'aaaaa'に更新される。 | レコード末尾の半角空白は削除され，'aaaaa'で更新される（入力レコード長と等しくなる）。

（凡例）

△：半角空白

注※

REC-LEN項目には入力レコード長が格納される。

(5)　使用例

環境変数CBLTEXTWRITESPACEと環境変数CBLD_ファイル名の指定を組み合わせて使用する場合の例を次に示します。

環境変数の指定

CBLTEXTWRITESPACE=YES
CBLD_FILE_2=NOTEXTWRITESPACE

プログラム例

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
      ENVIRONMENT DIVISION.
      INPUT-OUTPUT SECTION.
      FILE-CONTROL.
          SELECT FILE-1 ASSIGN TO SYS100
                        ORGANIZATION IS LINE SEQUENTIAL.
          SELECT FILE-2 ASSIGN TO SYS200
                        ORGANIZATION IS LINE SEQUENTIAL.
      DATA DIVISION.
      FILE SECTION.
      FD FILE-1.
      01 FILE-1-REC      PIC X(10).
      FD FILE-2.
      01 FILE-2-REC      PIC X(10).
      PROCEDURE DIVISION.
          OPEN OUTPUT FILE-1 FILE-2.
     * レコード領域の後ろ5バイトは半角空白となる
          MOVE '12345' TO FILE-1-REC FILE-2-REC.
     * FILE-1は，CBLTEXTWRITESPACE=YESによって機能が有効なため，レ
     * コード末尾の半角空白は削除されない。
          WRITE FILE-1-REC.
     * FILE-2は，CBLD_FILE_2=NOTEXTWRITESPACEによって機能が無効なた
     * め，レコード末尾の半角空白は削除される。
          WRITE FILE-2-REC.
           :

実行結果

FILE1の内容：12345△△△△△改行

FILE2の内容：12345改行

（凡例）

△：半角空白文字

改行：改行文字

6.8　CSV編成ファイル（表計算プログラムファイル）

CSV（Comma Separated Value）編成ファイルは，表計算プログラムファイルともいい，表のデータを1行ごとに，列をコンマで区切って出力したファイルです。ここでは，CSV編成ファイルの入出力処理について説明します。

CSV編成ファイルについては，マニュアル「COBOL2002　言語　拡張仕様編　17. CSVファイル入出力機能」を参照してください。

＜この節の構成＞

6.8.1　ファイルの作成と割り当て方法

6.8.2　CSV編成ファイルのファイル編成とレコード形式

6.8.3　入出力手続き文と動作

6.8.4　注意事項

6.8.5　セルデータを数値として入出力する機能

6.8.6　セルデータをダブルコーテーションで囲まないで出力する機能

6.8.7　入力時の未使用項目の初期化機能

6.8.8　データの後の空白文字を出力する機能

6.8.9　セルデータをタブ文字区切りで入出力する機能

6.8.1　ファイルの作成と割り当て方法

CSV編成ファイルの作成方法と割り当て方法について説明します。

＜この項の構成＞

(1)　ファイルの作成方法

(2)　ファイルの割り当て方法

(1)　ファイルの作成方法

CSV編成ファイルは，次の方法で作成できます。

COBOLの入出力機能

viなどのエディタ

Cプログラムなど，他言語プログラムでのファイル作成

表計算プログラムでのファイル作成

(2)　ファイルの割り当て方法

「6.2　ファイル割り当ての共通規則」に従って，物理ファイル名を割り当ててください。
物理ファイル名には，OSのファイルシステム上で有効となるファイル名を指定してください。

CSV編成ファイルを使用する場合は，ORGANIZATION句にCSVを指定します。

6.8.2　CSV編成ファイルのファイル編成とレコード形式

CSV編成ファイルでは，テキスト編成ファイルと同じように，1行（改行文字までの文字列）を1レコードとみなします。さらに，おのおののレコードは，コンマ（,）によって複数のデータ項目に区切られた形式になっています。コンマによって区切られたデータ項目をセルと呼びます。CSV編成ファイルでは，このセル単位でデータを入出力できます。

なお，COBOLでCSV編成ファイルを扱う場合は，次の形式に従った，固定長のレコード形式だけが使用できます。

＜この項の構成＞

(1)　ファイル形式

(2)　レコード形式

(1)　ファイル形式

CSV編成ファイルは，CSVファイルの各行を1レコードとして，改行文字をレコードの区切り文字とした可変長形式のファイルです。

CSV編成ファイルの形式を次に示します。

(2)　レコード形式

CSV編成ファイルの各レコードは，レコード本体に改行文字が付けられた形式で構成されています。改行文字は，一般的にエディタなどで入力するとき［Enter］キーを押して入力する文字です。改行文字の詳細については，「6.7.2　テキスト編成ファイルのファイル編成とレコード形式」を参照してください。

さらに，おのおののレコードは，コンマを区切り文字とした「セル」と呼ばれるデータ項目単位に分割されています。

CSV編成ファイルのデータ入出力は，レコード単位で実行しますが，レコード中の各セルの内容は，入力レコード領域に定義した基本項目ごとに処理できます。

CSV編成ファイルのレコード形式を次に示します。

なお，コンマ（,）の替わりにタブ文字（X'09'）を区切り文字として使えます。詳細は，「6.8.9　セルデータをタブ文字区切りで入出力する機能」を参照してください。

6.8.3　入出力手続き文と動作

CSV編成ファイルに対する入出力手続き文について説明します。なお，CSV編成ファイルでは，OPEN文，READ文，WRITE文，CLOSE文だけが手続き文として使用できます。これ以外の手続き文は，使用できません。また，次に記載されている以外の規則については，順編成ファイルの場合と同じです。

＜この項の構成＞

(1)　OPEN文

(2)　READ文

(3)　WRITE文

(1)　OPEN文

CSV編成ファイルは，INPUT，OUTPUT，EXTENDモードで開けます。

(2)　READ文

CSV編成ファイルから読み込まれた1行中に含まれる各セルの情報は，レコード定義の基本項目に1対1で対応して格納されます。このとき，レコード中に含まれるセルの個数がレコード定義の基本項目数より多い場合，対応する基本項目がないセルの情報は無視されます。逆に，レコード中に含まれるセルの個数がレコード定義の基本項目数より少ない場合，対応するセルがない基本項目の値は変更されません。

セルの情報が基本項目に格納されるときは，英数字項目の転記の規則に従います。

入力したレコードにダブルコーテーション（"）が含まれない場合，コンマ（,）または改行文字を区切り文字として，データが入力されます。

入力したレコードにダブルコーテーション（"）が含まれる場合，次の規則に従ってデータが入力されます。

（コンマの直後がダブルコーテーションの場合）

次に現れるダブルコーテーションの直前までが，セルの情報として扱われます。ダブルコーテーションが出現する前にコンマがあっても，セルの区切り文字とはみなしません。

この場合，セルの情報にダブルコーテーションが含まれる場合でも，区切り文字とみなされるので注意が必要です。

（コンマの直後がダブルコーテーションでない場合）

データ中に含まれるダブルコーテーションは，文字データとして扱われます。

入力したレコード中の，一つのセルの文字列長が入力領域より長い場合，入力領域の長さ分の文字列が読み込まれ，残りの部分は切り捨てられます。このとき，FILE STATUS句を指定していると，入出力状態に04が返されます。

INTO指定がある場合は，INTO指定のレコード構造に従ってデータが入力されます。INTO指定がない場合は，ファイル記述項に定義したレコードの構造に従ってデータが入力されます

READ文の実行が失敗した場合，レコード領域の内容が不定となります。

(3)　WRITE文

WRITE文を実行すると，レコード領域中の基本項目単位をセルの情報として，おのおののセルがダブルコーテーション（"）で囲まれ，レコードの終端に改行文字が付いた形式で出力されます。各セルの情報をダブルコーテーションで囲まないで出力したい場合は，「6.8.6　セルデータをダブルコーテーションで囲まないで出力する機能」の説明を参照してください。

出力レコードの基本項目に含まれる右端の半角空白文字は出力されません。また，出力する基本項目のデータがすべて半角空白文字の場合，対応するセルの情報には，連続したダブルコーテーション（""）だけが出力されます。
出力レコードの基本項目のデータの最後にある空白も出力したい場合は，「6.8.8　データの後の空白文字を出力する機能」を参照してください。

FROM指定がある場合は，FROM指定のレコード構造に従ってデータが出力されます。FROM指定がない場合は，ファイル記述項に定義されたレコードの構造に従ってデータが出力されます。

6.8.4　注意事項

CSV編成ファイルに対して，ファイル共用は使用できません。

READ文でセル情報を基本項目単位に格納する場合，レコード定義中にJUSTIFIED RIGHT句を指定しても，無効となります。

一つのCSV編成ファイルに対して，AFTER ADVANCING指定したWRITE文とBEFORE ADVANCING指定したWRITE文を同時に使用すると，レコードは正しく出力されません。

HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，またはLinux(x64)でUnicode機能を使用している場合，CSV編成ファイルはUTF-8で記述されているものとして扱ってください。Unicode機能については，「27.　Unicode機能（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）」を参照してください。

6.8.5　セルデータを数値として入出力する機能

＜この項の構成＞

(1)　セルデータを数値として入出力する機能の概要

(2)　データ変換の規則

(3)　数値として入力するとき，不要な文字列を無視する機能

(1)　セルデータを数値として入出力する機能の概要

-NumCsvオプションを指定すると，外部10進項目，外部浮動小数点数字項目で定義されているセルに対して，データを数値として入出力できます。

この機能は，表計算プログラムのようなCOBOLとは数値データの表現形式が異なるプログラムと，COBOLプログラムとの間で数値データをやり取りする場合に使用します。例えば，次のような場合は，-NumCsvオプションを指定することで，表計算プログラムとCOBOLプログラムとで数値データをやり取りできます。

（例1）

次のようなデータを，WRITE文でCSV編成ファイルに出力する場合

データ定義 | データ項目に格納されている値 | -NumCsvオプション | ファイルへの出力結果
99v99 | 1.23 | なし | 0123
あり | 01.23

-NumCsvオプションを指定すると小数点が出力されるため，表計算プログラムで正しい数値として入力できます。

（例2）

次のようなデータを，READ文でCSV編成ファイルから入力する場合

データ定義 | ファイルから入力した値 | -NumCsvオプション | データ項目への格納結果
9(9) | 123 | なし | 123△△△△△△
あり | 000000123​

（凡例）

△：半角空白文字

-NumCsvオプションを指定すると数字項目に変換されるため，COBOLプログラムで数値として扱えます。

(2)　データ変換の規則

-NumCsvオプションを指定した場合の，数字項目へのデータ変換規則を次に示します。

データ変換の一般規則

特殊名段落のDECIMAL-POINT IS COMMA句の指定は有効です。ただし，小数点としてコンマ（,）を使用する場合は，その数値データをダブルコーテーション（"）で囲む必要があります。ダブルコーテーションで囲まれていないコンマは，すべてセルの区切り文字とみなされます。

セルにデータを入出力するとき，次に示す文字が数値データとして有効です。

表6-5　CSV編成ファイルに数値データとして有効な文字の種類

セルの属性
入力時に有効な文字
出力時に有効な文字

外部10進項目

0～9，+，-

小数点

右端，または左端にある空白文字（X'20'）

0～9，+，-

外部浮動小数点数字項目

0～9，+，-，E，e

小数点

右端，または左端にある空白文字（X'20'）

符号位置にある空白文字（X'20'）※

0～9，+，-，E，e

小数点

空符号位置にある空白文字（X'20'）※

注※

外部浮動小数点数字項目の指数部，仮数部の符号をマイナス（-）で定義した場合，符号位置にある空白文字（X'20'）は，有効な文字となります。

外部10進項目，外部浮動小数点数字項目で定義したセルに，次のようなデータを入力した場合，実行時エラーになります。

「表6-5　CSV編成ファイルに数値データとして有効な文字の種類」で示した「有効な文字」以外の文字が含まれるデータ

小数点が複数あるデータ

外部10進形式で，符号が複数ある，または符号の位置が不正なデータ

外部浮動小数点数字項目で，浮動小数点数字定数として正しくないデータ
（ただし，指数部，仮数部の符号をマイナス（-）で定義した場合，データ中で符号を示す位置が空白文字（X'20'）であってもよい）

入力時のデータ変換規則

外部10進項目，外部浮動小数点数字項目で定義したセルでは，入力できるデータの長さは512バイトまでです。データの長さが512バイトを超える場合，それ以降のデータは切り捨てられます。切り捨てが起きた場合，FILE STATUS句を指定していると，入出力状態に04が返されます。また，2バイト文字の1バイト目でデータが切り捨てられる場合，その2バイト文字全体が入力されません。

外部10進項目，外部浮動小数点数字項目で定義したセルに入力したデータの有効文字が22バイトを超える場合，それ以降のデータは切り捨てられます。切り捨てが起きた場合，FILE STATUS句を指定していると，入出力状態に04が返されます。

外部10進項目で定義したセルでは，小数点位置を合わせて入力されます。その際，必要に応じて数字の左側や右側にゼロを補ったり，あふれたけたを切り捨てたりします。詳細は，マニュアル「COBOL2002　言語　標準仕様編　10.5.7 データ項目内でのデータのけた寄せ」を参照してください。
また，このようなけた寄せが発生した場合，FILE STATUS句を指定していると，入出力状態に04が返されます。

外部10進項目に符号の指定がある場合，SIGN句の指定に関係なく左端の符号だけが有効となります。

外部浮動小数点数字項目で定義したセルには，外部10進形式，外部浮動小数点数字形式のどちらの形式のデータも，入力できます。ただし，入力データの中に"E"または"e"が含まれている場合，外部浮動小数点数字形式のデータとみなされます。

外部10進項目，外部浮動小数点数字項目以外の属性を持つ項目には，通常の-NumCsvオプション指定なしの場合と同様にデータが入力されます。

外部10進項目，外部浮動小数点数字項目で定義したセルに，次のようなデータを入力した場合，ゼロを入力したものとして扱われます。
1.セル中に入力対象となるデータがない場合
2.すべて空白文字のデータの場合

入力データの右端，または左端にある空白は，読み込まれません。

出力時のデータ変換規則

外部10進項目，外部浮動小数点数字項目に想定小数点が指定されている場合，想定小数点位置に出力される文字はDECIMAL-POINT IS COMMA句の指定に従います。

外部浮動小数点数字項目に小数点が指定されている場合，小数点位置に出力される文字はDECIMAL-POINT IS COMMA句の指定に従います。

外部10進項目に符号の指定がある場合，SIGN句の指定に関係なく左端に符号が出力されます。ただし，符号がプラス（+）の場合は出力されません。

注意事項

READ文が失敗した場合，レコード領域は不定になります。

数字編集項目で定義したセルは，-NumCsvオプションを指定しても英数字項目属性でデータが入出力されます。

(3)　数値として入力するとき，不要な文字列を無視する機能

-NumCsvオプション指定時，セルデータ中に数値として無効な文字が含まれている場合，環境変数CBLCSVCHARにその文字を指定することで，文字を無視できます。この機能を使用すると，通貨記号などが付けられたデータを数値データとして読み込めます。

（例）

"¥123"，"¥456"，"¥789"というCSV編成ファイルのデータを，-NumCsvオプションを指定して読み込もうとした場合

環境変数CBLCSVCHARに¥を指定したとき
「123」「456」「789」という数値データとして読み込まれる。

環境変数CBLCSVCHARを指定しないとき
¥は数値データとして無効なので，実行時エラーになる。

形式

CBLCSVCHAR='文字列〔;文字列…〕'

文字列

セルデータを数値として入力するとき，無視したい文字列を指定します。

規則

環境変数CBLCSVCHARに，複数の文字列を指定する場合は，各文字列をセミコロン（;）で区切り，全体をアポストロフィ（'）またはダブルコーテーション（"）で囲んで指定する必要があります。

環境変数CBLCSVCHARに指定した文字列は，数値の左端，右端，途中のどこにあっても無視されます。

入力データが外部浮動小数点数字項目の場合，環境変数CBLCSVCHARの指定は無効になります。

環境変数CBLCSVCHARには，1バイト以上，512バイト以下の文字列を指定してください。この範囲を超える長さの文字列を指定した場合，実行時エラーとなります。

注意事項

-NumCsvオプションが指定されていない場合，環境変数CBLCSVCHARの指定は無効になります。

環境変数CBLCSVCHARに指定した文字列に含まれるセミコロン（;）は，すべて区切り文字とみなされます。無視する文字列としてセミコロンは指定できません。

環境変数CBLCSVCHARに，空白文字（X'20'）や数値データとして有効な文字を指定した場合，これらの文字列も無視されます。ただし，入力結果は保証しません。

環境変数CBLCSVCHARに設定する文字列の全体の長さは，1,024バイト以内でなければなりません。1,024バイトを超える文字列を設定した場合，メッセージを出力して環境変数CBLCSVCHARの指定は無効となります。

6.8.6　セルデータをダブルコーテーションで囲まないで出力する機能

環境変数CBLD_ファイル名にNOCSVQUOTEを指定すると，CSV編成ファイルを出力するとき，セルデータをダブルコーテーションで囲まないで出力できます。セルデータがダブルコーテーションで囲まれている形式に対応していない表計算プログラムとデータをやり取りするような場合，指定します。

形式

CBLD_ファイル名=NOCSVQUOTE

注意事項

セルデータをダブルコーテーションで囲まない場合，セルデータ中に含まれているコンマも区切り文字とみなされます。

（例）

「12,345,678」と「9,999」という二つのセルデータを出力する場合

ダブルコーテーションで囲んだとき（CBLD_ファイル名=NOCSVQUOTE指定なし）
"12,345,678","9,999"
→「12,345,678」「9,999」という二つのセルデータとして扱われます。

ダブルコーテーションで囲まないとき（CBLD_ファイル名=NOCSVQUOTE指定あり）
12,345,678,9,999
→「12」「345」「678」「9」「999」という五つのセルデータとして扱われます。

6.8.7　入力時の未使用項目の初期化機能

＜この項の構成＞

(1)　入力時の未使用項目の初期化機能

(1)　入力時の未使用項目の初期化機能

CSV編成ファイルからREAD文で入力したセルの個数が，対応するプログラム中の基本項目の個数より少ない場合，環境変数CBLCSVINITにYESを指定すると，セルと対応しない基本項目を初期化できます。

形式

CBLCSVINIT=YES

規則

環境変数CBLCSVINITにYESを指定すると，CSV編成ファイルから入力したセルの個数が，対応するプログラム中の基本項目の個数より少ない場合，セルと対応しない基本項目を初期化します。

環境変数CBLCSVINITを指定しなかった場合や，YES以外を指定した場合は，セルと対応しない基本項目は，初期化されません。

CSV編成ファイルで使用できる項目は，ブール項目以外で，用途が表示用（DISPLAY）の項目です。

この機能は，-NumCsvオプションを使用した場合にも有効です。

この機能を使用した場合，セルと対応しない基本項目には次の初期値データが設定されます。

未使用基本項目の属性 | 初期値データ
英字項目 | 半角空白文字（X'20'）
英数字項目
英数字編集項目
数字編集項目
数字項目 | 外部10進形式 | ゼロ（X'30'）※1
外部浮動小数点形式
日本語項目 | 全角空白文字（X'8140'）※2※3
日本語編集項目

注※1

初期値データは，数字項目にゼロを転記した結果となります。

注※2

環境変数LANGにEUCコードが指定されている場合，EUCコードの全角空白文字（X'A1A1'）を初期値データに設定します。

注※3

HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，またはLinux(x64)でUnicode機能を使用している場合，バイトオーダによって全角空白文字（X'0030'），または全角空白文字（X'3000'）を初期値データに設定します。Unicode機能については，「27.　Unicode機能（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）」を参照してください。

注意事項

この機能を使用してCSV編成ファイルの入力を行うプログラムは，COBOL2002でコンパイルする必要があります。AIX またはSolaris(SPARC) COBOL85でコンパイルしたCOBOLプログラムでこの機能を使用した場合，警告メッセージが出力され※，環境変数CBLCSVINITの指定が無効となります。
警告メッセージは，AIX またはSolaris(SPARC) COBOL85でコンパイルしたプログラムのCSV編成ファイル入出力時に，ファイル単位で最初に実行したREAD文でだけ出力されます。その後のREAD文では，警告メッセージは出力されませんが，環境変数CBLCSVINITの指定は無効となります。

この機能を使用した場合，空白文字やゼロだけのセルデータを入力した項目と，初期化で空白文字やゼロが設定された項目の違いが判断できません。
この違いを判断する必要がある場合は，この機能を使用しないで，次に示すようなプログラムを作成する必要があります。
環境変数CBLCSVINITによって初期化されたかどうかを見分けるための処理
・セルと対応しない基本項目は，READ文の実行前にレコード領域をレコードとして存在しない値で初期化します。
・READ文実行後，レコードの内容を初期化した値と比較します。

この機能を使用して改行コードだけのレコードデータを入力した場合，ファイルに従属するすべての基本項目が未使用とみなされ，ファイルに従属するすべての基本項目が初期化されます。

この機能は，ACCEPT文を使用してCSVファイルを入力する場合には使用できません。

注※

AIX またはSolaris(SPARC) COBOL85でコンパイルしたプログラムが動作できるシステムでだけ警告メッセージが出力されます。

AIX またはSolaris(SPARC) COBOL85でコンパイルしたCOBOLプログラムの動作を次に示します。

COBOL85のバージョン | 環境変数CBLCSVINITの指定 | 備考
すべてのバージョン | 無効 | 警告メッセージを出力し処理を続行する

6.8.8　データの後の空白文字を出力する機能

環境変数CBLD_ファイル名にCSVWRITESPACEを指定すると，CSV編成ファイルに出力するレコードの基本項目のデータの最後に半角空白文字がある場合，その半角空白文字も出力できます。

形式

CBLD_ファイル名=CSVWRITESPACE

規則

出力レコードの基本項目のデータの最後に半角空白文字がある場合，その半角空白文字も出力します。

出力する基本項目のデータがすべて半角空白文字の場合，対応するセルの情報には，基本項目のサイズ分の半角空白文字を出力します。

プログラム例

01 REC-1.
 02 CELL-1  PIC X(5).
 02 CELL-2  PIC X(5).
 02 CELL-3  PIC X(5).
       :
  MOVE 'ABC'     TO CELL-1.
  MOVE SPACE     TO CELL-2.
  MOVE '△△CDE' TO CELL-3.
  WRITE REC-1.

（凡例）

△：半角空白文字

データの後の半角空白文字を出力する機能を使用しない場合に出力されるレコードの結果（CBLD_ファイル名=CSVWRITESPACE指定なし）

"ABC","","△△CDE"

データの後の半角空白文字を出力する機能を使用した場合に出力されるレコードの結果（CBLD_ファイル名=CSVWRITESPACE指定あり）

"ABC△△","△△△△△","△△CDE"

6.8.9　セルデータをタブ文字区切りで入出力する機能

環境変数CBLD_ファイル名にCSVTABSEPARATEDを指定すると，セルデータがタブ文字（X'09'）で区切られた形式のファイルをCSV編成ファイルとして入出力することができます。CSVTABSEPARATEDは，セルデータがタブ文字で区切られた形式に対応した表計算プログラムとデータをやり取りするような場合に指定します。

形式

CBLD_ファイル名=CSVTABSEPARATED

規則

READ文，およびWRITE文の動作は，区切り文字がコンマ（,）ではなくタブ文字となること以外は同じです。

6.9　HiRDBによる索引編成ファイル（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC)で有効）

COBOL2002では，HiRDBで作成されたデータベースの内容を，索引編成ファイルの言語仕様でアクセスできます。ここでは，HiRDBによる索引編成ファイルの使用方法について説明します。

HiRDBによる索引編成ファイルについては，マニュアル「COBOL2002　言語　拡張仕様編　20. HiRDBによる索引ファイル入出力機能」を参照してください。

＜この節の構成＞

6.9.1　プログラムの作成方法

6.9.2　ファイルの作成と割り当て方法

6.9.3　ファイル編成とレコード形式

6.9.4　HiRDBの定義とCOBOLの定義の関連性

6.9.5　HiRDBによる索引編成ファイル固有の機能と相違点

6.9.6　プログラムのコンパイルと実行

6.9.7　プログラム作成時の留意点

6.9.1　プログラムの作成方法

HiRDBによる索引編成ファイルを使用するには，次の指定が必要です。

コンパイラ環境変数の指定

HiRDBによる索引編成ファイルを使用するプログラムのコンパイル時には，コンパイラ環境変数CBL_RDBSYSにHiRDBを指定する必要があります。指定形式を次に示します。

形式

CBL_RDBSYS=HiRDB※

注※

データベースシステム名には，HiRDBだけが指定できます。この環境変数の指定がない場合は，初期値としてHiRDBが仮定されます。

ORGANIZATION句の指定

HiRDBによる索引編成ファイルを使用する場合は，ORGANIZATION句にRDBを指定します。

6.9.2　ファイルの作成と割り当て方法

HiRDBによる索引編成ファイルを使用する場合，COBOL上で指定したファイルは，HiRDBの表に相当します。

HiRDBによる索引編成ファイルの作成方法と割り当て方法について説明します。

＜この項の構成＞

(1)　ファイルの作成方法

(2)　ファイルの割り当て方法

(1)　ファイルの作成方法

HiRDBによる索引編成ファイルは，次の方法で作成できます。

SQL文を利用してHiRDBにアクセスするユーザプログラム

HiRDBユティリティ

(2)　ファイルの割り当て方法

操作対象となる表の名称を，ASSIGN句で指定します。

形式

SELECT ファイル名 ASSIGN TO ｛定数｜外部装置名｜データ名｝

定数指定の場合
定数に，操作の対象となる表名を指定します。

環境変数指定の場合
外部装置名に対応する環境変数に，操作の対象となる表名を指定します。
次に指定方法を示します。

形式

CBL_外部装置名=表名

データ名指定の場合
データ名に，操作の対象となる表名を指定します。

表名の規則

操作対象に指定した表名は，HiRDBシステムで規定された表名の規則に従います。ただし，表名に引用符（"）が含まれていない場合，実行時に引用符が付けられた名称で処理されます。

表名の規則については，「HiRDBのSQLリファレンスマニュアル」を参照してください。

6.9.3　ファイル編成とレコード形式

HiRDBによる索引編成ファイルは，HiRDBが定めるファイル形式で構成されています。

6.9.4　HiRDBの定義とCOBOLの定義の関連性

HiRDBによる索引編成ファイルを使用する場合，HiRDBでのスキーマ定義とCOBOLでの定義との関連性や，SQLデータ型とCOBOLデータ定義との関連性について，注意が必要です。HiRDBの定義とCOBOLの定義の関連性について説明します。

＜この項の構成＞

(1)　RDBの接続と切り離し

(2)　スキーマ定義とCOBOLプログラムとの関連

(3)　RDBの列のデータ型とCOBOLのデータ記述

(1)　RDBの接続と切り離し

接続

COBOLの実行単位で，HiRDBによる索引編成ファイルに対する最初のOPEN文，または切り離し後のOPEN文でファイルをオープンするときに，HiRDBの環境変数PDUSERの設定に基づいてHiRDBと接続します。環境変数PDUSERの詳細については，「HiRDBのUAP開発ガイドマニュアル」を参照してください。

切り離し

COBOLの実行単位で，HiRDBによる索引編成ファイルに対するすべてのファイルを閉じたときに，HiRDBから切り離されます。

(2)　スキーマ定義とCOBOLプログラムとの関連

HiRDBによる索引編成ファイルを使用する場合は，はじめにデータベースを設計してからスキーマ定義を作成します。このスキーマ定義を基に，COBOLプログラムを作成します。

スキーマ定義とCOBOL原始プログラムとの関連を次に示します。

図6-3　スキーマ定義とCOBOL原始プログラムとの関連

規則

表は，実表またはビュー表で定義します。

スキーマ定義の表名を，ASSIGN句の定数，外部装置名に関連づけられた環境変数，またはデータ名に設定します。

スキーマ定義の列名とCOBOLのレコードの項目名を一致させます。なお，-EquivRuleオプションを指定する場合，等価規則が適用されなくてもスキーマ定義の列名とCOBOLのレコードの項目名が一致するように，項目名を記述する必要があります。

スキーマ定義の列とCOBOLのレコード項目の属性は一致させなければなりません。一致していない場合，動作は保証しません。詳細は，「(3)　RDBの列のデータ型とCOBOLのデータ記述」を参照してください。

スキーマ定義の列とCOBOLのレコードのデータ配置を一致させます。データの配置がずれるような境界調整はしないでください。

スキーマ定義の長さとCOBOLのレコードの長さを一致させます。

主／副レコードキーに指定したCOBOLのデータ項目に対応する列は，インデクス定義を省略できます。ただし，重複キーを検知するには，インデクス定義時のCREATE INDEXで，UNIQUEを指定する必要があります。

CREATE SCHEMA，CREATE TABLE，表名，列名の規則の詳細については，「HiRDBのSQLリファレンスマニュアル」を参照してください。

WRITE文で重複キーを検知する場合は，対応する列に対してユニークなインデクスを付けなくてはなりません。次にその例を示します。
1.単一列インデクスの場合（合成キー以外の場合）
REC01列の重複を検知する例

2.複数列インデクスの場合（合成キーの場合）
REC01，REC02を合わせた値で重複を検知する例

（インデクスを付けるときの注意事項）

WRITE文で重複キーを検知しない場合は，対応する列に対してユニークなインデクスを付けてはなりません。

WRITE文で書き出すレコード中のキーデータ項目に対応する列以外に，ユニークなインデクスを付けてはなりません。キー以外の項目にユニークなインデクスを付けた場合，WRITE文で正しくキー重複を検知できなくなります。例えば，レコード中のキーデータ項目に対応する列以外でキー重複を検知することがあります。

合成キーを使用する場合，CREATE INDEXで並べる列の順序と合成キーに指定する項目の順序は一致させなければなりません。この順序が一致していないときの動作は保証しません。
CREATE INDEXの詳細については，「HiRDBのSQLリファレンスマニュアル」を参照してください。

(3)　RDBの列のデータ型とCOBOLのデータ記述

COBOLのレコードを定義するときは，RDBの列の属性に合わせて定義しなければなりません。

HiRDBの列のデータ型とCOBOLのデータ記述の対応を次に示します。なお，この表にないデータ型は，使用できません。

表6-6　HiRDBの列のデータ型とCOBOLのデータ記述の対応

HiRDBの列のデータ型
COBOLのデータ記述
項目の記述
備考

SMALLINT

L1 基本項目名 PIC S9(4)
           USAGE COMP.

基本項目

INTEGER

L1 基本項目名 PIC S9(9)
           USAGE COMP.

基本項目

DECIMAL
〔(m〔,n〕)〕

L1 基本項目名
   PIC S9(m-n)〔V9(n)〕
  USAGE PACKED-DECIMAL.

基本項目
1≦m≦18,
AIX(64)の場合で-MaxDigits38オプション指定時
1≦m≦38,
0≦n≦m
m＝nの場合はSV9(n)とする
n＝0の場合は〔V9(n)〕を省略する

SMALLFLT

L1 基本項目名
     USAGE COMP-1.

基本項目

FLOAT

L1 基本項目名
     USAGE COMP-2.

基本項目

CHAR〔(n)〕

L1 基本項目名  PIC X(n).

基本項目
1≦n≦30000

VARCHAR(n)

L2 集団項目名.
 L3 基本項目名1
     PIC S9(4)
         USAGE COMP.
 L3 基本項目名2
     PIC X(n).

二つの基本項目から構成される集団項目
基本項目1：文字長
基本項目2：文字列
1≦n≦32000

NCHAR〔(n)〕

L1 基本項目名  PIC N(n).

基本項目
1≦n≦15000

NVARCHAR(n)

L2 集団項目名.
 L3 基本項目名1
     PIC S9(4)
         USAGE COMP.
 L3 基本項目名2
     PIC N(n).

二つの基本項目から構成される集団項目
基本項目1：文字長
基本項目2：文字列
1≦n≦16000

DATE

L1 基本項目名 PIC X(4).

基本項目
4バイト'yyyymmdd'の形式
（例えば2002/7/11の場合，X'20020711​'が格納される）

TIME

L1 基本項目名 PIC X(3).

基本項目
3バイト’hhmmss’の形式
（例えば11:25:43の場合，X'112543'が格納される）

INTERVAL YEAR TO DAY

L1 基本項目名 PIC S9(8)
  USAGE PACKED-DECIMAL.

基本項目

INTERVAL HOUR TO SECOND

L1 基本項目名 PIC S9(6)
  USAGE PACKED-DECIMAL.

基本項目

MCHAR［(n)］

L1 基本項目名 PIC X(n).

基本項目
1≦n≦30000

MVARCHAR(n)

L2 集団項目名.
 L3 基本項目名1
     PIC S9(4)
         USAGE COMP.
 L3 基本項目名2
     PIC X(n).

二つの基本項目から構成される集団項目
基本項目1：文字長
基本項目2：文字列
1≦n≦32000

BLOB

L2 集団項目名.
 L3 FILLER
     PIC S9(9)
         USAGE COMP.
 L3 基本項目名1
     PIC S9(9)
         USAGE COMP.
 L3 基本項目名2
     PIC X(n).

三つの基本項目名から構成される集団項目
基本項目1：データ長
基本項目2：バイナリデータ
1≦n≦65527

注1

L1，L2，およびL3はレベル番号を表しています。

L1：レベル番号01～49

L2：レベル番号01～48

L3：レベル番号02～49（ただし，L3＞L2）

注2

SQLのデータ型については，「HiRDBのSQLリファレンスマニュアル」を参照してください。

6.9.5　HiRDBによる索引編成ファイル固有の機能と相違点

HiRDBによる索引編成ファイルでは，HiRDBが持つ機能の一部を使用できます。また，ISAMによる索引編成ファイルと相違があります。

＜この項の構成＞

(1)　トランザクション管理機能

(2)　ISAMによる索引編成ファイルとの相違

(3)　HiRDBサーバの設定での注意事項

(4)　HiRDBによる索引編成ファイル固有のファイル共用

(5)　その他の拡張機能

(1)　トランザクション管理機能

HiRDBによる索引編成ファイルのトランザクションは，最初のOPEN文でファイルをオープンしたときに開始され，すべてのファイルが閉じられたときに暗黙的にCOMMIT文を実行し，終了します。なお，COMMIT文およびROLLBACK文を明示的には実行できません。COMMIT文およびROLLBACK文を明示的に実行した場合，実行時エラーが表示され，処理は中断されます。

HiRDBによる索引編成ファイルでは，実行時環境変数CBL_RDBCOMMITを指定することで，HiRDBが持つトランザクション管理機能を制御できます。

(a)　環境変数CBL_RDBCOMMIT

COMMIT文およびROLLBACK文で，RDBアクセスのトランザクションを管理する場合，環境変数CBL_RDBCOMMITにMANUAL，AUTO，YESのどれかを指定します。環境変数CBL_RDBCOMMITの指定方法を次に示します。

形式

CBL_RDBCOMMIT=｛MANUAL｜AUTO｜YES｝

MANUALを指定した場合

明示的にCOMMIT文およびROLLBACK文を実行できます。

AUTOまたはYESを指定した場合

明示的にCLOSE文を実行した場合，および未クローズのファイルがクローズされた場合に，暗黙的にCOMMIT文が実行されます。

また，明示的にCOMMIT文およびROLLBACK文を実行できます。

それ以外の値を指定した場合，または環境変数CBL_RDBCOMMITを指定しなかった場合

明示的にCOMMIT文およびROLLBACK文を実行できません。

(b)　トランザクションの範囲

環境変数CBL_RDBCOMMITの値とトランザクションの範囲の関係を次に示します。なお，COMMIT文，ROLLBACK文の取り扱いの詳細については，「6.9.6　プログラムのコンパイルと実行」を参照してください。

図6-4　環境変数CBL_RDBCOMMITの値とトランザクションの範囲

注※

HiRDBのトランザクション管理機能によって，HiRDBにアクセスを実行中プロセスが異常終了したことを検出してROLLBACKが発生します。

(2)　ISAMによる索引編成ファイルとの相違

HiRDBによる索引編成ファイルとISAMによる索引編成ファイルとの相違点について説明します。

(a)　レコードの検索基準

レコードの検索基準の相違を，次に示します。

表6-7　索引編成ファイルでのレコードの検索基準の相違

レコードキーの項目 | キー判定属性
ISAMの場合 | RDBの場合
固定長集団項目 | 文字 | 文字
外部10進項目 | 文字 | 文字
内部10進項目 | 文字 | 数値
外部浮動小数点数字項目 | 文字 | 文字
数字編集項目 | 文字 | 文字
英字項目 | 文字 | 文字
日本語項目 | 文字 | 文字
2進項目（2バイト） | 2バイト固定小数点 | 2バイト固定小数点
2進項目（4バイト） | 4バイト固定小数点 | 4バイト固定小数点
内部浮動小数点数字項目（4バイト） | 単精度浮動小数点 | 単精度浮動小数点
内部浮動小数点数字項目（8バイト） | 倍精度浮動小数点 | 倍精度浮動小数点

(b)　入出力状態

HiRDBによる索引編成ファイルでは，ISAMによる索引編成ファイルと入出力状態に返される値が異なる場合があります。詳細は，「付録F　入出力状態の値」を参照してください。

(c)　機能の相違点

スキーマ定義と一致したレコード記述でのアクセスが前提のため，ファイル記述項に記述できるレコード記述項は一つだけです。

スキーマ定義に可変長（行長が可変長）がないため，レコード記述から計算した長さを最大長とする固定長で入出力されます。このため，次のような制限があります。

ファイル記述項のDEPENDING ON データ名指定のRECORD句は，データ名の内容に関係なく，常にレコード記述から計算した長さで入出力されます。

レコード記述中にDEPENDING ON指定のOCCURS句は，記述できません。

HiRDBによる索引編成ファイルでは，DATA FORMAT句を指定しても覚え書きとなります。

環境変数CBLD_ファイル名のISAMDL／NOISAMDLオプションは常にISAMDLとして扱われます。また，環境変数CBLISAMDLの値は，常にYESとして扱われます。このため，OPEN文の出力モードでファイルを開いた場合，ファイルは更新されないで新規作成となり，すべてのデータが削除されます。
ただし，OPEN文の出力モード，または拡張モードで開いたときに，ファイル実体（表）がない場合は，ファイル実体が作成されません。
なお，出力モードでファイルを開く場合，すでにファイル内にあるレコードを高速で削除する機能があります。詳細は，「(5)　その他の拡張機能」の「(a)　出力ファイルの高速オープン機能」を参照してください。

排他制御はRDBのスキーマ定義に従うため，COBOLのファイル共用は利用できません。また，RDBシステムへのアクセスに用いる，内部的に入出力文から変換されたSQL文には，排他オプションが付けられません。このため，排他モードは，内部的に発行するSQL文および実行環境によってRDBシステムの規定に従います。
ただし，HiRDBによる索引編成ファイルでは，固有のファイル共用を使用できます。詳細は，「(4)　HiRDBによる索引編成ファイル固有のファイル共用」を参照してください。

HiRDBによる索引編成ファイルを使用するプログラムと，SQLを使用するプログラムを，同じ実行環境中に混在できません。

HiRDBによる索引編成ファイルを使用するプログラムは，OpenTP1環境下で使用できません。

トランザクション管理機能を使用しないで複数のファイルを同時に開いた場合，すべてのファイルを閉じるまでファイルに対しての追加・変更は反映されません。このため，追加書きしたレコードは，すべてのファイルを閉じるまで入力できません。

複数の表を結合するビュー表に対して行の追加，更新，および削除はできません。

データ型が文字型（CHAR，VARCHAR，NCHAR，NVARCHAR，MCHAR，MVARCHAR）の列に対応させたデータ項目に，LOW-VALUEを使用できます。

レコードキーのデータが重複している場合，START文やREAD文で重複したレコードキー値に位置づけた状態でREAD文を実行すると，そのあとに読み込まれるレコードの順序が不定となります。

START文で次の指定を用いて位置づけた場合，そのあとに実行されるREAD文は，常にキーの降順呼び出しとなります。

LESS THAN

LESS THAN OR EQUAL TO

NOT GREATER THAN

<

=<

NOT >

LAST指定

レコードキーに指定した内部10進項目の照合順序は，文字属性の照合順序ではなく，数値の照合順序となります。

レコード中に次のデータが含まれる場合，入出力結果は保証しません。

レコード長が短い場合，または長い場合

読み込むレコード中にナル値が含まれる場合

書き出すレコード中に次のデータが含まれる場合
a.データ項目の文字列長，またはデータ長の値が1より小さい
b.DATEデータ型の列に対応させたデータ項目の値がLOW-VALUEである。
c.内部10進項目で定義したデータ項目の値が0で，かつ符号ビットが0である。
レコード中に保証されないデータが含まれるかどうかをチェックする機能があります。詳細は，「(5)　その他の拡張機能」の「(b)　データチェック機能」を参照してください。

データ型がBLOBの列に対応するレコードの項目は，キーにできません。

READ文，WRITE文，およびREWRITE文で重複キーを検知する場合，次の点に注意してください。

HiRDBによる索引編成ファイルの入出力では，ALTERNATE RECORD KEY句のDUPLICATES指定は覚え書きとなります。そのため，重複キーを検知するには，インデクス定義時のCREATE INDEXでUNIQUEを指定する必要があります。
CREATE INDEXの詳細は，「HiRDBのSQLリファレンスマニュアル」を参照してください。

重複キーを検知するとき，インデクス定義でのUNIQUE指定の有無によって，入出力状態値が次のように異なります。

手続き文
HiRDBによる索引編成ファイルの場合
ISAMによる索引編成ファイルの場合

インデクス定義あり
インデクス
定義なし
DUPLICATES
指定あり
DUPLICATES
指定なし

UNIQUE指定あり
UNIQUE指定なし

READ文
00
00
00
02
00

REWRITE文
22
00
00
02
22

WRITE文
22
00
00
02
22

合成キーを使用するときは，CREATE INDEXで並べる列の順序と，合成キーに指定する項目の順序が一致している必要があります。順序が一致していないと，動作は保証しません。

(d)　物理的制限事項の相違点

HiRDBによる索引編成ファイルの制限値を，次に示します。

キーに関する制限値

主レコードキーの最大長：255バイト

副レコードキーの最大長：255バイト

副レコードキーの最大定義個数：98個

合成キーを構成する最大項目数：8個

合成キーを構成する項目の合計最大長：255バイト

同一実行環境中でRDBアクセスする索引編成ファイルの数

同一実行環境中でRDBアクセスする索引編成ファイルの数は，最大63個です。

また，HiRDBのシステム定義のpd_max_access_tables（同時に使用する表の数）に，使用するファイル数以上の値を指定しておく必要があります。

レコード長

定義できるレコード長は，65,535バイト以内です。

ただし，CREATE TABLE定義にFIXの指定がある場合は，CREATE TABLE定義の<FIX指定のある表>の列の長さの合計式に従います。CREATE TABLE定義の詳細は，「HiRDBのSQLリファレンスマニュアル」のCREATE TABLE定義の説明を参照してください。

作成できる列の数

HiRDBの一つの表に作成できる列の数は，最大4,000です。

(3)　HiRDBサーバの設定での注意事項

(a)　環境変数PDSWAITTIMEの設定によるサーバの最大待ち時間の設定時の注意事項

HiRDBシステムでは，HiRDBによる索引編成ファイルを使用するクライアントからの要求に対する応答を返してから，次にクライアントから要求があるまでのHiRDBシステムの最大待ち時間を，環境変数PDSWAITTIMEに秒単位で指定できます。

次に，環境変数PDSWAITTIMEを設定する場合の注意事項を示します。

環境変数PDSWAITTIMEに指定した時間での監視は，トランザクション開始から終了までの間，行われます。トランザクションについては，「(1)　トランザクション管理機能」を参照してください。

実行中のHiRDBシステムでは，指定した時間内にクライアントから次の要求が来ない場合，COBOLプログラムに異常が発生したものとみなし，トランザクションをロールバックします。

環境変数PDSWAITTIMEに0を指定した場合，HiRDBシステムは，クライアント（COBOLプログラム）からの応答があるまで待ち続けます。

ブロック転送機能を使用する場合，HiRDBシステムからブロック転送されてきたレコードがなくなるまで，クライアント（COBOLプログラム）内で入力処理が行われます。このため，入力処理が終了するまで，クライアントからHiRDBシステムに要求しません。したがって，ブロック転送機能を使用する場合，環境変数PDSWAITTIMEにはブロック転送文の入力処理時間を含めた値を設定してください。

環境変数PDSWAITTIMEの詳細は，「HiRDBのUAP開発ガイドマニュアル」を参照してください。

(b)　環境変数PDDDLDEAPRPEXEの設定時の注意事項

COBOLプログラム実行中に，環境変数PDDDLDEAPRPEXEを設定した環境で定義系トランザクションを実行しないでください。環境変数PDDDLDEAPRPEXEを設定した環境で定義系トランザクションを実行した場合，先行トランザクションの前処理が無効となるため，COBOLの管理情報との不整合が発生し，予期しない実行時エラーが発生するおそれがあります。

環境変数PDDDLDEAPRPEXEの詳細は，「HiRDBのUAP開発ガイドマニュアル」を参照してください。

(c)　COBOLプログラムの異常終了時の対処

COBOLのプログラムが異常終了した場合，プロセスが待ち状態となります。待ち状態となったプロセスは，次の方法で終了させてください。

環境変数PDSWAITTIMEの設定によるトランザクションのロールバック
HiRDBサーバ側で，環境変数PDSWAITTIMEにサーバの最大待ち時間を設定しておき，トランザクションをロールバックさせる。

PDCANCELコマンドによる強制終了
PDCANCELコマンドを入力してプロセスを強制終了させる。
PDCANCELコマンドの詳細については，「HiRDBのコマンドリファレンスマニュアル」を参照してください。

(4)　HiRDBによる索引編成ファイル固有のファイル共用

HiRDBによる索引編成ファイルでは，ほかのファイル編成とは異なり，固有のファイル共用を使用できます。ここでは，HiRDBによる索引編成ファイル固有のファイル共用について説明します。

指定形式

CBLRDBILWAIT=YES

機能

環境変数CBLRDBILWAITにYESを指定すると，ファイルを入力モードで開いたとき，内部的に発行されるSELECT文に対して「WITHOUT LOCK WAIT」の排他オプションを付けられます。排他オプションの詳細については，「HiRDBのSQLリファレンスマニュアル」を参照してください。

(5)　その他の拡張機能

HiRDBによる索引編成ファイルでは，次の拡張機能を使用できます。

(a)　出力ファイルの高速オープン機能

出力モードでファイルを開く場合，すでにファイル内にあるレコードを高速で削除したいときは，環境変数CBLD_ファイル名にRDBOPURGEを指定するか，または環境変数CBLRDBOPURGEにYESを指定してください。

指定形式（ファイル単位に指定する方法）

CBLD_ファイル名={ RDBOPURGE | NORDBOPURGE }

機能

RDBOPURGEを指定した場合，実行単位中の任意のファイルに対してOUTPUTモードでファイルを開いたときに，すべてのデータを削除するために内部的に発行するSQL文をPURGE TABLEで行います。このとき，暗黙的にCOMMIT文を実行して現行のトランザクションを終了させるので，ほかのファイルをOPENしているときなどは注意してください。

PURGE TABLEの詳細については，マニュアル「HiRDBのSQLリファレンスマニュアル」を参照してください。

NORDBOPURGEを指定した場合，この機能は無効になります。

指定形式（実行単位中のすべてのファイルに指定する方法）

CBLRDBOPURGE=YES

機能

CBLRDBOPURGE=YESを指定した場合，実行単位中のすべてのファイルに対してOUTPUTモードでファイルを開いたときに，すべてのデータを削除するために内部的に発行するSQL文をPURGE TABLEで行います。このとき，暗黙的にCOMMIT文を実行して現行のトランザクションを終了させるので，ほかのファイルをOPENしているときなどは注意してください。

PURGE TABLEの詳細については，マニュアル「HiRDBのSQLリファレンスマニュアル」を参照してください。

環境変数CBLRDBOPURGEにYESの指定がないか，またはYES以外を指定した場合は，この機能は無効になります。

規則

ファイル単位に指定する方法と実行単位中のすべてのファイルに指定する方法を併用した場合，ファイル単位に指定する方法が優先されます。次に指定の組み合わせによる動作を示します。

CBLRDBOPURGE | CBLD_ファイル名
RDBOPURGE | NORDBOPURGE | 指定なし
YES | ○ | × | ○
環境変数指定なし，またはYES以外 | ○ | × | ×

（凡例）

○：出力ファイルの高速オープン機能は有効

×：出力ファイルの高速オープン機能は無効

(b)　データチェック機能

入出力時，レコード中に保証されないデータが含まれているかどうかをチェックする場合は，環境変数CBLRDBDATAERRを指定します。

指定形式

CBLRDBDATAERR=YES

機能

環境変数CBLRDBDATAERRにYESを指定すると，レコード中に次のような保証されないデータが含まれていないかがチェックされ，含まれていた場合にはKCCC8353R-Sの入出力エラーが出力されます。

（入出力が保証されないデータ）

レコード長が短い場合，または長い場合

読み込むレコード中にナル値※が含まれる場合

書き出すレコード中に次のデータが含まれる場合
・データ項目の文字列長またはデータ長が1より小さい
・DATEデータ型の列に対応させたデータ項目の値がLOW-VALUEである
・内部10進データ項目で，値が0かつ符号ビットが0である

注※

ナル値については，「HiRDBのSQLリファレンスマニュアル」を参照してください。

(c)　内部発行されるSQL文で行値構成子を使用する機能（AIX(32)，AIX(64)で有効）

HiRDBによる索引編成ファイルを使用した入出力で，実行時環境変数CBLRDBROWVALCONSTRUCTORが指定されているとき，COBOL2002が内部で発行するSQLのSELECT文で行値構成子を使用します。行値構成子を使用すると，次の条件すべてに該当する場合に，性能の向上が見込めます。

主レコードキー，または副レコードキーに合成キーが指定されていて，合成キーを構成する項目の個数が多い。

合成キーを構成する項目がHiRDBでインデクス定義されている。

HiRDBのインデクス定義がメモリ上だけで処理されない（ディスクの実I/Oが発生する）。

START文，NEXT指定のREAD文を繰り返す，またはKEY指定のREAD文を繰り返す。

この機能を使用するには，COBOLプログラム実行時にアクセスするHiRDBのバージョンが行値構成子をサポートしていることが前提です。サポートしていない場合は，動作は保証しません。

指定形式

CBLRDBROWVALCONSTRUCTOR=YES

機能

環境変数CBLRDBROWVALCONSTRUCTORにYESを指定すると，複数のキーを使用して入出力する場合，実行時ライブラリが内部で発行するSQLのSELECT文に行値構成子が使用されます。

行値構成子が使用される条件

主レコードキーまたは副レコードキーに合成キーが指定されていて，合成キーを構成する項目の数が2個以上である。

1.のキーを指定したファイルに対して，次のどれかの文を実行した。
・START文。ただし，FIRST指定，LAST指定のSTART文は除く。
・KEY指定のREAD文。
・乱アクセスまたは動的アクセスのREWRITE文，DELETE文で直前の入出力文がREAD文でない場合。

行値構成子を使用することで実行結果が変わることはありません。

環境変数CBLRDBROWVALCONSTRUCTORにYES以外を指定した場合は，この機能は有効になりません。その場合，内部で発行するSQL文に行値構成子は使用されません。

6.9.6　プログラムのコンパイルと実行

HiRDBによる索引編成ファイルを使用するプログラムのコンパイル，および実行方法について説明します。

＜この項の構成＞

(1)　プログラムのコンパイル方法

(2)　プログラムのリンク

(3)　プログラムの実行方法

(1)　プログラムのコンパイル方法

HiRDBによる索引編成ファイルを使用するプログラムのコンパイル方法を，次に示します。

形式（COMMIT／ROLLBACK文をHiRDBによる索引編成ファイルに適用しない場合）

ccbl2002 ファイル名 …

形式（COMMIT／ROLLBACK文をHiRDBによる索引編成ファイルに適用する場合）

ccbl2002 -RDBTran ファイル名 …

注意事項

HiRDBによる索引編成ファイルを使用するプログラムのコンパイル時には，コンパイラ環境変数CBL_RDBSYSの指定も必要です。詳細は「6.9.1　プログラムの作成方法」を参照してください。

COMMIT／ROLLBACK文は，-RDBTranオプションの指定がある場合や，翻訳単位にHiRDBによる索引編成ファイルの入出力の指定がある場合はHiRDBによる索引編成ファイルに適用されます。ただし，DCシミュレーション機能と混在する場合はエラーとなります。それ以外はDCシミュレーション機能に適用されます。
-RDBTranオプションの指定と，プログラムの記述によるCOMMIT／ROLLBACK文の扱いを次に示します。

表6-8　-RDBTranオプションの指定とCOMMIT／ROLLBACK文の扱い

プログラムの記述 | 通信節 | ファイル管理記述項
HiRDBによる索引編成ファイル（RDB）あり | HiRDBによる索引編成ファイル（RDB）なし
オプションの指定 | -RDBTran指定あり | データコミュニケーション機能なし | RDBに適用 | RDBに適用
データコミュニケーション機能あり | Sレベルエラー | Sレベルエラー
-RDBTran指定なし | データコミュニケーション機能なし | RDBに適用 | DCに適用
データコミュニケーション機能あり | Sレベルエラー | DCに適用

（凡例）

RDBに適用：HiRDBによる索引編成ファイルのCOMMIT／ROLLBACK文となる

DCに適用：DCシミュレーション機能のCOMMIT／ROLLBACK文となる

Ｓレベルエラー：コンパイル時に重大エラーとなる

(2)　プログラムのリンク

HiRDBによる索引編成ファイルを使用するプログラムのリンクは，ccbl2002，ccコマンドまたはldコマンドでHiRDBのライブラリを指定する必要があります。詳細は「34.1.3　ccbl2002コマンドの-lオプション」および「34.1.5　ccコマンドおよびldコマンドの-lオプション」を参照してください。

(3)　プログラムの実行方法

HiRDBによる索引編成ファイルを使用するプログラムは，次の手順で実行してください。

HiRDBのサーバを起動する

HiRDBのクライアントの環境変数で，PDHOST，PDUSER，PDNAMEPORTの値をサーバ環境に合わせて設定する

HiRDBによる索引編成ファイルを使用したCOBOLプログラムを実行する

6.9.7　プログラム作成時の留意点

HiRDBによる索引編成ファイルを使用するプログラムで，処理速度の速いプログラムを作成する場合の留意点を示します。

動的アクセス（DYNAMIC）を使用しない

理由

動的アクセスでKEY指定のREAD文を実行すると，該当レコードの読み込みと同時に以降のレコードの読み込み準備をするため，処理に時間が掛かります。

対策

KEY指定のREAD文で読み込んだレコードの次のレコードを読み込む必要がなければ，乱アクセス（RANDOM）でのKEY指定のREAD文を使用してください。乱アクセスでのKEY指定のREAD文を使用すると，以降のレコードの読み込み準備が不要なため，処理時間を短縮できます。

I-Oモードでファイルを開かない

理由

I-Oモードでファイルを開くと，更新を前提とするSQL文でRDBアクセスが行われるため，処理に時間が掛かります。

対策

DELETE文，REWRITE文，またはWRITE文でレコードを更新する必要がない場合は，INPUTモードでファイルを開いてください。更新を前提としないSQL文でRDBにアクセスできるので，処理時間を短縮できます。

START文を使用しない

理由

START文を使用すると，該当するキー条件に一致するデータを検索したあと，NEXT指定のREAD文でレコードを読み込めるように，以降のレコードの読み込み準備をするため，処理に時間が掛かります。

対策

START文およびNEXT指定のREAD文でのレコードの読み込みをKEY指定のREAD文で代替できる場合は，KEY指定のREAD文を使用してください。KEY指定のREAD文を使用すると，以降のレコードの読み込み準備が不要なため，処理時間を短縮できます。

キーに使用する項目（列）を一つにする

理由

複数のキーを使用して入出力をすると，それぞれのキーで関連づけをするため，OPEN文，START文実行後の最初のREAD文，およびKEY指定のREAD文の処理に時間が掛かります。

対策

使用するキーの数を減らしてください。データの関連づけに掛かる時間を短縮できます。

環境変数CBLD_ファイル名=RDBOPURGEまたは環境変数CBLRDBOPURGE=YESを指定する

理由

ファイルをOUTPUTモードでオープンする場合，ファイル中のすべてのデータが削除されます。このとき，多量のデータがあると，データの削除に時間が掛かります。

対策

ファイルをOUTPUTモードでオープンする場合は，環境変数CBLD_ファイル名=RDBOPURGEまたは環境変数CBLRDBOPURGEにYESを指定してください。データを削除するために内部的に発行するSQL文にPURGE TABLEを使用することで削除の時間を短縮することができます。

6.10　ラージファイル入出力機能

ラージファイル入出力機能を使用すると，ラージファイル（ファイルサイズが2GB以上のファイル）に対する入出力ができます。

＜この節の構成＞

6.10.1　ラージファイル入出力機能の概要

6.10.2　ラージファイル入出力機能でのファイルの共用

6.10.3　ネットワークファイルシステムでのラージファイルの動作

6.10.4　ラージファイル入出力機能の制限事項

6.10.1　ラージファイル入出力機能の概要

実行時環境変数CBLD_ファイル名にLARGEFILEを指定することによって，ラージファイル（ファイルサイズが2GB以上のファイル）に対する入出力ができます。

＜この項の構成＞

(1)　ラージファイル入出力機能の指定方法

(2)　使用できるファイルの種類

(1)　ラージファイル入出力機能の指定方法

ファイル単位に指定する方法

形式

CBLD_ファイル名=｛ LARGEFILE ｜ NOLARGEFILE ｝

LARGEFILE

ラージファイル入出力機能が有効になります。

NOLARGEFILE

ラージファイル入出力機能を使用しないで，通常の入出力をします。

実行時環境変数CBLD_ファイル名の詳細については，「35.3　プログラムの実行環境の設定」を参照してください。

実行単位中のすべてのファイルに指定する方法（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

形式

CBLLARGEFILE=YES

注意事項

実行時環境変数CBLD_ファイル名=LARGEFILE/NOLARGEFILEと，CBLLARGEFILE=YESを同時に指定した場合，実行時環境変数CBLD_ファイル名=LARGEFILE/NOLARGEFILEの指定が優先されます。

実行時環境変数「CBLD_ファイル名」と「CBLLARGEFILE」の関係を次に示します。

CBLLARGEFILE | CBLD_ファイル名
LARGEFILE | NOLARGEFILE | 指定なし
YES | ○ | × | ○
YES以外，または実行時環境変数指定なし | ○ | × | ×

（凡例）

○：ラージファイル入出力機能を適用する

×：ラージファイル入出力機能を適用しない

(2)　使用できるファイルの種類

ファイル編成

ラージファイル入出力機能は，次のファイル編成で使用できます。

順編成ファイル

テキスト編成ファイル

CSV編成ファイル

ファイルシステム

ラージファイルを使用するためには，ファイルシステムの属性がラージファイルに対応している必要があります。ファイルシステム属性については，システムのマニュアルを参照してください。

また，作成できるファイルサイズについては，システム資源の制限が設定されている場合があります。詳細は，システムのulimitコマンドなどについて記載されたマニュアルを参照してください。

6.10.2　ラージファイル入出力機能でのファイルの共用

ラージファイル入出力機能を使用した場合，LOCK MODE指定は無視され，ファイルシェア機能は無効となります。また，INPUTモードで開いた場合でも，他プロセスからのレコード施錠はエラーとなります。

ラージファイル入出力機能を使用した場合の入出力動作は次のとおりです。

＜この項の構成＞

(1)　先行プロセスでラージファイル入出力機能を使用する場合

(2)　先行プロセスでラージファイル入出力機能を使用しない場合

(1)　先行プロセスでラージファイル入出力機能を使用する場合

後行プロセス
先行プロセス

ラージファイル
入出力機能
OPENモード
OPENモード

INPUT
OUTPUT
I-O
EXTEND

使用する
OPEN
INPUT
○
×
×
×

OUTPUT
×
×
×
×

I-O
×
×
×
×

EXTEND
×
×
×
×

使用しない※1
OPEN※2
INPUT
○
×
×
×

OUTPUT
×
×
×
×

I-O
○
×
×
×

EXTEND
×
×
×
×

READ※3
WITH LOCK
RE
－
－
－

WITH NOLOCK
○
－
－
－

REWRITE※3※4
○
－
－
－

（凡例）

○：成功

×：OPENエラー

RE：READエラー

－：対象外

注※1

LOCK MODE IS AUTOMATIC指定

注※2

WITH LOCK指定なし

注※3

OPEN I-Oモードで開いたファイル

注※4

READ WITH NO LOCKで入力したレコードに対するREWRITE文

(2)　先行プロセスでラージファイル入出力機能を使用しない場合

「7.2.4　各実行単位の施錠形式」に従います。

ただし，後行プロセスでラージファイル入出力機能を使用する場合は，LOCK MODE指定なしの動作となります。

6.10.3　ネットワークファイルシステムでのラージファイルの動作

ネットワークファイルシステムでラージファイル入出力機能を使用できます。

AIX(32)，AIX(64)の場合

双方のシステムがAIX(32)またはAIX(64)で，ラージファイルをサポートしている必要があります。ほかのシステムのファイルの場合，ラージファイルを扱えません。

Solaris(SPARC)の場合

ほかのシステムのファイルシステムであっても，そのシステムがラージファイルをサポートしていれば，ラージファイルを扱えます。

6.10.4　ラージファイル入出力機能の制限事項

COBOL入出力サービスルーチンでは，ラージファイル入出力機能を使用できません。ただし，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)の場合，順編成ファイルでは，COBOL入出力サービスルーチンを使用してラージファイルに対する入出力ができます。相対編成ファイルの場合，COBOL入出力サービスルーチンを使用してラージファイルに対する入出力はできません。

6.11　ファイル入出力拡張機能

ファイル入出力の拡張機能について説明します。

＜この節の構成＞

6.11.1　ファイルサイズがレコード長の整数倍でない固定長形式の順ファイルの入出力

6.11.2　ファイルバッファサイズ指定機能（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

6.11.1　ファイルサイズがレコード長の整数倍でない固定長形式の順ファイルの入出力

固定長形式の順ファイルで，ファイルサイズがレコード長の整数倍でない場合に，最終レコードの長さが定義レコード長より短くても入力できるようにする機能です。

＜この項の構成＞

(1)　環境変数の指定

(2)　環境変数の指定有無による結果の違い

(3)　注意事項

(1)　環境変数の指定

環境変数CBLD_ファイル名にSAMENDIOを指定すると，最終レコードが定義レコード長より短い場合でもエラーにならなくなり，残りのレコードの入出力を行えます。

形式

CBLD_ファイル名=SAMENDIO

環境変数CBLD_ファイル名にSAMENDIOを指定した場合としない場合とで，入出力時の結果が異なります。なお，SAMENDIOを指定しない場合には，NOSAMENDIOが仮定されます。詳細は，「35.3.2　実行時環境変数の一覧」を参照してください。

(2)　環境変数の指定有無による結果の違い

環境変数CBLD_ファイル名にSAMENDIOを指定した場合としない場合とで，それぞれの入出力文の動作の違いを次に示します。

(a)　READ文

表6-9　入力するレコードがレコード長より短い場合のREAD文の動作

CBLD_ファイル名の指定
READ文の動作

NOSAMENDIO
または指定なし
入力するレコードがレコード長より短い場合，エラーになります。
このとき，入出力状態の値は「30」になります。

SAMENDIO
入力するレコードがレコード長より短い場合，エラーにならないで残りのレコードを読み込みます。レコード長の残りには，半角の空白「X'20'」を埋めます。このとき，入出力状態の値は「00」になり，プログラムの実行は継続します。

(b)　REWRITE文

REWRITE文を実行するには，直前のREAD文が実行済みでなければなりません。

環境変数CBLD_ファイル名にSAMENDIOを指定した場合，直前のREAD文で読み込んだ分のレコードを書き換えます。

表6-10　更新するレコードがレコード長より短い場合のREWRITE文の動作

CBLD_ファイル名の指定
REWRITE文の動作

NOSAMENDIO
または指定なし
直前のREAD文が実行時エラーになるので，REWRITE文も実行されません。

SAMENDIO
直前のREAD文で読み込んだレコード長が，定義レコード長よりも短い場合は，READ文で読み込んだ分のレコードを書き換えます。このとき，入出力状態の値は「00」になります。

(c)　その他の入出力文

READ文およびREWRITE文以外の入出力文での入出力機能は，ファイルサイズがレコード長の整数倍である固定長ファイルの場合と同じです。

(3)　注意事項

この機能を使用してファイル中の最終レコードを読み込むとき，最終レコードがプログラム中で定義したレコード長より短いために，定義したレコード長より短いレコード長しか読み込めなくてもCOBOLはエラーや警告メッセージを出力しません。そのため，実際に読み込んだレコード長は，ユーザプログラム側で管理しておく必要があります。

この機能は，ファイル内の全データをレコードとして入力できるだけで，レコードフォーマットの形態，レコードのブロッキングおよびデブロッキングはユーザプログラム側で管理しておく必要があります。

6.11.2　ファイルバッファサイズ指定機能（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

ファイルバッファサイズ指定機能を使用すると，COBOLのファイル入出力機能で使用するファイルのバッファサイズを，使用する環境に合わせて任意に指定できます。バッファサイズを大きくすることで，ファイルに対する物理的な入出力回数を減らすことができ，性能向上を目的としたチューニングが可能となります。

この機能を使用しない場合，COBOLではファイルのバッファサイズを4,096バイトに設定します。

この機能は，次に示すファイルを対象としています。

順編成ファイル※1

相対編成ファイル※1 ※2

テキスト編成ファイル

CSV編成ファイル

注※1

環境変数CBLINBUFSIZE/CBLOUTBUFSIZEについては，COBOL入出力サービスルーチンを使用した入出力機能でも有効になりますが，環境変数CBLD_ファイル名のNOINBUFSIZE/NOOUTBUFSIZEについては，COBOL入出力サービスルーチンを使用した入出力機能では有効になりません。

注※2

ACCESS MODE句がSEQUENTIAL指定だけ有効です。DYNAMIC/RANDOM指定では有効になりません。

この機能の作用対象を次に示します。

OPENモード
INPUT
OUTPUT
EXTEND
I-O

WITH LOCK
指定
あり
なし
あり
なし
あり
なし
あり
なし

LOCK MODE句の指定
なし
○
○
○
○
○
○
×
×

EXCLUSIVE
○
○
○
○
○
○
×
×

AUTOMATIC
○
×※2
○
○
○
×※2
×
×

MANUAL※1
○
×※2
○
○
○
×※2
×
×

（凡例）

○：この機能の対象

×：この機能の対象外

注※1

順編成ファイル（COBOL入出力サービスルーチン機能も含む）およびテキスト編成ファイルの場合は，LOCK MODE句にMANUAL指定はできません。

注※2

CSV編成ファイルの場合は，この機能の対象（○）となります。

＜この項の構成＞

(1)　環境変数の指定

(2)　指定例（Bシェル）

(3)　規則

(4)　注意事項

(1)　環境変数の指定

この機能を使用するには，次に示す環境変数を指定する必要があります。

環境変数名 | 環境変数の有効範囲 | 環境変数の機能内容
CBLINBUFSIZE=nnnnnnnnnn※1 | 対象ファイルに有効※2 | OPEN文のモードがINPUT指定のバッファサイズ制御によるファイル入力時に，使用するバッファサイズを2,000,000,000（約2GB）までの数値で指定する。
CBLOUTBUFSIZE=nnnnnnnnnn※1 | OPEN文のモードがOUTPUT/EXTEND指定のバッファサイズ制御によるファイル出力時に，使用するバッファサイズを2,000,000,000（約2GB）までの数値で指定する。
CBLD_ファイル名=NOINBUFSIZE | ファイル別に有効 | 指定されたファイルのバッファサイズ制御による入力時に，環境変数CBLINBUFSIZEで設定された値が無効になる。無効になった場合のバッファサイズは，4,096バイトになる。
CBLD_ファイル名=NOOUTBUFSIZE | 指定されたファイルのバッファサイズ制御による出力時に，環境変数CBLOUTBUFSIZEで設定された値が無効になる。無効になった場合のバッファサイズは，4,096バイトになる。

注※1

「nnnnnnnnnn」には，COBOLのファイル入出力機能で使用するバッファ長として，１～2000000000の数字を指定します。

注※2

プロセス内の対象ファイルに有効になります。

各環境変数間の関係を次に示します。

環境変数CBLINBUFSIZE/
CBLOUTBUFSIZEの指定
環境変数CBLD_ファイル名の指定

指定なし
NOINBUFSIZE
NOOUTBUFSIZE

CBLINBUFSIZE
○
×
－

CBLOUTBUFSIZE
○
－
×

（凡例）

○：環境変数CBLINBUFSIZE/CBLOUTBUFSIZEのバッファサイズの任意の値が有効

×：バッファサイズの任意の値が無効（バッファサイズは4,096バイト）

－：各環境変数の間に関連性はない（バッファサイズの任意の値が有効）

(2)　指定例（Bシェル）

環境変数の指定例を次に示します。

CBLINBUFSIZE=32768　プロセス内の入力時にファイルバッファを32,768バイトとする
export  CBLINBUFSIZE
CBLOUTBUFSIZE=8192　プロセス内の出力時のファイルバッファを8,192バイトとする
export  CBLOUTBUFSIZE

CBLD_FILE01=NOINBUFSIZE　ファイル名FILE01について，入力の指定を取り消す※1
export  CBLD_FILE01　　　出力を取り消す場合はNOOUTBUFSIZEを指定する

注※1

複数のオプションを指定する場合は，次に示すように各オプションをコロン（：）で区切ります。

CBLD_FILE01=NOINBUFSIZE:NOOUTBUFSIZE

export CBLD_FILE01

(3)　規則

環境変数に指定するバッファサイズは，レコード長より大きい値を指定してください。

環境変数の指定に関して，次に示す場合は環境変数の指定は無効となり，ファイルのバッファサイズは，4,096バイトになります。このとき，エラーメッセージなどは出力しません。

バッファサイズ1～2,000,000,000以外

半角数字以外の文字

環境変数には，約2GBまでの値を指定できますが，実際に有効になる値は，マシン環境で使用できるメモリサイズに依存します。指定されたメモリサイズが確保できない場合は，システムがバッファを自動的に割り当てて動作します。

OPEN文のモードがI-O指定の場合は，この機能の対象外となります。

環境変数名で指定する「ファイル名」はSELECT句で指定したファイル名に対応します。ただし，ファイル名内のハイフン（-）はアンダーバー（_）に置き換えて指定してください。指定例を次に示します。
（COBOLでの記述例）
　　SELECT A-FILE ASSIGN TO SYS000.
（環境変数の指定例（Bシェル））
　　CBLD_A_FILE=NOINBUFSIZE
　　export CBLD_A_FILE

(4)　注意事項

ファイル入出力でのバッファサイズは，使用されるファイルサイズ，ディスク装置・マシン環境，およびシステムの仕様に依存することから実際に性能検証によって適切な値を使用してください。

7.　ファイル共用（ファイルシェア）

この章では，COBOLプログラムでのファイル共用の方法について説明します。

＜この章の構成＞

7.1　ファイル共用（ファイルシェア）の概要

7.2　ファイル共用の詳細

7.1　ファイル共用（ファイルシェア）の概要

ファイル共用（ファイルシェア）とは，マルチユーザ環境でユーザ間のファイルを共用する機能です。この機能を使用すると，データの更新時にレコードまたはファイル全体を，ほかのCOBOLプログラムと共用したり保護したりできます。

表7-1　ファイル共用を使用できるファイル編成

ファイル編成 | ファイル共用 | 備考
ファイルレベル | レコードレベル
順ファイル | ○ | ○ |
相対ファイル | ○ | ○ |
ISAMによる索引編成ファイル | ○ | ○ |
テキストファイル | ○ | × |
CSVファイル | × | × |
HiRDBによる索引編成ファイル | HiRDBによる索引編成ファイル固有のファイル共用を使用できる。 | 詳細は「6.　ファイル入出力機能」を参照。

（凡例）

○：ファイル共用が使用できる

×：ファイル共用が使用できない

ISAMによる索引ファイル以外

マルチスレッド対応COBOLプログラムに対応しません。

ISAMによる索引ファイル

マルチスレッド対応COBOLプログラムに対応します。

ただし，同一スレッド内で一つのファイル単位または一つのレコード単位を使用する場合，ファイル共用は使用できません。

7.2　ファイル共用の詳細

ファイル共用の詳細について説明します。

ファイル共用については，マニュアル「COBOL2002　言語　拡張仕様編　3. ファイル共用機能」を参照してください。

＜この節の構成＞

7.2.1　ファイルレベルのファイル共用

7.2.2　レコードレベルのファイル共用

7.2.3　ファイルの排他・共用の区別

7.2.4　各実行単位の施錠形式

7.2.5　ファイル共用を省略した場合の処理

7.2.6　ラージファイル入出力機能でのファイルの共用

7.2.7　ネットワーク上のファイルを使用する場合の注意事項

7.2.1　ファイルレベルのファイル共用

ファイルは，常に次の活性状態か不活性状態のどちらかの状態にあります。

活性状態
ファイルが一つ以上の実行単位に対して開かれている状態

不活性状態
どの実行単位からも開かれていない状態

活性状態のファイルは，ほかの実行単位からOUTPUTモードで開けません。存在しないファイルは，OUTPUTモードで自動的に生成されますが，このファイルはほかのCOBOLプログラムとは共用できません。

活性状態のファイルのモードには，次に示す排他モードと共用モードの二つがあります。

(a)　排他モード

排他モードのファイルは，一つの実行単位に対してだけ開かれています。ほかの実行単位がこのファイルを使用しようとしても，ファイル施錠のエラーが返り，使用が拒否されます。

排他モードでは，ファイルが一つの実行単位に対して施錠され，その実行単位だけがファイルを使用できます。この実行単位がファイルを閉じるとファイルの施錠は解除されます。

(b)　共用モード

共用モードのファイルは，複数のプログラムから使用できます。各実行単位がファイルを使うとき，一つまたは複数のレコード単位に施錠すれば，データを保護できます。

次に，ファイルレベルのファイル共用の例を示します。

プログラムXが，排他モードでファイル'MASTER1'を開きます。

プログラムYが'MASTER1'を開こうとしますが，すでにプログラムXが排他モードで開いているため，OPEN文は失敗します。このとき，入出力状態には93が返されます。

7.2.2　レコードレベルのファイル共用

＜この項の構成＞

(1)　ファイルの開き方による相違

(2)　レコード施錠

(1)　ファイルの開き方による相違

INPUTモードで開かれたファイルは共用できますが，ファイルのレコードは施錠できません。I-OまたはEXTENDモードで開かれたファイルは共用できます。

ファイルをEXTENDモードで開いている間に，ほかのファイル単位がINPUTまたはI-Oモードで同じファイルを開いた場合，完全な論理ファイル（EXTENDモードで追加したレコードを含めた論理ファイル）のレコードを読み込めます。しかし，EXTENDモードで開かれたほかの実行単位については，レコード施錠によってレコードの出力を防げません。

INPUTモードで開かれた共用ファイルは，ほかのファイル単位からのレコードの参照，更新を防げません。ファイルをEXTENDモードで開いている間に，ほかのファイル単位がINPUTまたはI-Oモードで開いてレコードを読み込もうとした場合，EXTENDモードで出力されたレコードについては，読み込みが保証されます。ただし，LOCK MODE句の指定のないINPUTモードの場合，読み込みは保証しません。

ほかのファイル単位がEXTENDモードで開かれた場合に，双方に追加されるレコードの内容については，マニュアル「COBOL2002　言語　拡張仕様編　3. ファイル共用機能」を参照してください。

(2)　レコード施錠

単一のレコードを施錠する場合と複数のレコードを施錠する場合についてそれぞれ説明します。

(a)　単一レコード施錠

単一レコード施錠を指定した実行単位は，一つのファイル内に一つだけのレコード施錠を取得できます。

単一レコード施錠では，レコード施錠の解放をUNLOCK文で指定できます。また，新しいレコードを施錠すると，それまでのレコード施錠は自動的に解放されます。同じ実行単位でレコード施錠が解放される条件を次に示します。

START文以外の入出力文が成功したとき

ファイルを閉じたとき

START文ではレコード施錠は解放されません。また，レコード施錠の取得，解放に失敗したとき，レコード施錠の状態は保証しません。

次に，単一レコード施錠の例を示します。

プログラムXが，共用モードでファイル'MASTER1'を開きます。

READ文が実行されると，1番目のレコードが施錠されます。

次のREAD文が実行されると，1番目のレコードの施錠が解除され，2番目のレコードが施錠されます。

プログラムYが，共用モードでファイル'MASTER1'を開きます。

READ文が実行されると，1番目のレコードが施錠されます。

READ文が実行されますが，2番目のレコードはプログラムXによって施錠されているため，READ文は失敗します。

(b)　複数レコード施錠

複数レコード施錠を指定した実行単位は，一つのファイルに複数のレコード施錠を同時に取得できます。施錠されたレコードはほかの実行単位から使用できませんが，施錠されていないレコードは使用できます。

複数レコード施錠は，相対または索引ファイルにだけ使用できます。

複数レコード施錠は，LOCK MODE句にMANUALを指定し，WITH LOCK指定のREAD文を実行するごとにレコード単位で取得できます。WITH LOCK指定のないREAD文を実行した場合，レコード施錠は取得されません。このときでも，取得済みのレコード施錠は解放されません。

同じ実行単位でレコード施錠が解放される条件は次のとおりです。

ファイルに対してUNLOCK文を実行したとき

ファイルを閉じたとき

レコード施錠の取得，解放に失敗したとき，レコード施錠の状態は保証しません。

また，COBOL入出力サービスルーチンで作成した相対ファイルでも，複数レコード施錠を使用できます。

7.2.3　ファイルの排他・共用の区別

ファイルの排他・共用の区別を次に示します。

表7-2　ファイルの排他・共用の区別

OPENモード | INPUT | I-O | OUTPUT | EXTEND
WITH LOCK指定 | あり | なし | あり | なし | あり | なし | あり | なし
LOCK MODE句の指定 | なし | × | ○ | × | × | × | × | × | ×
EXCLUSIVE | × | × | × | × | × | × | × | ×
AUTOMATIC | × | ○ | × | ○ | × | × | × | ○※
MANUAL | × | ○ | × | ○ | × | × | × | ○※

（凡例）

○：共用

×：排他

注※

EXTENDモードで開かれ共用されているファイルに対して追加書きする場合は，複数のプログラムから実行しないようにしてください。詳細については，マニュアル「COBOL2002　言語　拡張仕様編　3.2.8 WRITE文（ファイル共用機能）」の説明を参照してください。

7.2.4　各実行単位の施錠形式

＜この項の構成＞

(1)　順編成ファイル，相対編成ファイル，ISAMによる索引編成ファイルおよびテキスト編成ファイル（ファイルレベルのファイル共用だけ該当）の場合

(1)　順編成ファイル，相対編成ファイル，ISAMによる索引編成ファイルおよびテキスト編成ファイル（ファイルレベルのファイル共用だけ該当）の場合

順編成ファイル，相対編成ファイル，ISAMによる索引編成ファイル，およびテキスト編成ファイル（ファイルレベルのファイル共用だけ該当）の場合の各実行単位の施錠形式を次に示します。

注※

順ファイルおよびテキストファイルでは，ASSIGN句にLOCK MODE MANUALの指定はできません。順ファイルおよびテキストファイルを対象外とします。

7.2.5　ファイル共用を省略した場合の処理

LOCK MODE句を省略した場合，そのファイルは，LOCK MODE IS EXCLUSIVEが指定されたとみなされ，ファイルレベルのファイル共用が有効となります。ファイルレベルのファイル共用については，「7.2.1　ファイルレベルのファイル共用」を参照してください。

7.2.6　ラージファイル入出力機能でのファイルの共用

ラージファイル入出力でのファイル共用に関しては，「6.10.2　ラージファイル入出力機能でのファイルの共用」を参照してください。

7.2.7　ネットワーク上のファイルを使用する場合の注意事項

同じネットワーク環境内にある異なるUNIX間で実行する場合，レコードレベルのファイル共用は保証しません。

ファイル共用を使用する場合，ネットワークを構築するときにOSのロック機能が動作するように環境をセットアップしなければならない場合があります。ネットワークのセットアップについては，システムのマニュアルを参照してください。

（例）

NFSを利用してリモートファイルにアクセスする場合，OSのロック機能はカーネルのロック機構とNFSのロック監視デーモン（rpc.statd）およびNFSのロック管理デーモン（rpc.lockd）の補助機構によって実現されています。そのため，NFSロックデーモン（rpc.statd，rpc.lockd）を起動しなければなりません。NFSロックデーモンを起動しないと，リモートファイルに対するファイル共用は使用できません。

8.　プリンタへのアクセス

COBOLプログラムでは，XMAP3を使用してプリンタへ出力できます。この章では，プリンタへのアクセスについて説明します。

＜この章の構成＞

8.1　プリンタアクセスの種類と概要

8.2　プリンタアクセスの共通規則

8.3　入出力エラー処理

8.4　XMAP3による印刷（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）

8.1　プリンタアクセスの種類と概要

＜この節の構成＞

(1)　印刷モード

(2)　プリンタアクセスで使用できるファイル編成

(1)　印刷モード

COBOLプログラムからプリンタにアクセスするには，次の方法があります。

XMAP3による印刷（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）

XMAP3と連携してプリンタ出力する印刷モードです。書式オーバレイやCHARACTER TYPE句での行データ印刷制御など，XMAP3の機能を使用して印刷できます。

(2)　プリンタアクセスで使用できるファイル編成

プリンタアクセスで使用できるファイル編成は，順編成ファイルまたはテキスト編成ファイルです。ただし，印刷モードによっては，使用できるファイル編成に制限があります。

各印刷モードで使用できるファイル編成について，次に示します。

印刷モード | 順編成ファイル | テキスト編成ファイル
XMAP3による印刷 | ○ | ×

（凡例）

○：使用できる

×：使用できない

順編成については，マニュアル「COBOL2002　言語　標準仕様編　5.1.7(1) 順編成」を，テキスト編成については，マニュアル「COBOL2002　言語　拡張仕様編　2.1 テキスト編成」を，それぞれ参照してください。

8.2　プリンタアクセスの共通規則

印刷モードで共通な規則について，次に示します。

＜この節の構成＞

8.2.1　ファイル割り当て

8.2.2　入出力手続き文と動作

8.2.3　行制御出力

8.2.4　実行時環境変数で行制御を操作する方法

8.2.1　ファイル割り当て

プリンタ出力をするファイルは，環境部入出力節でORGANIZATION句に順編成またはテキスト編成のどちらかを指定します。

環境入出力節でファイル編成を指定したあと，定数指定，環境変数指定，データ名指定のどれかの方法で，ASSIGN句に出力先の物理ファイル名を割り当てます。

割り当てる物理ファイル名は，印刷モードごとに異なります。詳細は，「8.4　XMAP3による印刷（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）」を参照してください。また，ファイル割り当ての詳細については，「6.2　ファイル割り当ての共通規則」を参照してください。

定数指定，環境変数指定，データ名指定の記述例を，それぞれ次に示します。

＜この項の構成＞

(1)　定数指定

(2)　環境変数指定

(3)　データ名指定

(1)　定数指定

      ENVIRONMENT DIVISION.
      INPUT-OUTPUT SECTION.
      FILE-CONTROL.
          SELECT FILE-1 ASSIGN TO '物理ファイル名'.
          :

(2)　環境変数指定

      ENVIRONMENT DIVISION.
      INPUT-OUTPUT SECTION.
      FILE-CONTROL.
          SELECT FILE-1 ASSIGN TO PRT.
          :

注

実行時に，次の環境変数が指定されているものとします。

CBL_PRT=物理ファイル名

(3)　データ名指定

      ENVIRONMENT DIVISION.
      INPUT-OUTPUT SECTION.
      FILE-CONTROL.
          SELECT FILE-2 ASSIGN TO FILE-NAME.
          :
      WORKING-STORAGE SECTION.
      01 FILE-NAME PIC X(40).
      PROCEDURE DIVISION.
          MOVE '物理ファイル名' TO FILE-NAME.
          :

8.2.2　入出力手続き文と動作

プリンタへ行データを出力するために使用する文を次に示します。

表8-1　入出力手続き文と動作

使用する文 | XMAP3による印刷
OPEN文 | プリンタ出力処理の準備をする。OUTPUTモードで実行する。
WRITE文 | 1行のデータを行制御をして印刷用ファイルに書き出す。
CLOSE文 | プリンタ出力処理を終了する。

8.2.3　行制御出力

行制御出力とは，データ部のファイル記述項にLINAGE句を指定したり，WRITE文にADVANCING／POSITIONING指定またはCHARACTER TYPE句を指定したりして，行データを制御する出力処理のことです。行制御出力は，報告書作成機能を含みます。

CHARACTER TYPE句については，マニュアル「COBOL2002　言語　拡張仕様編　14.2.1(1) CHARACTER TYPE句」を，WRITE文については，マニュアル「COBOL2002　言語　標準仕様編　10.8.55 WRITE文」を，それぞれ参照してください。

＜この項の構成＞

(1)　順編成ファイル，テキスト編成ファイルの行制御

(1)　順編成ファイル，テキスト編成ファイルの行制御

順編成ファイル，テキスト編成ファイルに対して行制御が実行されるのは，次の場合です。

データ部のファイル記述項にLINAGE句を指定した場合。

WRITE文にADVANCING指定，POSITIONING指定をした場合。

8.2.4　実行時環境変数で行制御を操作する方法

環境変数CBLD_ファイル名に，次の環境変数を指定すると，WRITE文の行制御指定を操作できます。

SAMAADV／NOSAMAADV
SAMAADVは，ADVANCING指定を記述しないWRITE文で自動的にAFTER ADVANCING 1 LINEが仮定されます。NOSAMAADVは，仮定されません。標準値は，NOSAMAADVです。

8.3　入出力エラー処理

入出力エラーの詳細は，「6.3　入出力エラー処理」を参照してください。

8.4　XMAP3による印刷（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）

XMAP3を使用すると，書式と行データを重ね合わせる印刷（書式オーバレイ印刷）や，印刷制御付きの行データの印刷ができます。

XMAP3による印刷機能について説明します。

＜この節の構成＞

8.4.1　前提条件とプログラムの作成方法

8.4.2　プリンタへの出力と割り当て方法

8.4.3　出力形態とレコード形式

8.4.4　入出力手続き文と動作

8.4.5　書式オーバレイの出力方法

8.4.6　XMAP3による印刷モードの注意事項

8.4.1　前提条件とプログラムの作成方法

XMAP3による印刷をするには，あらかじめ帳票の定義が必要です。帳票を定義するには，XMAP3を使用します。

XMAP3による印刷を使用するプログラムは，コンパイル時に-XMAP,LinePrintオプションの指定が必要です。

8.4.2　プリンタへの出力と割り当て方法

＜この項の構成＞

(1)　印刷サービス名称の指定

(2)　プリンタ出力の識別

(1)　印刷サービス名称の指定

印刷サービス名称とは，XMAP3で使用する端末やプリンタの識別名称です。

COBOLプログラム実行時，印刷サービス名称は，SELECT句で指定したファイルのASSIGN句で指定した外部装置名に割り当てられます。印刷サービス名称は，環境変数CBLX_外部装置名で指定します。印刷サービス名称の指定方法を次に示します。

形式

SELECT ファイル名 ASSIGN TO 外部装置名

環境変数

CBLX_外部装置名=印刷サービス名称

注意事項

ASSIGN句で定数指定またはデータ名指定をした場合，または外部装置名を環境変数CBL_外部装置名で指定した場合，指定した文字列は，印刷サービス名称ではなく物理ファイル名として扱われるので注意してください。

ASSIGN句で指定した外部装置名に対して，印刷サービス名称の指定（CBLX_外部装置名）と物理ファイル名の指定（CBL_外部装置名）を同時に指定した場合，印刷サービス名称の指定（CBLX_外部装置名）が有効となります。これらの環境変数を同時に指定するときには，注意が必要です。

環境変数CBLX_外部装置名は，OPEN文を実行するごとに環境変数の値が参照されます。

(2)　プリンタ出力の識別

COBOLプログラムの記述，-XMAP,LinePrintオプションの指定の有無と，プリンタ，通常ファイルへの出力の識別を次に示します。

表8-2　プリンタ，通常ファイルへの出力の識別

-XMAP,LinePrint
オプションの指定
COBOLプログラムの記述
外部装置名（環境変数）
ASSIGN定数
または
ASSIGNデータ名

APPLY FORMS-OVERLAY句の指定
CHARACTERTYPE句の指定
CBLX_xxx
（印刷サービス名）
CBL_xxx
（物理ファイル名）

プリンタ
ファイル
ファイル

あり
あり
あり
○※¹
×※²
×※³

なし
○※¹
×※²
×※³

あり
なし
あり
○※¹
×※²
×※³

なし
○※¹
○
○

なし
－
－
×
○
○

（凡例）

○：出力できる

×：出力できない

－：指定しても意味を持たない（覚え書きとなる）

注※1

OUTPUT指定以外でOPEN文を実行すると，実行時エラーとなります。

注※2

実行時にエラーメッセージが出力されます。

注※3

コンパイル時にエラーメッセージが出力されます。

出力先がプリンタの場合，コンパイルリスト（情報リスト）のファイル情報の個所には，プリンタ出力であることが表示されます。情報リストについては，「付録C　コンパイルリスト」を参照してください。

8.4.3　出力形態とレコード形式

XMAP3による印刷で出力するレコード形式は，XMAP3に依存します。

8.4.4　入出力手続き文と動作

XMAP3による印刷をする場合，印刷用ファイルへデータを出力するために，手続き部で次の文を使用します。

OPEN文
印刷用ファイルを使用するための準備をします。OUTPUTモードで実行します。

WRITE文
レコードを印刷用ファイルに書き出します。明示的または間接的にADVANCING指定をします。間接的にとは，同一ファイルに対するほかのWRITE文にADVANCING指定がされている場合をいいます。

CLOSE文
ファイル処理を終了します。
印刷用ファイル中に残っている行データは，すべてプリンタに出力されます。

＜この項の構成＞

(1)　行データの印刷制御付きの指定

(1)　行データの印刷制御付きの指定

印刷制御付きの行データを出力するには，WRITE文で出力するデータ項目にCHARACTER TYPE句を指定します。CHARACTER TYPE句の書き方や規則については，マニュアル「COBOL2002　言語　拡張仕様編　14.2.1 データ記述項（書式印刷機能）」を参照してください。

また，-XMAP,LinePrintオプションを指定したプログラムにPOINT-l，FORMAT-n，INTERVAL-iを指定した場合，各項目（l，n，i）に指定できる値の範囲と意味については，XMAP3での定義に従います。詳細は，マニュアル「画面・帳票サポートシステム XMAP3 Server」を参照してください。

8.4.5　書式オーバレイの出力方法

書式付きで印刷をするときには，書式オーバレイイメージ名称を指定します。これには，次の二つの方法があります。

＜この項の構成＞

(1)　プログラムによる書式オーバレイイメージの指定

(2)　環境変数による書式オーバレイイメージの指定

(1)　プログラムによる書式オーバレイイメージの指定

プログラム中の入出力管理記述項（I-O-CONTROL.）に，APPLY FORMS-OVERLAY句を指定すると，書式オーバレイイメージを重ねて印刷できます。

APPLY FORMS-OVERLAY句については，マニュアル「COBOL2002　言語　拡張仕様編　14.1.1(1) APPLY FORMS-OVERLAY句」を参照してください。

（例）

          :
      I-O-CONTROL.
          APPLY FORMS-OVERLAY TO FOV-NAME ON
          DAILY-FILE.
          :
      WORKING-STORAGE SECTION.
      77 FOV-NAME PIC X(8) VALUE 'FORMOVL1'.
          :

(2)　環境変数による書式オーバレイイメージの指定

プログラム中にAPPLY FORMS-OVERLAY句を指定しないときは，XMAP3の環境変数の指定によって，COBOLプログラムに関係なく書式オーバレイイメージを重ねて印刷できます。

プログラム中にAPPLY FORMS-OVERLAY句があるとき，XMAP3の環境変数によって書式名を有効にする場合は，書式名格納エリアに必ずNULLを格納してください。XMAP3の環境変数については，マニュアル「画面・帳票サポートシステム　XMAP3 Server」を参照してください。

8.4.6　XMAP3による印刷モードの注意事項

重ね打ちの制限
行データの重ね打ちはできません。

制御文字の取り扱い
制御文字は，次のように取り扱われます。

制御文字
プリンタ上での扱い

X'0A'（改行）
改行

X'0C'（改ページ）
改ページ

X'0D'（復帰）
印字されない

X'00'～X'1F'，X'7F'
（ただしX'0A'，X'0C'，X'0D'は除く）
印字されない

可変長レコード形式を使用する場合の注意事項
プリンタ出力のためのWRITE文で書き出すレコードは，可変長レコード形式として定義していても，ファイルの先頭のヘッダレコード（128バイト）と各レコード先頭のレコード長領域（4バイト）が付加されません。

リンクの指定
XMAP3による印刷モードを使用するCOBOLプログラムをリンクするとき，次の形式に従ってccコマンドまたはccbl2002コマンドを実行する必要があります。
XMAP3を使用する場合の例を次に示します。
形式（ccコマンド）

 cc オブジェクトファイル名 … -lxmovl※ -lxpw※

形式（ccbl2002コマンド）

 ccbl2002 -XMAP,LinePrint ファイル名 … -lxmovl※ -lxpw※

注※
-lxmovl，および-lxpwは，XMAP3が組み込まれているライブラリです。

書式オーバレイなしの行データだけの印刷はできません。行データだけを印刷するときでも，けい線や固定文字列などを何も指定していない空の書式を指定する必要があります。

9.　報告書作成機能

この章では，報告書作成機能を使った報告書の作成方法について説明します。

＜この章の構成＞

9.1　報告書作成機能の概要

9.2　ファイル割り当ての共通規則

9.3　入出力エラー処理

9.4　ファイルの作成と割り当て方法

9.5　ファイル編成とレコード形式

9.6　報告書ファイルの出力

9.7　報告書ファイルの入力

9.1　報告書作成機能の概要

一般に，事務計算で作成する報告書には，次のような幾つかの特徴があります。

報告書の一般的な特徴

報告書は，計算機のラインプリンタのミシン目ごとに区切られたページの集まりから成る。

報告書には，全体の表紙と裏表紙が付く。

各ページの上部や下部にはページの見出しが付く。

報告書の本文は，文章や図形で何か出来事を記述したものではなく，同じ形式のデータ（レコード）が縦に並んだものである。

データは，データ中の幾つかの項目（キーデータ項目，制御用データ項目）に従って，昇順または降順に順序正しく並んでいる。

制御用データ項目の値が変化すると制御の切れ目（コントロールブレーク）となり，小計，中計，大計などの報告実行を作成する。

このような形式と内容を持った報告書を，COBOLの通常の句や文を組み合わせて作成する場合，手間が掛かります。このためCOBOLには，通常の入出力機能とは別に，報告書作成機能が用意されています。

報告書作成機能は，定形的な報告書作成の手続きを，手続き部の文を組み合わせて指定するのではなく，データ部の記述項で指定します。

なお，このシステムでは，報告書作成機能（INITIATE／GENERATE／TERMINATE文）で作成した報告書は，AFTER ADVANCING指定のWRITE文で順ファイル（報告書ファイル）にレコードとして出力されます。

なお，報告書機能の文法規則については，マニュアル「COBOL2002　言語　標準仕様編　13. 報告書作成機能」を参照してください。

9.2　ファイル割り当ての共通規則

報告書を出力するファイルは，環境部の入出力節で，ORGANIZATION句に順編成を指定します。

また，定数指定，環境変数指定，データ名指定のどれかの方法で，ASSIGN句に出力先の物理ファイル名を割り当てます。物理ファイル名の割り当て方法の詳細は，「6.2　ファイル割り当ての共通規則」を参照してください。

9.3　入出力エラー処理

＜この節の構成＞

9.3.1　USE手続き

9.3.1　USE手続き

手続きが通常の順序で実行されるのではなく，利用者が直接検出できない条件が発生したときに実行しなければならない手続きを，USE文で指定します。

USE文は，手続きの実行の条件を指定するための翻訳指示文です。そのため，USE文自身が実行されることはありません。

USE文で指定する手続きは，手続き部の宣言部分で指定します。手続き部の構成の規則については，マニュアル「COBOL2002　言語　標準仕様編　10. 手続き部（PROCEDURE DIVISION）」を参照してください。

報告書作成機能で使用するUSE文では，報告書作成手続きを指定するBEFORE REPORTING指定，およびAFTER STANDARD EXCEPTION PROCEDURE指定を使用できます。報告書作成機能を使用したプログラム中でのUSE文の指定例を，次に示します。

        ：
      01 FOOT1 TYPE IS CONTROL FOOTING SHITEN.
        02 LINE NUMBER PLUS 2.
        ：
      PROCEDURE DIVISION.
      DECLARATIVES.
      CNT SECTION.
          USE BEFORE REPORTING FOOT1.
      C.
        ADD 1 TO CNT-1.
      END DECLARATIVES.
        ：

このようにコーディングすると，FOOT1を印刷する前にADD 1 TO CNT-1が実行されます。

9.4　ファイルの作成と割り当て方法

報告書ファイルの作成と割り当て方法は，順編成ファイルの場合と同じです。詳細は，「6.4.1　ファイルの作成と割り当て方法」を参照してください。

9.5　ファイル編成とレコード形式

報告書ファイルのファイル編成とレコード形式は，順編成ファイルの場合と同じです。

9.6　報告書ファイルの出力

報告書作成機能で作成した報告書は，AFTER ADVANCING指定のWRITE文で順ファイル（報告書ファイル）にレコードとして出力されます。

報告書ファイルの出力形式は，レコード形式と報告書記述項でのCODE句の有無によって異なります。報告書ファイルの出力形式と出力例を次に示します。出力例のX'0A'は改行，X'0D'は復帰，X'0C'は改ページを示します。

＜この節の構成＞

(1)　固定長または可変長でCODE句の指定がない場合

(2)　固定長でCODE句の指定がある場合

(3)　可変長でCODE句の指定がある場合

(1)　固定長または可変長でCODE句の指定がない場合

順編成ファイルに対する，AFTER ADVANCING指定のWRITE文の形式で出力されます。

（例1）

WRITE REC AFTER ADVANCING 3で出力した場合

（例2）

WRITE REC AFTER ADVANCING PAGEで出力した場合

(2)　固定長でCODE句の指定がある場合

順編成ファイルに対する，AFTER ADVANCING指定のWRITE文の形式で出力されます。

利用者レコードの前後に付けられる制御コードについては，先頭の制御コード以外は，レコード長分の空白（CODE句で指定したコードが先頭に付けられる）と復帰コード，改行コードを付けた形式で出力されます。

ただし，-IgnoreLCCオプションの指定があるときは，レコード長から1を引いた分の空白と復帰コード，改行コードを付けた形式で出力されます。

（例1）

WRITE REC AFTER ADVANCING 3で出力した場合

（例2）

WRITE REC AFTER ADVANCING PAGEで出力した場合

(3)　可変長でCODE句の指定がある場合

順編成ファイルに対する，AFTER ADVANCING指定のWRITE文の形式で出力されます。

利用者レコードの前後に付けられる制御コードについては，先頭の制御コード以外は，CODE句で指定したコードを付けた形式で出力されます。

（例1）

WRITE REC AFTER ADVANCING 3で生成した場合

（例2）

WRITE REC AFTER ADVANCING PAGEで出力した場合

固定長でCODE句の指定がある場合と同じです。

9.7　報告書ファイルの入力

報告書ファイルを読んでレコードを入力するときの形式は，レコード形式と報告書記述項でCODE句を指定しているかどうかによって次のように異なります。

＜この節の構成＞

(1)　固定長でCODE句の指定がない場合

(2)　固定長でCODE句の指定がある場合

(3)　可変長の場合

(1)　固定長でCODE句の指定がない場合

順編成固定長の形式では読めません。

(2)　固定長でCODE句の指定がある場合

順編成固定長で読むためには，利用者レコード長に制御コード分の2を加えた形式で読み込む必要があります。

ただし，-IgnoreLCCオプションの指定があるときは，先頭1バイトが出力されないため，レコード長に1を加えた形式で読み込みます。

（例）-IgnoreLCCオプション指定なしの場合

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
      ENVIRONMENT DIVISION.
      INPUT-OUTPUT SECTION.
      FILE-CONTROL.
      SELECT FILE1 ASSIGN SYS001.
      DATA DIVISION.
      FILE SECTION.
      FD FILE1.
      01 REC-1.
       02 R-DATA1 PIC X(1).             …1.
       02 R-DATA2 PIC X(1) or PIC X(2). …2.
       02 R-DATA3 PIC X(n).             …3.
       02 R-DATA4 PIC X(1).             …4.
      WORKING-STORAGE SECTION.
            ：
      PROCEDURE DIVISION.
            ：
          OPEN INPUT FILE1.
            ：
          READ FILE1.
            ：
          CLOSE FILE1.
          STOP RUN.

行制御コードX'0C'（改ページ）またはX'0A'（改行）

ファイル作成時にCODE句で指定した文字の長さ分（1バイトまたは2バイト）を確保する。

ファイル作成時にRD句で指定したレコード長（2.の長さは含まない）

行制御コードX'0D'（復帰）

(3)　可変長の場合

可変長の場合，CODE句の指定があるかどうかに関係なく可変長ファイルとして作成されないため，順編成可変長では読めません。また，順編成固定長でも読めません。

10.　ACCEPT／DISPLAY／STOP文による入出力

この章では，ACCEPT文，DISPLAY文，およびSTOP文を使用した入出力機能について説明します。

＜この章の構成＞

10.1　ACCEPT／DISPLAY／STOP文による入出力の種類と概要

10.2　少量入出力

10.3　コマンド行へのアクセス

10.4　環境変数へのアクセス

10.5　COBOLログファイル出力機能

10.1　ACCEPT／DISPLAY／STOP文による入出力の種類と概要

COBOL2002では，ACCEPT文，DISPLAY文，STOP文を使用して，次の入出力操作を実行できます。

少量入出力

標準入出力ファイル（stdin，stdout，stderr）に対して，データを入出力できます。

詳細は，「10.2　少量入出力」を参照してください。

日付や時刻の取得

日付や時刻の情報を取得できます。

詳細は，「10.2.3　日付や時刻を取得するACCEPT文」を参照してください。

コマンド行へのアクセス

コマンド名称，コマンド行の引数の個数，および引数の値を取得できます。

詳細は，「10.3　コマンド行へのアクセス」を参照してください。

環境変数へのアクセス

環境変数の値を取得したり，環境変数を設定したりできます。

詳細は，「10.4　環境変数へのアクセス」を参照してください。

COBOLログファイルへの出力

システム入出力関数レベルを指定して，DISPLAY文での書き込み失敗時に出力されたデータをCOBOL独自のログファイルとして出力できます。

詳細は，「10.5　COBOLログファイル出力機能」を参照してください。

なお，ACCEPT文，DISPLAY文，およびSTOP文の文法規則については，マニュアル「COBOL2002　言語　標準仕様編　10.8.1 ACCEPT文」，「COBOL2002　言語　標準仕様編　10.8.12 DISPLAY文」，「COBOL2002　言語　標準仕様編　10.8.46 STOP文」をそれぞれ参照してください。

10.2　少量入出力

ここでは，ACCEPT文，DISPLAY文，およびSTOP文を使用して，標準入出力ファイルにデータを入出力する方法について説明します。

＜この節の構成＞

10.2.1　入出力の対象とするファイルの割り当て方法

10.2.2　外部からのデータを入力するACCEPT文

10.2.3　日付や時刻を取得するACCEPT文

10.2.4　DISPLAY文によるデータの出力

10.2.5　システム入出力関数レベルの指定

10.2.6　STOP文

10.2.1　入出力の対象とするファイルの割り当て方法

ACCEPT文およびDISPLAY文で入出力の対象とするファイルは，環境変数によって割り当てます。

＜この項の構成＞

(1)　ACCEPT文

(2)　DISPLAY文

(1)　ACCEPT文

ACCEPT文のFROM指定と，環境変数の値によって，データの入力元となるファイルが決まります。FROM指定，環境変数の値と，データの入力元との関係を，次に示します。

FROM句の指定
環境変数の指定
データの入力元

SYSIN
　または
SYSIPT
CBL_SYSIN=stdin
標準入力

CBL_SYSIN=stdout
（エラーとなる）

CBL_SYSIN=stderr
（エラーとなる）

CBL_SYSIN=syslog
ファイル名「syslog」

CBL_SYSINが上記以外の場合
環境変数CBL_SYSINで指定した名称のファイル

CBL_SYSINの指定がない場合
標準入力

CONSOLE
標準入力

SYSSTD
CBL_SYSSTD=stdin
標準入力

CBL_SYSSTD=stdout
（エラーとなる）

CBL_SYSSTD=stderr
（エラーとなる）

CBL_SYSSTD=syslog
ファイル名「syslog」

CBL_SYSSTDが上記以外の場合
環境変数CBL_SYSSTDで指定した名称のファイル

CBL_SYSSTDの指定がない場合
標準入力

注

標準入力（stdin）を指定する場合は，英小文字で指定してください。「STDIN」のように英大文字で指定した場合，物理ファイル名として扱われます。

(2)　DISPLAY文

DISPLAY文のUPON指定と，環境変数の値によって，データの出力先となるファイルが決まります。UPON指定，環境変数の値と，データの出力先との関係を，次に示します。

UPON句の指定
環境変数の指定
データの出力先

SYSPUNCH
　または
SYSPCH
CBL_SYSPUNCH=stdin〔+〕
（エラーとなる）

CBL_SYSPUNCH=stdout〔+〕
標準出力※

CBL_SYSPUNCH=stderr〔+〕
標準エラー出力※

CBL_SYSPUNCH=syslog〔+〕
ファイル名「syslog」

CBL_SYSPUNCH=
　上記以外のファイル名〔+〕
環境変数CBL_SYSPUNCHで指定した名称のファイル

CBL_SYSPUNCH指定なし
標準出力

SYSOUT
　または
SYSLST
CBL_SYSOUT=stdin〔+〕
（エラーとなる）

CBL_SYSOUT=stdout〔+〕
標準出力※

CBL_SYSOUT=stderr〔+〕
標準エラー出力※

CBL_SYSOUT=syslog〔+〕
ファイル名「syslog」

CBL_SYSOUT=
　上記以外のファイル名〔+〕
環境変数CBL_SYSOUTで指定した名称のファイル

CBL_SYSOUT指定なし
標準出力

CONSOLE
標準出力

注

標準出力（stdout），標準エラー出力（stderr）を指定する場合は，英小文字で指定してください。「STDIN」のように英大文字で指定した場合，物理ファイル名として扱われます。

また，環境変数CBL_SYSPUNCH，CBL_SYSOUTの指定で，ファイル名の末尾に「+」を付けると，追加モードでデータを出力できます。

CBL_SYSPUNCH=ファイル名+

CBL_SYSOUT=ファイル名+

注※

追加モードは無視されます。

10.2.2　外部からのデータを入力するACCEPT文

ACCEPT文で外部からのデータを入力する場合，次の2種類の方法で受け取り側作用対象にデータを設定できます。

標準転記
入力したデータをそのまま受け取り側作用対象に設定します。

数値へのデータ変換を伴う転記
受け取り側作用対象が数字項目の場合，入力された英数字データを数字データへ変換して，受け取り側作用対象に設定します。

＜この項の構成＞

(1)　標準転記によるACCEPT文

(2)　数値へのデータ変換を伴うACCEPT文

(1)　標準転記によるACCEPT文

少量入出力に使用するACCEPT文について説明します。なお，ACCEPT文の言語仕様の詳細については，マニュアル「COBOL2002　言語　標準仕様編　10.8.1 ACCEPT文」を参照してください。

(a)　形式

ACCEPT 一意名
 〔FROM ｛SYSIN｜SYSIPT｜CONSOLE｜SYSSTD｜呼び名｝〕

(b)　一般規則

FROM指定を省略するとSYSINが仮定されます。

SYSIPTは，SYSINと同様とみなされます。

入出力の対象とするファイルの規則については，「10.2.1　入出力の対象とするファイルの割り当て方法」の「(1)　ACCEPT文」を参照してください。

環境変数CBL_SYSINまたは環境変数CBL_SYSSTDが指定されていない場合の入力先は，標準入力となります。

一意名の領域には，入力データの最後の改行文字は格納されません。

入出力エラーが発生した場合は，エラーメッセージが出力され，処理が終了します。

(c)　SYSIN，SYSIPT，CONSOLEを指定した場合の規則

データ入力の単位

改行文字までが1回だけ入力されます。

転記規則

入力データが一意名の領域より長い場合，一意名の長さで区切られ，残りは切り捨てられます。

入力データが一意名の領域より短い場合，一意名の残りの領域には空白が埋められます。

入力データは一意名の領域の左端から順に転送されます。一意名が日本語項目なら日本語空白文字（シフトJISのときはX'8140'，日本語EUCのときはX'A1A1'）が，日本語項目以外なら標準コードの空白文字（X'20'）が埋められます。日本語項目で入力が語境界（2バイトで1語）でなければエラーメッセージを出力して終了します。

(d)　SYSSTDを指定した場合の規則

データ入力の単位

1レコードは常に80バイトであり，改行文字がレコードの区切りとなります。1レコードが80バイトを超える場合は，先頭から80バイトが転送され，残りのデータは改行文字まで切り捨てられます。1レコードが80バイト未満の場合は，残った領域に空白文字が埋められたレコードとして扱われます。

転記規則

一意名の長さが80バイトの場合，データは一度だけ転送されます。

一意名の長さが80バイトより短い場合は，データは一度だけ転送され，残りは切り捨てられます。

一意名の長さが80バイトより長い場合は，一意名の長さを満たすまで80バイト単位で転送が繰り返されます。一意名の長さが80の倍数でないときは，80バイト単位での転送を繰り返したあと，最後に残った80バイト未満のデータ領域に入力データが格納されます。ただし，最後に残った80バイト未満のデータ領域に入りきらないデータがある場合，残ったバイト数から右側は，切り捨てられます。

入力データは一意名の領域の左端から順に転送されます。一意名が日本語項目なら日本語空白文字（シフトJISのときはX'8140'，日本語EUCのときはX'A1A1'）が，日本語項目以外なら標準コードの空白文字（X'20'）が埋められます。日本語項目で入力が語境界（2バイトで1語）でなければエラーメッセージを出力して終了します。

(2)　数値へのデータ変換を伴うACCEPT文

-NumAcceptオプションが指定されている場合，ACCEPT文は数字項目，数字編集項目，外部浮動小数点数字項目，内部浮動小数点数字項目で定義されている受け取り側作用対象に対して，入力されたデータを受け取り側作用対象の属性に合わせたデータに変換して，設定します。

(a)　データ変換の規則

データ変換の規則を，次に示します。

表10-1　-NumAcceptオプション指定時のACCEPT文の入力規則

一意名の項目
受け取り
領域長
入力できる文字
備考

符号なし数字項目
（Sなし）
Vなし
けた数
0～9

Vあり
けた数+1
0～9 .
数字はけた数以内
小数点位置を合わせる

符号あり数字項目
（Sあり）
Vなし
けた数+1
0～9 + -
数字はけた数以内

Vあり
けた数+2
0～9 + - .
数字はけた数以内
小数点位置を合わせる

数字編集項目
一意名長※
0～9 + - CR DB
数字は有効数字長以内
小数点位置を合わせる

外部浮動小数点数字項目
V .なし
22
0～9 E + -
数字は有効けた数以内

V .あり
22
0～9 E + - .

内部浮動小数点数字項目
単精度
22
0～9 E + - .

倍精度
22
0～9 E + - .

注※

ただし，左端にPを書いた数字編集項目の場合，左端にVを想定するため一意名長+1となります。

(b)　転記規則

転記規則

入力データが一意名の領域より長い場合，「表10-1　-NumAcceptオプション指定時のACCEPT文の入力規則」に示す受け取り領域長で区切られ，残りは切り捨てられます。

入力データが一意名の領域より短い場合，入力した長さだけが有効となり，一意名の残りの領域にはゼロが埋められます。

入力データは，一意名が数字項目の場合は小数点の位置に合わせて，数字編集項目の場合は編集文字に合わせて，外部浮動小数点数字項目，内部浮動小数点数字項目の場合は小数点位置，Eの位置に合わせて，それぞれ右詰めで転記されます。

(c)　入力データのチェック

次の規則に従って，入力データがチェックされます。

不当文字を入力した場合

各項目に「表10-1　-NumAcceptオプション指定時のACCEPT文の入力規則」の入力できる文字以外の文字が入力された場合，不当文字とみなされます。入力データ中に使用できる文字と不当文字とが混在している場合，不当文字は，一意名へ転記されません。

符号，小数点，Eを複数入力した場合

左端から検索し，最初に出現したものを有効とします。それ以降に出現したものは不当文字として扱います。

すべて不当文字の文字列を入力するか，または何も入力しなかった場合

一意名にすべてゼロを設定します。

一意名が外部浮動小数点数字項目，内部浮動小数点数字項目の場合

入力形式は小数点を含む外部10進形式，外部浮動小数点数字形式のどちらでもかまいません。ただし，外部浮動小数点数字形式で入力した場合，指数部のけた数は2けたまで有効となります。

10.2.3　日付や時刻を取得するACCEPT文

ACCEPT文で，FROM指定にDATE，DAY，DAY-OF-WEEK，およびTIMEを指定すると，それぞれの指定に応じた日付／時刻の情報を取得できます。

＜この項の構成＞

(1)　ACCEPT文で取得できる日付／時刻のデータ

(2)　ACCEPT文で取得する日付の変更

(1)　ACCEPT文で取得できる日付／時刻のデータ

ACCEPT文で取得できる日付／時刻のデータを，次に示します。

FROM指定
内容
形式

DATE
yymmdd
yy：西暦年号の下2けた
mm：01～12（月）
dd：01～31（日）
符号のない6けたの数字項目

DAY
yyddd
yy：西暦年号の下2けた
ddd：001～366（通年日）
符号のない5けたの数字項目

DAY-OF-WEEK
w
w：1～7（曜日）
1：月曜日
2：火曜日
　　　：
7：日曜日
符号のない1けたの数字項目

TIME
hhmmsstt
hh：00～23（時）
mm：00～59（分）
ss：00～59（秒）
tt：00（常に00）
符号のない8けたの数字項目

(2)　ACCEPT文で取得する日付の変更

通常，ACCEPT文では，現在の日付を取得しますが，環境変数を指定すると任意の日付を取得できます。

ACCEPT文で取得する日付を変更する方法を，次に示します。

(a)　西暦日付の変更（CBLDATE）

COBOLプログラムが取得する西暦表記の年月日を変更するには，環境変数CBLDATEを指定します。

形式

CBLDATE=yyyymmdd

yyyy

西暦の年を4けたで指定します。

mm

月を2けたで指定します。

dd

日を2けたで指定します。

規則

環境変数CBLDATEを指定して取得する日付を変更できるのは，次の文および関数です。
環境変数CBLDATEでの日付指定が有効となるCOBOLの文／関数

ACCEPT文 DATE指定

CURRENT-DATE関数

MOVE文（日付と時刻用） CURRENT-DATE指定

この環境変数は，上記の文のどれかを初めて実行したときに指定されている値を有効とします。

西暦年yyyyのうち，DATE指定のACCEPT文とMOVE文のCURRENT-DATE指定では下2けたが使用され，CURRENT-DATE関数では4けたが使用されます。

上記以外の形式で値を指定した場合，実行時に警告のメッセージが出力されます。この場合，環境変数CBLDATEを指定していない場合と同じように，DATE指定のACCEPT文にはシステムの日付が返されます。

指定例

COBOLプログラムが取得する西暦日付を，2010年10月12日に変更する場合の指定例を，次に示します。

CBLDATE=20101012

(b)　通算日付の変更（CBLDAY）

COBOLプログラムのACCEPT文DAY指定が取得する西暦年，および通年日を変更するには，環境変数CBLDAYを指定します。

形式

CBLDAY=yyyyddd

yyyy

西暦の年を4けたで指定します。

ddd

通年日（その年が始まってからの通算の日付）を3けたで指定します。

規則

この環境変数を指定すると，初めてDAY指定のACCEPT文が実行されたとき，yyddd（yyは西暦の下2けた）の部分が取得されます。

上記以外の形式で値を指定した場合，実行時に警告のメッセージが出力されます。この場合，環境変数CBLDAYを指定していない場合と同じように，DAY指定のACCEPT文にはシステムの日付が返されます。

指定例

ACCEPT文DAY指定が取得する通算日付を，2010年の56日に変更する場合の指定例を，次に示します。

CBLDAY=2010056

10.2.4　DISPLAY文によるデータの出力

少量入出力に使用するDISPLAY文について説明します。なお，DISPLAY文の言語仕様の詳細については，マニュアル「COBOL2002　言語　標準仕様編　10.8.12 DISPLAY文」を参照してください。

(a)　形式

DISPLAY ｛一意名｜定数｝
 〔UPON ｛SYSPUNCH｜SYSOUT｜SYSLST｜SYSPCH｜CONSOLE｜呼び名｝〕
 〔WITH NO ADVANCING〕
 〔IN DATA DUMP〕

(b)　一般規則

UPON指定を省略するとSYSOUTが仮定されます。

SYSLSTは，SYSOUTと同様とみなされます。

入出力の対象とするファイルの規則については，「10.2.1　入出力の対象とするファイルの割り当て方法」の「(2)　DISPLAY文」を参照してください。

指定した一意名または定数全部が出力されたあと，改行文字が最後に出力されます。ただし，WITH NO ADVANCING指定がある場合は，最後の改行文字が出力されません。

IN DATA DUMP指定がある場合は，一意名の格納値はバイト単位に16進数に変換されて出力されます。一意名の格納値の表示形式については，「36.10　DISPLAY文による一意名の16進ダンプ表示（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）」を参照してください。

入出力エラーが発生した場合は，エラーメッセージが出力されてから処理が終了します。

10.2.5　システム入出力関数レベルの指定

COBOL実行時ライブラリは，高水準システム入出力関数によってDISPLAY文のデータを出力します。

そのため，標準出力または標準エラー出力を，高水準システム入出力関数（fwrite，fflush）の使用が制限される出力先に切り替えた環境（システムのPIPE,FIFO機能など）では，DISPLAY文でエラーが発生し，プログラムが異常終了することがあります。

この場合，環境変数CBLSTDIOLVLを指定することによって，低水準システム入出力関数（write）を使用したデータ出力に変更できます。低水準システム入出力関数を使用したデータ出力に変更すると，DISPLAY文でエラーが発生してもプログラムの実行は継続され，DISPLAY文の出力データCOBOLログファイルに出力されます。なお，標準出力または標準エラー出力を変更しない場合は，環境変数CBLSTDIOLVLを指定する必要はありません。

環境変数CBLSTDIOLVLの指定方法
DISPLAY文によって，データを標準出力（stdout）または標準エラー出力（stderr）に出力する場合，COBOL実行時ライブラリが使用するシステム入出力関数のレベルを指定します。環境変数CBLSTDIOLVLの指定方法については「35.3　プログラムの実行環境の設定」を参照してください。

エラー発生時の動作
環境変数CBLSTDIOLVLを指定して低水準システム入出力関数を指定したデータ出力に変更しても，高負荷で書き込みが連続して発生した場合など，バッファの状態によって，DISPLAY文の実行中にエラーが発生することがあります。この場合，エラーが発生しても実行を継続します。
エラーが発生した場合の動作を次に示します。

エラーメッセージの出力
Wレベルのエラーメッセージを出力して，実行を継続します。ただし，メッセージの出力中にエラーが発生した場合は，メッセージが出力されないことがあります。この場合，環境変数CBL_SYSERRにファイル名を指定することによって，メッセージをファイルに出力できます。

DISPLAY文のエラー出力
エラー発生時のDISPLAY文の出力データをCOBOLログファイルに出力します。COBOLログファイルの詳細は，「10.5　COBOLログファイル出力機能」を参照してください。
また，COBOLログファイル出力中にエラーが発生した場合は，標準出力にDISPLAY文のデータを出力します。

10.2.6　STOP文

少量入出力に使用するSTOP文について説明します。なお，STOP文の言語仕様の詳細については，マニュアル「COBOL2002　言語　標準仕様編　10.8.46 STOP文」を参照してください。

(a)　形式

STOP 定数1

(b)　一般規則

STOP 定数文が実行されると，次の入力要求メッセージが標準エラー出力（stderr）に出力されます（「_」はカーソルを示します）。

（STOP 定数文の出力結果）

KCCC2003R-I
定数1
_

ただし，環境変数CBL_STOPNOADVにYESを指定した場合は，定数1だけが出力され，メッセージIDと定数1の直後の改行文字は出力されません。

形式

CBL_STOPNOADV=YES

（環境変数CBL_STOPNOADVにYESを指定した場合のSTOP 定数文の出力結果）

定数1_

10.3　コマンド行へのアクセス

ACCEPT文，DISPLAY文を使用して，コマンド行の情報へアクセスする方法について説明します。

コマンド行へのアクセスについては，マニュアル「COBOL2002　言語　拡張仕様編　10. コマンド行のアクセス」を参照してください。

＜この節の構成＞

10.3.1　コマンド行へのアクセスの種類と概要

10.3.2　引数を個別に取得する方法

10.3.3　引数を一括して取得する方法

10.3.1　コマンド行へのアクセスの種類と概要

ACCEPT文，DISPLAY文を使用して，次のコマンド行の情報を取得できます。

コマンド行の引数の個数

コマンド名称，およびコマンド行の引数の値

コマンド行の情報を取得するには，次の2種類の方法があります。

コマンド行の情報を個別に取得する方法

機能名ARGUMENT-NUMBER，ARGUMENT-VALUEを使用して，コマンド行の引数の個数，コマンド名称，またはコマンド行の個々の引数の値を，一つずつ取得します。

詳細は，「10.3.2　引数を個別に取得する方法」を参照してください。

コマンド行の情報を一括して取得する方法

機能名COMMAND-LINEを使用して，コマンド行のすべての引数の値を，一括して取得します。

詳細は，「10.3.3　引数を一括して取得する方法」を参照してください。

10.3.2　引数を個別に取得する方法

機能名ARGUMENT-NUMBERおよびARGUMENT-VALUEを使うことで，コマンド行に指定された引数の個数を取得できます。また，コマンド名称や，複数の引数の個々の値を取得できます。

＜この項の構成＞

(1)　コマンド行の引数の個数を取得する

(2)　コマンド行のファイル名称，引数の値を取得する（順読み込み）

(3)　コマンド行のファイル名称，引数の値を取得する（乱読み込み）

(4)　規則

(5)　プログラム例

(1)　コマンド行の引数の個数を取得する

コマンド行の引数の個数を取得するには，ACCEPT文を使用します。

形式（引数の個数の取得）

ACCEPT 一意名1 FROM 呼び名1※
       〔END-ACCEPT〕

注※

呼び名1は，環境部の特殊名段落で，ARGUMENT-NUMBERに関連づけておく必要があります。

(2)　コマンド行のファイル名称，引数の値を取得する（順読み込み）

コマンド行のファイル名称および引数の値を，コマンド行の先頭から順番に読み出して取得するには，ACCEPT文を使用します。

形式（ファイル名称または引数の値の順読み出し）

ACCEPT 一意名2 FROM 呼び名2※
       〔ON EXCEPTION 無条件文1〕
       〔NOT ON EXCEPTION 無条件文2〕
       〔END-ACCEPT〕

注※

呼び名2は，環境部の特殊名段落でARGUMENT-VALUEに関連づけておく必要があります。

(3)　コマンド行のファイル名称，引数の値を取得する（乱読み込み）

コマンド行のファイル名称および引数の値を，コマンド行の任意の位置から読み出して取得するには，最初にDISPLAY文を使用して読み出す位置を指定し，次にACCEPT文を使用してファイル名称または引数の値を読み出します。

形式（読み出し位置の指定）

DISPLAY  ｛一意名3｜整数1｝  UPON 呼び名1※1
        〔END-DISPLAY〕

形式（指定位置からのファイル名称または引数の値の読み出し）

ACCEPT 一意名2 FROM 呼び名2※²
       〔ON EXCEPTION 無条件文1〕
       〔NOT ON EXCEPTION 無条件文2〕
       〔END-ACCEPT〕

注※1

呼び名1は，環境部の特殊名段落でARGUMENT-NUMBERに関連づけておく必要があります。

注※2

呼び名2は，環境部の特殊名段落でARGUMENT-VALUEに関連づけておく必要があります。

(4)　規則

(1)(2)(3)に共通する規則

コマンド行へのアクセスができるのは，-Main,Systemオプションを指定したCOBOL主プログラムと，主プログラムに-Main,Systemオプションを指定したCOBOLプログラムを持つCOBOLの副プログラムでだけです。
コマンド行へのアクセスを使用しているCOBOL主プログラムに-Main,V3オプションを指定した場合，コンパイルエラーとなります。また，COBOL副プログラムに，-Main,Systemオプションを指定したCOBOL主プログラム以外のプログラムを持つ場合，実行時にエラーメッセージが出力され異常終了します。

(1)の形式での規則

引数および引数の個数を取得するときの転記規則を次に示します。
転記規則

引数は，一意名の左端から順に転送されて転記されます。

引数が一意名の領域より長い場合，一意名の長さで区切られます。

引数が一意名の領域より短い場合，標準コードの空白文字（X'20'）が埋められます。

コマンド行に引数を指定していない場合，ACCEPT文で取得する引数の個数は0になります。

(2)の形式での規則

順読み込みで引数を取得するときに，実行単位で最初に取得する引数は，実行可能ファイル名の次に指定された第1引数になります。

順読み込みで引数を取得する場合，上位プログラムで引数を取得し，さらに下位プログラムで引数を取得するときは，上位プログラムで最後に取得した引数の次の引数になります。

(3)の形式での規則

乱読み込みで引数を取得する場合，引数の位置を指定するDISPLAY文と指定した位置の引数を取得するACCEPT文は，プログラム間にわたって指定できます。

一意名3の内容または整数1に0を指定し，ACCEPT文で引数を取得した場合，実行可能ファイル名を取得します。

コマンド行に指定した実行可能ファイル名を取得するときは，入力した文字列のまま取得されます。

(5)　プログラム例

コマンド行の引数および引数の個数を取得する方法を，プログラム例を使って説明します。

実行時のコマンド行指定

a.out AAA BBB CCC DDD EEE FFF

プログラム例1

コマンド行の引数および引数の個数を取得する例を示します。

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
      ENVIRONMENT DIVISION.
      CONFIGURATION SECTION.
      SPECIAL-NAMES.
      ARGUMENT-NUMBER IS ARGNUM
      ARGUMENT-VALUE  IS ARGVAL
          :
      WORKING-STORAGE SECTION.
      01 ARGCNT  PIC 99.
      01 ARGDATA PIC X(10).
      PROCEDURE DIVISION.
          :
          ACCEPT ARGCNT FROM ARGNUM.   …1.
          :
          ACCEPT ARGDATA FROM ARGVAL   …2.
                 ON EXCEPTION ～
                 NOT ON EXCEPTION ～
          END-ACCEPT.
          :
          DISPLAY 3 UPON ARGNUM.       …3.
          ACCEPT ARGDATA FROM ARGVAL   …4.
                 ON EXCEPTION ～
                 NOT ON EXCEPTION ～
          END-ACCEPT.
          :

コマンド行に指定した引数の個数6を取得します。

コマンド行に指定した引数'AAA'を取得します。

コマンド行に指定した3番目の引数位置を設定します。

3.のDISPLAY文で指定した3番目の引数'CCC'を取得します。

プログラム例2

順読み込みで，引数の取得がプログラム間にわたるときに，コマンド行の引数および引数の個数を取得する例を示します。

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
      ENVIRONMENT DIVISION.
      CONFIGURATION SECTION.
      SPECIAL-NAMES.
      ARGUMENT-VALUE IS ARGVAL
          :
      WORKING-STORAGE SECTION.
      01 DATA1 PIC X(10).
      PROCEDURE DIVISION.
          :
          ACCEPT DATA1 FROM ARGVAL …1.
                 ON EXCEPTION ～
                 :
                 NOT ON EXCEPTION ～
                 :
          END-ACCEPT.
          CALL 'SAMPLE2'.
          :

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE2.
      ENVIRONMENT DIVISION.
      CONFIGURATION SECTION.
      SPECIAL-NAMES.
      ARGUMENT-VALUE IS ARGVAL
          :
      WORKING-STORAGE SECTION.
      01 DATA1 PIC X(10).
      PROCEDURE DIVISION.
          :
          ACCEPT DATA1 FROM ARGVAL …2.
                 ON EXCEPTION ～
                 :
                 NOT ON EXCEPTION ～
                 :
          END-ACCEPT.
          :

コマンド行に指定した第1引数'AAA'を取得します。

コマンド行に指定した第2引数'BBB'を取得します。

プログラム例3

順読み込みで，引数の取得がプログラム間にわたるときに，コマンド行の引数および引数の個数を取得する例を示します。

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
      ENVIRONMENT DIVISION.
      CONFIGURATION SECTION.
      SPECIAL-NAMES.
      ARGUMENT-NUMBER IS ARGNUM
          :
      WORKING-STORAGE SECTION.
          :
      PROCEDURE DIVISION.
          :
          DISPLAY 3 UPON ARGNUM. …1.
          :
          CALL 'SAMPLE2'.
          :

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE2.
      ENVIRONMENT DIVISION.
      CONFIGURATION SECTION.
      SPECIAL-NAMES.
      ARGUMENT-VALUE IS ARGVAL
          :
      WORKING-STORAGE SECTION.
      01 DATA1 PIC X(10).
      PROCEDURE DIVISION.
          :
          ACCEPT DATA1 FROM ARGVAL …2.
                 ON EXCEPTION ～
                 :
                 NOT ON EXCEPTION ～
                 :
          END-ACCEPT.
          :

コマンド行に指定した第3引数の引数位置3を指定します。

1.のDISPLAY文で指定した第3引数'CCC'を取得します。

10.3.3　引数を一括して取得する方法

機能名COMMAND-LINEを使うことで，コマンド行に指定された複数の引数を一括して取得できます。

＜この項の構成＞

(1)　コマンド行の引数を取得

(2)　コマンド行の引数の内容を更新

(3)　規則

(1)　コマンド行の引数を取得

ACCEPT文実行時に，コマンド行の引数の内容を取得します。このとき，空白行で区切られた複数の引数を1回のACCEPT文でまとめて取得できます。

ACCEPT文の形式

ACCEPT 一意名
      FROM ｛COMMAND-LINE｜COMMAND-LINEに対する呼び名｝
      〔END-ACCEPT〕

(2)　コマンド行の引数の内容を更新

DISPLAY文実行時に，一意名または定数で指定された内容をコマンド行の引数の内容を格納しているコマンド行バッファに上書きします。COMMAND-LINE指定のあるDISPLAY文の実行後に，COMMAND-LINE指定のあるACCEPT文を実行すると，先に実行したDISPLAY文で設定した内容が取り出されます。

DISPLAY文の形式

DISPLAY ｛一意名｜定数｝
       UPON ｛COMMAND-LINE｜COMMAND-LINEに対する呼び名｝
       〔END-DISPLAY〕

(3)　規則

コマンド行へのアクセスができるのは，-Main,Systemオプションを指定したCOBOL主プログラムと，主プログラムに-Main,Systemオプションを指定したCOBOLプログラムを持つCOBOLの副プログラムでだけです。
コマンド行へのアクセスを使用しているCOBOL主プログラムに-Main,V3オプションを指定した場合，コンパイルエラーとなります。また，COBOL副プログラムに，-Main,Systemオプションを指定したCOBOL主プログラム以外のプログラムを持つ場合，実行時にエラーメッセージが出力され異常終了します。

ACCEPT文で数字項目を正しく受け取るにはコンパイル時に-NumAcceptオプションが必要です。また，2進項目，内部10進項目，内部浮動小数点数字項目使用時には-NumAcceptオプションを指定しないとコンパイルエラーとなります。

10.4　環境変数へのアクセス

ACCEPT文，DISPLAY文を使用して，環境変数の値を取得・設定する方法について説明します。

環境変数のアクセスについては，マニュアル「COBOL2002　言語　拡張仕様編　10. コマンド行のアクセス」を参照してください。

＜この節の構成＞

(1)　環境変数の値の読み込み

(2)　環境変数への値の書き出し

(3)　環境変数へのアクセスに関する規則

(4)　使用例

(1)　環境変数の値の読み込み

DISPLAY文（環境変数名の設定）の形式

DISPLAY ｛一意名4｜定数1｝ UPON 呼び名3※1
       〔END-DISPLAY〕

ACCEPT文（環境変数の値の取得）の形式

ACCEPT 一意名2 FROM 呼び名4※²
      〔ON EXCEPTION 無条件文3〕
      〔NOT ON EXCEPTION 無条件文2〕
      〔END-ACCEPT〕

注※1

呼び名3は，環境部の特殊名段落で，ENVIRONMENT-NAMEに関連づけておく必要があります。

注※2

呼び名4は，環境部の特殊名段落で，ENVIRONMENT-VALUEに関連づけておく必要があります。

(2)　環境変数への値の書き出し

DISPLAY文（環境変数名の設定）の形式

DISPLAY ｛一意名4｜定数1｝ UPON 呼び名3※1
       〔END-DISPLAY〕

DISPLAY文（環境変数の値の書き出し）の形式

DISPLAY ｛一意名2｜定数2｝ UPON 呼び名4※2
       〔ON EXCEPTION 無条件文1〕
       〔NOT ON EXCEPTION 無条件文2〕
       〔END-DISPLAY〕

注※1

呼び名3は，環境部の特殊名段落で，ENVIRONMENT-NAMEに関連づけておく必要があります。

注※2

呼び名4は，環境部の特殊名段落で，ENVIRONMENT-VALUEに関連づけておく必要があります。

(3)　環境変数へのアクセスに関する規則

環境変数名および環境変数の値を設定する場合，DISPLAY文に指定した一意名または定数中に含まれる空白も有効となります。

環境変数名を設定する場合，環境変数名には"="を指定できません。指定した場合，正常に動作しなくなることがあります。

環境変数名を設定する場合，環境変数名にNULL（X'00'）が含まれているとき，NULLの直前までの値が有効となります。環境変数の値を設定する場合，環境変数の値にNULL（X'00'）が含まれているとき，NULLの直前までの値が有効となります。

環境変数名の先頭にNULL（X'00'）を指定したときの規則を次に示します。

環境変数の値の取得処理（ACCEPT文）は，エラーとなります。

環境変数の値の設定処理（DISPLAY文）は，何も処理しません。

次に示す文の組み合わせは，プログラム間にわたって指定できます。

環境変数名を設定するDISPLAY文と環境変数の値を取得するACCEPT文

環境変数名を設定するDISPLAY文と環境変数の値を設定するDISPLAY文

環境変数の値を取得するときの転記規則を次に示します。

環境変数の値は，一意名の左端から順に転送されて転記されます。

環境変数の値が一意名の領域より長い場合，一意名の長さで区切られます。

環境変数の値が一意名の領域より短い場合，標準コードの空白文字（X'20'）が埋められます。

次の環境変数には，環境変数へのアクセス機能で値を書き出せません。

CBLTDEXEC

環境変数の値の書き出しを行うDISPLAY文の実行回数は，環境変数CBLENVMAXで設定します。

形式

CBLENVMAX=回数

規則

回数は，8けた以内の符号なしの正の整数で指定します。

環境変数CBLENVMAXを指定しなかった場合，または値が0の場合は，50が仮定されます。

環境変数CBLENVMAXで負の値を設定した場合，または9けた以上の値を設定した場合はエラーメッセージが出力され異常終了します。

DISPLAY文による環境変数への値の書き出しによって，環境変数CBLENVMAXを設定することはできません。

環境変数の値をクリアせずにCOBOLプログラムの実行を終了し，あとに同じプロセスでCOBOLプログラムが動作した場合，環境変数を設定しなくても以前実行時に設定した環境変数の値を取得できます。
COBOLの環境変数へのアクセスのDISPLAY文でNULL値を設定した場合，環境変数の設定を取り消せます。

環境変数の値の長さは，1,024バイト以内でなければなりません。1,024バイトを超える値を指定した場合，その環境変数の指定は無効となります。

(4)　使用例

実行時の環境変数指定

CBLABNLST=/tmp/abnlst
CBLDDUMP=/tmp/dumplst

プログラム例1

環境変数へのアクセス例を次に示します。

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
      ENVIRONMENT DIVISION.
      CONFIGURATION SECTION.
      SPECIAL-NAMES.
      ENVIRONMENT-NAME IS ENVNAM
      ENVIRONMENT-VALUE IS ENVVAL.
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 ENVNAME1 PIC X(9).
      01 ENVNAME2 PIC X(8).
      01 ENVDATA PIC X(20).
      PROCEDURE DIVISION.
          :
          MOVE 'CBLABNLST' TO ENVNAME1.
          DISPLAY ENVNAME1 UPON ENVNAM.  …1.
          ACCEPT ENVDATA FROM ENVVAL     …2.
              ON EXCEPTION ～
              :
              NOT ON EXCEPTION ～
              :
          END-ACCEPT.
          :
          MOVE 'CBLDDUMP' TO ENVNAME2.
          MOVE '/tmp/dumplst2' TO ENVDATA.
          DISPLAY ENVNAME2 UPON ENVNAM.  …3.
          DISPLAY ENVDATA UPON ENVVAL    …4.
              ON EXCEPTION ～
              :
              NOT ON EXCEPTION ～
              :
          END-DISPLAY.
          :

値を取得したい環境変数名（CBLABNLST）を指定します。

1.で指定した環境変数（CBLABNLST）の値（/tmp/abnlst）を取得します。

値を設定したい環境変数名（CBLDDUMP）を指定します。

3.で指定した環境変数（CBLDDUMP）に値（/tmp/dumplst2）を設定します。

プログラム例2

環境変数へのアクセスがプログラム間にわたる場合の，環境変数の値の取得例を次に示します。

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
      ENVIRONMENT DIVISION.
      CONFIGURATION SECTION.
      SPECIAL-NAMES.
      ENVIRONMENT-NAME IS ENVNM.
                 :                
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 ENVNAME PIC X(9).
      PROCEDURE DIVISION.
                 :
          MOVE 'CBLABNLST' TO ENVNAME.
          DISPLAY ENVNAME UPON ENVNM.   …1.
                 :
          CALL 'SAMPLE2'.
                 :

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE2.
      ENVIRONMENT DIVISION.
      CONFIGURATION SECTION.
      SPECIAL-NAMES.
      ENVIRONMENT-VALUE IS ENVVAL.
          :        
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 ENVDATA PIC X(20).
      PROCEDURE DIVISION.
          :
          ACCEPT ENVDATA FROM ENVVAL  …2.
                 ON EXCEPTION ～
                 :                
                 NOT ON EXCEPTION ～
                 :
          END-ACCEPT.
          :

値を取得したい環境変数名（CBLABNLST）を指定します。

1.で指定した環境変数（CBLABNLST）の値（/tmp/abnlst）を取得できます。

プログラム例3

環境変数へのアクセスがプログラム間にわたる場合の，環境変数の値の設定例を次に示します。

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
      ENVIRONMENT DIVISION.
      CONFIGURATION SECTION.
      SPECIAL-NAMES.
      ENVIRONMENT-NAME IS ENVNM.
                 :
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 ENVNAME PIC X(9).
      PROCEDURE DIVISION.
                 :
          MOVE 'CBLABNLST' TO ENVNAME.
          DISPLAY ENVNAME UPON ENVNM.  …1.
                 :
          CALL 'SAMPLE2'.
                 :

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE2.
      ENVIRONMENT DIVISION.
      CONFIGURATION SECTION.
      SPECIAL-NAMES.
      ENVIRONMENT-VALUE IS ENVVAL.
          :
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 ENVDATA PIC X(20).
      PROCEDURE DIVISION.
          :
          MOVE '/tmp/abnlst' TO ENVDATA.
          DISPLAY ENVDATA UPON ENVVAL  …2.
                  ON EXCEPTION ～
                  :
                  NOT ON EXCEPTION ～
                  :
          END-DISPLAY.
          :

値を設定したい環境変数名（CBLABNLST）を指定します。

1.で指定した環境変数（CBLABNLST）に（/tmp/abnlst）を設定できます。

10.5　COBOLログファイル出力機能

＜この節の構成＞

10.5.1　COBOLログファイル出力機能の概要

10.5.2　COBOLログファイルの出力形式

10.5.1　COBOLログファイル出力機能の概要

COBOLプログラムでDISPLAY文によってデータやメッセージを出力する場合，その出力でエラーが発生すると実行中止となったり，出力内容が破棄されてユーザにとって必要な情報が取得できなくなったりすることがあります。このような場合に，出力内容を破棄しないで，COBOL独自のログファイルに出力できます。

COBOLログファイル出力機能は，システム入出力関数レベルを指定しているとき，DISPLAY文でデータ出力中にエラーが発生した場合に使用できます。詳細は「10.2.5　システム入出力関数レベルの指定」を参照してください。

10.5.2　COBOLログファイルの出力形式

COBOLログファイルの出力先を次に示します。DISPLAY文の出力データをCOBOLログファイルへ出力中にエラーが発生した場合は，標準出力に出力します。

＜この項の構成＞

(1)　出力先ディレクトリ

(2)　ファイル名称

(3)　出力内容

(1)　出力先ディレクトリ

COBOLログファイルの出力先ディレクトリは，COBOL2002インストールディレクトリ/cbllogとなります。

このディレクトリは，COBOL2002のインストール時に作成されます。

(2)　ファイル名称

次の名称規則でCOBOLログファイルが作成されます。

形式

cblMMDD_HHMMSS_nnnn.log

MMDD

月日を4けたで表します。

HHMMSS

時刻を時分秒の6けたで表します。

nnnn

プロセスIDを表します。

けた数は可変です。

（例）

プロセスID7847の9月27日19時24分33秒に作成されたファイル

COBOL2002インストールディレクトリ/cbllog/cbl0927_192433_7847.log

注意事項

上記のファイルをCOBOLが自動的に消去することはありません。不要になったファイルは手動で消去してください。

(3)　出力内容

COBOLログファイル出力機能で出力される内容を，次に示します。

注※1

表示は英語出力固定です。環境変数LANGでの指定はできません。

注※2

ログ種別は「DISPLAY:」と表示します。

（例）

Sep 27 19:24:33 TERM1 DISPLAY:DISPLAY文のデータ…

11.　整列併合機能

整列併合機能は，SORT文，MERGE文を記述したプログラムで実行します。この章では，整列併合機能で使用するファイルや，ファイルの割り当て方法，使用するメモリサイズなどについて説明します。

＜この章の構成＞

11.1　使用できるファイル

11.2　ファイルの割り当て

11.3　使用するメモリサイズ

11.4　使用できる特殊レジスタ

11.5　注意事項

11.1　使用できるファイル

整列併合機能を使ったプログラムで使用できるファイルを次に示します。

表11-1　整列併合機能で使用できるファイル

種別
ファイル編成
用途
備考

入力用ファイル
順編成ファイル
相対編成ファイル
索引編成ファイル
テキスト編成ファイル

整列用レコードの入力ファイル

併合用レコードの入力ファイル

USING指定のとき，最大12ファイル指定できる。

出力用ファイル
順編成ファイル
相対編成ファイル
索引編成ファイル
テキスト編成ファイル

整列済みレコードの出力ファイル

併合済みレコードの出力ファイル

作業用ファイル
－

整列機能が使用する整列作業用ファイル

整列機能が内部的に使用する。

なお，整列ファイル，併合ファイルについては，マニュアル「COBOL2002　言語　標準仕様編　5.1.15 整列ファイル」および「COBOL2002　言語　標準仕様編　5.1.16 併合ファイル」を参照してください。

11.2　ファイルの割り当て

整列処理，併合処理で使用するファイルの割り当て方法について説明します。

＜この節の構成＞

11.2.1　入出力用ファイル

11.2.2　整列作業用ファイル

11.2.3　注意事項

11.2.1　入出力用ファイル

SELECT句で指定した整列併合用のファイルに対して実行時に物理ファイルを割り当てる方法については，「6.2　ファイル割り当ての共通規則」を参照してください。

11.2.2　整列作業用ファイル

SORT文を使用する場合，整列処理用の作業ファイルのディレクトリの名称は，環境変数CBLSORTWORKで指定します。

形式

CBLSORTWORK=ディレクトリ名

ディレクトリ名は，パスプレフィックスで指定します。

（例）

CBLSORTWORK=/TMP/WORK
export CBLSORTWORK

環境変数を指定しなかった場合，作業ファイルのディレクトリとして，整列機能が次に示すディレクトリを割り当てます。

環境変数TMPDIRの指定があるとき
環境変数TMPDIRで指定されたディレクトリ

環境変数TMPDIRの指定がないとき

HP-UX(IPF)，HP-UX(IPF64)，Solaris(SPARC)

/var/tmp

AIX(32)，AIX(64)，Linux

/tmp

作業ファイルのディレクトリには，読み込み権限と書き込み権限を付与してください。

11.2.3　注意事項

整列処理を実行中に異常終了が発生すると，整列作業用ファイルが削除されないで残る場合があります。

併合処理の入力ファイルは，MERGE文のASCENDING KEYまたはDESCENDING KEYで指定したとおりに整列されている必要があります。整列されていないとプログラムが異常終了します。

11.3　使用するメモリサイズ

整列処理，併合処理で使用するメモリサイズについて説明します。

＜この節の構成＞

11.3.1　整列処理のメモリサイズ

11.3.2　併合処理のメモリサイズ

11.3.1　整列処理のメモリサイズ

整列処理のメモリサイズは，環境変数CBLSORTSIZEで指定します。

形式

CBLSORTSIZE=メモリサイズ

メモリサイズ

整列処理で使用するメモリサイズを，キロバイト単位で指定します。有効となる値は，8けた以内の符号なし整数（0～99,999,999）です。この範囲を超える値を指定した場合，実行時エラーとなります。

（例）

CBLSORTSIZE=1000
export CBLSORTSIZE

規則

環境変数CBLSORTSIZEに値が設定されていないときは，SORT-CORE-SIZE特殊レジスタの値が適用されます。また，環境変数と特殊レジスタの両方に値が設定されているときは，環境変数に指定した値が有効となります。
整列処理のメモリサイズの注意点については，「11.5　注意事項」を参照してください。

整列処理するレコード長が32キロバイトを超える場合，整列機能が確保するメモリサイズは256キロバイト以上を指定する必要があります。

メモリサイズの計算式

メモリ所要量（キロバイト）= 16 + S

Sは，環境変数CBLSORTSIZEまたはSORT-CORE-SIZE特殊レジスタで指定した値です。

11.3.2　併合処理のメモリサイズ

併合処理で使用するメモリサイズを，次に示します。

メモリサイズの計算式

UNIX32の場合

メモリ所要量（バイト）= 32 +（最大レコード長※1 + 28 + キーの合計長※2）×（併合ファイル数 + 1）

注※1

　　4バイト境界に切り上げた値

注※2

　　MERGE文に指定されたすべてのキー長の合計値を，4バイト境界に切り上げた値

UNIX64の場合

メモリ所要量（バイト）= 48 +（最大レコード長※1 + 32 + キーの合計長※2）×（併合ファイル数 + 1）

注※1

　　8バイト境界に切り上げた値

注※2

　　MERGE文に指定されたすべてのキー長の合計値を，8バイト境界に切り上げた値

なお，算出したメモリサイズの記憶領域が確保できなかった場合，プログラムは異常終了します。

11.4　使用できる特殊レジスタ

整列併合機能で使用できる特殊レジスタについて説明します。

＜この節の構成＞

11.4.1　特殊レジスタの種類

11.4.2　SORT-RETURN特殊レジスタ

11.4.3　SORT-CORE-SIZE特殊レジスタ

11.4.1　特殊レジスタの種類

特殊レジスタの種類を次に示します。

表11-2　特殊レジスタの種類

特殊レジスタ | 属性 | 初期値 | 有効となる値
SORT-RETURN | PIC S9(4) USAGE COMP | 0 | 0，16
SORT-CORE-SIZE | PIC S9(8) USAGE COMP | 0 | -99,999,999～99,999,999※¹
SORT-FILE-SIZE | PIC S9(8) USAGE COMP | 0 | －※²
SORT-MODE-SIZE | PIC S9(5) USAGE COMP | 0 | －※²
SORT-MESSAGE | PIC X(8) USAGE DISPLAY | 空白 | －※²

注※1

128未満の値を指定した場合，1,024が仮定されます。

注※2

これらの特殊レジスタにも値は設定できますが，どの値も整列処理に対しては無効となります。

11.4.2　SORT-RETURN特殊レジスタ

この特殊レジスタに値16を設定すると，整列併合の操作を強制的に終了できます。

入力または出力手続きで値16を設定すると，次のRELEASE文またはRETURN文を実行後，整列併合の操作が終了し，次の手続き文に制御が渡ります。

16以外の値を設定した場合は，整列併合の操作が継続して実行されます。

11.4.3　SORT-CORE-SIZE特殊レジスタ

整列処理実行前にこの特殊レジスタに値を設定することで，整列処理の作業用メモリのサイズをキロバイト単位で指定できます。128未満の値を指定した場合，1,024が仮定されます。また，環境変数CBLSORTSIZEが指定されているときは，環境変数で指定された値が適用されます。

なお，この特殊レジスタは，併合処理に関しては意味を持ちません。

11.5　注意事項

＜この節の構成＞

11.5.1　処理時間の短縮

11.5.2　その他の注意事項

11.5.1　処理時間の短縮

＜この項の構成＞

(1)　メモリサイズと処理時間

(2)　キー属性の指定

(3)　WITH DUPLICATES指定

(1)　メモリサイズと処理時間

メモリサイズと処理時間との間には，メモリサイズが大きいほど処理時間が短くなるという関係があります。しかし，実際には，設定したメモリサイズがソート実行時に使用されるメモリよりも著しく大きいと，逆に処理時間が掛かることがあります。したがって，メモリサイズを指定するときは，レコード件数，レコード長，キー長，および実メモリサイズを考慮し，適切な値にする必要があります。

メモリサイズと処理時間との関係を次に示します。

図11-1　メモリサイズと処理時間との関係

メモリサイズが1.で示す値より小さいとき，何度かソートを繰り返すため，処理時間は長くなります。

メモリサイズが3.で示す値以上のとき，一時ファイルを使用しなくてもソートできるため，処理時間は短くなります。ただし，データ件数が多過ぎると，逆に処理時間が長くなったり，処理できなかったりする場合があります。

通常メモリサイズは，1.で示す値と3.で示す値の間の値を設定します。その場合の目安は，2.で示す値です。1.で示す値以上で，3.で示す値未満の値では，2.で示す値より大きな値を設定しても処理時間は短くなりません。

(2)　キー属性の指定

キー属性が文字の場合，数字の場合と比べてソート処理の効率が向上します。したがって，ファイル設計時にはキーとなる部分の属性を文字にしておくとソート処理の時間を短くできます。

(3)　WITH DUPLICATES指定

SORT文にWITH DUPLICATES指定をしない方がソート処理の時間を短くでき，また，作業ファイルの容量も小さくて済みます。

11.5.2　その他の注意事項

＜この項の構成＞

(1)　RELEASE文とRETURN文

(2)　入出力エラー

(3)　キー数

(1)　RELEASE文とRETURN文

RELEASE文はINPUT PROCEDURE中で実行します。RETURN文はOUTPUT PROCEDURE中で実行します。誤って実行するとプログラムが異常終了します。

(2)　入出力エラー

整列処理，併合処理で使用するファイルに対して入出力エラーが発生したときの処理について説明します。

なお，共通例外処理を使用する場合の詳細については，「21.　共通例外処理」を参照してください。

(a)　入出力ファイル

入出力ファイルに入出力エラーが発生すると，FILE STATUS句，USE ERROR手続きが有効となります。これらの指定がない場合，プログラムは異常終了します。

(b)　整列作業用ファイル

整列作業用ファイルに入出力エラーが発生すると，プログラムは異常終了します。

(3)　キー数

SORT文，MERGE文で指定できるキーの数は最大64個です。

12.　画面入出力機能（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Solaris(SPARC)で有効）

通信節，画面節（SCREEN SECTIONおよびWINDOW SECTION）による画面機能を使うと，ディスプレイやプリンタとの間でデータの送受信ができます。この章では，それぞれの画面機能の使い方について説明します。

＜この章の構成＞

12.1　通信節による画面機能（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）

12.2　画面節（SCREEN SECTION）による画面機能

12.3　画面節（WINDOW SECTION）による画面機能

12.4　リソース一覧

12.1　通信節による画面機能（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）

＜この節の構成＞

12.1.1　機能の概要

12.1.2　画面に対する入出力

12.1.3　仮想端末の共用

12.1.4　プリンタに対する帳票出力

12.1.1　機能の概要

通信節（COMMUNICATION SECTION）による画面機能を使用すると，ディスプレイとの間で画面データを送受信したり，プリンタに帳票データを送信したりできます。画面データを送受信する際には，画面全体を制御したり，けい線，高輝度表示などの機能を利用したりできます。

通信記述項による画面機能については，マニュアル「COBOL2002　言語　拡張仕様編　11. 通信節による画面機能」を参照してください。

12.1.2　画面に対する入出力

＜この項の構成＞

(1)　画面の定義

(2)　使用する文

(3)　画面の表示モード

(4)　実行時のカーソルの位置づけ

(5)　データ有無コード

(6)　実行状態を示すコード

(7)　送受信先の設定方法

(8)　送受信間の物理マップ

(1)　画面の定義

通信節による画面機能を使用する場合，画面はXMAP3のドロー（パネル定義）機能を利用して定義します。ドロー（パネル定義）機能については，次に示すマニュアルを参照してください。

XMAP3 Version 4の場合

マニュアル「画面・帳票サポートシステム XMAP3 プログラミングガイド 画面編」

マニュアル「画面・帳票サポートシステム XMAP3 開発・実行ガイド」

XMAP3 Version 5の場合

マニュアル「XMAP3 Version 5 画面・帳票サポートシステム XMAP3 開発ガイド」

マニュアル「XMAP3 Version 5 画面・帳票サポートシステム XMAP3 プログラミングガイド」

マニュアル「XMAP3 Version 5 画面・帳票サポートシステム XMAP3 実行ガイド」

(2)　使用する文

画面データを送受信したり画面を閉じたりするには，原始プログラム中のデータ部通信記述項のFOR句で"I-O WS"を指定し，次に示す文を使用します。

表12-1　画面データの送受信で使用する文

使用する文
処理

SEND文
ディスプレイに画面データを送信し，応答の完了を待たないで非同期にプログラムを続行する。

NO REPLY指定がないとき
受信した画面データは，RECEIVE文で受け取る。

NO REPLY指定があるとき
ディスプレイに画面データを送信する。RECEIVE文で画面データを受け取ることはできない。

RECEIVE文
NO REPLY指定のないSEND文で受信したデータを受け取る。

TRANSCEIVE文
ディスプレイに画面データを送信し，受信した画面データを受け取る。

DISABLE文
ディスプレイに出力された画面データを消去する。

NO REPLY指定のないSEND文とRECEIVE文との間でSEND文またはTRANSCEIVE文を実行した場合，最後のSEND文またはTRANSCEIVE文が有効となります。

(3)　画面の表示モード

画面データの表示モードには次の2種類のモードがあります。

書き換え（ERASE）モード：画面を消去して画面データを表示する。

上書き（WRITE）モード：画面を消去しないで画面データを表示する。

SEND文またはTRANSCEIVE文では，ドロー（パネル定義）機能で画面（パネル）定義時に指定した表示モードで画面データを表示します。ただし，開かれていない画面データの送受信先に対してSEND文またはTRANSCEIVE文を初めて実行する場合，上書き（WRITE）モードを指定してはなりません。

ドロー（パネル定義）機能で，画面（パネル）定義時にこのシステムに任せる指定をした場合，次の規則に従って画面データが表示されます。

初めての送受信要求で指定した物理マップ名と異なるときは，書き換え（ERASE）モードで表示される。

現在の送受信要求で指定した物理マップ名が直前の送受信要求で指定した物理マップ名と同じときは，上書き（WRITE）モードで表示される。

(4)　実行時のカーソルの位置づけ

プログラム実行時にカーソルの位置を変更するときは，原始プログラム中で論理マップとして展開したカーソルフィールドに値を設定します。

(5)　データ有無コード

データ有無コードとは，論理項目に値を設定しているかどうかを区別するためのコードで，1バイトのコードX'00'～X'FF'で指定します。

データ有無コードには，原始プログラム中の通信記述項のDATA ABSENCE CODE句で指定したデータ名に設定した値が使われます。

DATA ABSENCE CODE句を指定したときは，プログラム中の通信記述項ごとの最初の通信文を実行する前に値を必ず設定しておく必要があります。データ名に値を設定しなかった場合の動作は保証しません。また，通信文の実行後に値を変更してはなりません。

(6)　実行状態を示すコード

続行できない異常な状態が通信文で発生すると，エラーメッセージが出力されます。通信記述項にSTATUS KEY句の指定があれば，通信文の実行状態を示す5けたのコードがこの句で指定したデータ名に設定され，処理が続行されます。

STATUS KEY句がないときに続行できないエラーが発生すると，プログラムは異常終了します。

STATUS KEY句のデータ名に設定されるコードについては，マニュアル「COBOL2002　言語　拡張仕様編　11.1.1 通信記述項（CD）（通信節による画面機能）」を参照してください。

(7)　送受信先の設定方法

画面機能では，送受信先を指定することで，ネットワーク上に接続されたディスプレイに画面データを送受信できます。送受信先の指定方法について，次に示します。

(a)　送受信先の決定のしかた

画面データの送受信先は，通信記述項でのSYMBOLIC TERMINAL句の指定の有無と，環境変数の指定の有無によって次のように決定されます。

表12-2　画面データの送受信先

条件
SYMBOLIC TERMINAL句でのデータ名の指定

あり
なし

環境変数の指定
あり
環境変数CBLTERM_xxxで指定したディスプレイ
ただし，データ名に設定した内容の先頭1バイトが空白文字（X'20'）の場合は，環境変数CBLTERMIDで指定したディスプレイ
環境変数CBLTERMIDで指定したディスプレイ

なし
データ名で指定した仮想端末
ただし，データ名に設定した内容の先頭1バイトが空白文字（X'20'）の場合は，XMAP3のセットアップの値（仮定値）※
XMAP3のセットアップの値（仮定値）※

注※

マニュアル「画面・帳票サポートシステム XMAP3 Server」を参照してください。

(b)　環境変数による送受信先の設定

送受信先を設定するための環境変数には次の2種類があります。

仮想端末名を指定する環境変数

次の環境変数で仮想端末名を指定します。ここで指定した仮想端末名は，SYMBOLIC TERMINAL句のデータ名に"xxx"で示す名称を指定したときに有効となります。

形式

CBLTERM_xxx=ディスプレイの仮想端末名

規則

xxxおよび仮想端末名は8文字以内の文字列で指定します。

仮想端末名の仮定値を指定する環境変数

SYMBOLIC TERMINAL句の指定を省略したときに仮定される仮想端末の名称を次の環境変数で指定します。

形式

CBLTERMID=ディスプレイの仮想端末名

規則

仮想端末名は8文字以内の文字列で指定します。

(c)　SYMBOLIC TERMINAL句の指定

通信記述項のSYMBOLIC TERMINAL句のデータ名に環境変数名または仮想端末名を指定することで，画面データの送受信先を指定できます。

環境変数名による指定方法

データ名に環境変数CBLTERM_xxxの"xxx"の名称を指定します。環境変数で指定した仮想端末名が送受信先として設定されます。

仮想端末名による指定方法

環境変数が指定されていないときは，データ名に仮想端末名を指定することで送受信先を指定できます。

(8)　送受信間の物理マップ

ディスプレイに対して画面データを送受信する場合，SEND文（NO REPLY指定なし）の前に通信記述項のMAP NAME句のデータ名に物理マップ名を指定し，画面データを送受信します。RECEIVE文はその物理マップ名に対して画面データを受信するため，RECEIVE文で物理マップ名は指定しません。

複数の仮想端末に送信した画面データを受信するとき，それぞれの最後に送信したSEND文で指定した物理マップが，RECEIVE文の物理マップとなります。

12.1.3　仮想端末の共用

送受信先が同じ仮想端末に対して，複数プログラムで定義した通信記述項を使って通信文を実行すると，複数の画面が生成されます。このとき実行時環境変数を指定することで，一つの仮想端末を複数プログラム間で共用し，送受信できます。

また，-CompatiV3オプションを指定してコンパイルしたプログラムでも同様に，一つの仮想端末を共用できます。

＜この項の構成＞

(1)　仮想端末の共用の指定

(2)　注意事項

(1)　仮想端末の共用の指定

複数プログラム間で一つの仮想端末を共用して送受信したい場合は，次の実行時環境変数を指定します。

CBLTERMSHAR=YES

この環境変数にYESを指定すると，実行単位中のすべてのプログラムで同一名称の仮想端末を共用できます。指定がない，またはYES以外の文字が指定されている場合は，NOが仮定されます。NOの場合は，送受信先に同一名称の仮想端末を指定しても異なる仮想端末として送受信します（SEND文実行時に複数の画面が生成される）。

(2)　注意事項

一つの実行単位ファイル中の通信節を使用するプログラムに対して，-CompatiV3オプションを指定したオブジェクトファイルと未指定のオブジェクトファイルを混在して動作させてはいけません。混在させた場合の動作は保証しません。

複数プログラム間で共用した仮想端末に対して送信した画面データを受信するとき，最後に送信したSEND文と同じ通信記述項を使って受信しなければいけません。

仮想端末は，一つのCOBOL実行単位中に，複数のプログラム間で共用できます。CALL文で呼び出す実行可能ファイルなど，別のCOBOL実行単位との共用はできません。

12.1.4　プリンタに対する帳票出力

＜この項の構成＞

(1)　帳票の定義

(2)　使用する文

(3)　実行状態を示すコード

(4)　送信先の設定方法

(5)　送受信間の物理マップ

(1)　帳票の定義

通信節による帳票出力機能を使用する場合，帳票はXMAP3のドロー（パネル定義）機能を利用して定義します。ドロー（パネル定義）機能については，次に示すマニュアルを参照してください。

XMAP3 Version 4の場合

マニュアル「画面・帳票サポートシステム XMAP3 プログラミングガイド 帳票編」

マニュアル「画面・帳票サポートシステム XMAP3 開発・実行ガイド」

XMAP3 Version 5の場合

マニュアル「XMAP3 Version 5 画面・帳票サポートシステム XMAP3 開発ガイド」

マニュアル「XMAP3 Version 5 画面・帳票サポートシステム XMAP3 プログラミングガイド」

マニュアル「XMAP3 Version 5 画面・帳票サポートシステム XMAP3 実行ガイド」

(2)　使用する文

帳票データをプリンタへ送信したり，プリンタを閉じたりするには，原始プログラム中のデータ部通信記述項のFOR句で"OUTPUT WS"を指定し，次に示す文を使用します。

表12-3　帳票データの送信で使用する文

使用する文 | 処理
SEND文 | 帳票データをプリンタへ送信する。
DISABLE文 | プリンタを閉じる（閉じるプリンタは，DISABLE文を実行した時点で指定されているプリンタである）。

(3)　実行状態を示すコード

続行できない異常な状態が通信文で発生すると，エラーメッセージが出力されます。通信記述項にSTATUS KEY句の指定があれば，通信文の実行状態を示す5けたのコードがこの句で指定したデータ名に設定され，処理が続行されます。

STATUS KEY句がないときに続行できないエラーが発生すると，プログラムは異常終了します。

STATUS KEY句のデータ名に設定されるコードについては，マニュアル「COBOL2002　言語　拡張仕様編　11.1.1 通信記述項（CD）（通信節による画面機能）」を参照してください。

(4)　送信先の設定方法

帳票出力機能では，送受信先を指定することで，ネットワーク上に接続されたプリンタに帳票データを送信できます。送信先の指定方法について，次に示します。

(a)　送信先の決定のしかた

帳票データの送信先は，通信記述項でのSYMBOLIC TERMINAL句の指定の有無と，環境変数の指定の有無によって次に示すように決定されます。

表12-4　帳票データの送信先

条件
SYMBOLIC TERMINAL句でのデータ名の指定

あり
なし

環境変数の指定
あり
環境変数CBLPRNT_xxxで指定したプリンタ
ただし，データ名に設定した内容の先頭1バイトが空白文字（X'20'）の場合は，環境変数CBLPRNTIDで指定したプリンタ
環境変数CBLPRNTIDで指定したプリンタ

なし
データ名で指定した仮想端末
ただし，データ名に設定した内容の先頭1バイトが空白文字（X'20'）の場合は，XMAP3のセットアップの値（仮定値）※
XMAP3のセットアップの値（仮定値）※

注※

マニュアル「画面・帳票サポートシステム XMAP3 Server」を参照してください。

(b)　環境変数による送信先の設定

送信先を設定するための環境変数には次の2種類があります。

仮想端末名を指定する環境変数

次の環境変数で仮想端末名を指定します。ここで指定した仮想端末名は，SYMBOLIC TERMINAL句のデータ名に"xxx"で示す名称を指定したときに有効となります。

形式

CBLPRNT_xxx=プリンタの仮想端末名

規則

xxxおよび仮想端末名は8文字以内の文字列で指定します。

仮想端末名の仮定値を指定する環境変数

SYMBOLIC TERMINAL句の指定を省略したときに仮定される仮想端末の名称を次の環境変数で指定します。

形式

CBLPRNTID=プリンタの仮想端末名

規則

仮想端末名は8文字以内の文字列で指定します。

(c)　SYMBOLIC TERMINAL句の指定

通信記述項のSYMBOLIC TERMINAL句のデータ名に環境変数名または仮想端末名を指定することで，帳票データの送信先を指定できます。

環境変数名による指定方法

データ名に環境変数CBLPRNT_xxxの"xxx"の名称を指定します。環境変数で指定した仮想端末名が送受信先として設定されます。

仮想端末名による指定方法

環境変数が指定されていないときは，データ名に仮想端末名を指定することで送信先を指定できます。

(5)　送受信間の物理マップ

プリンタに対して帳票データを送受信する場合，SEND文（NO REPLY指定なし）の前に通信記述項のMAP NAME句のデータ名に物理マップ名を指定し，帳票データを送信します。

12.2　画面節（SCREEN SECTION）による画面機能

画面節（SCREEN SECTION）を使用した画面の入出力について説明します。

画面節（SCREEN SECTION）を使用した画面の入出力については，マニュアル「COBOL2002　言語　拡張仕様編　12. 画面節（SCREEN SECTION）による画面機能」を参照してください。

なお，SCREEN SECTIONとWINDOW SECTIONは，同時に使用できません。同時に使用した場合，エラーメッセージが出力されます。

＜この節の構成＞

12.2.1　画面の種類と構成

12.2.2　キーの機能

12.2.3　LINE／COLUMN句を使用した画面の座標指定

12.2.4　CRT STATUS句を使用したファンクションキー入力結果の取得

12.2.5　注意事項

12.2.1　画面の種類と構成

画面節（SCREEN SECTION）では，主画面とエラー表示画面の2種類の画面を使用します。

＜この項の構成＞

(1)　主画面

(2)　エラー表示画面

(1)　主画面

主画面は，画面の入出力で使用する主画面であり，タイトルバー，メニューバー，ユーザ表示領域から構成されます。主画面の構成を次に示します。

メニューバーの［終了キー］をクリックすると，次のドロップダウンメニューが表示されます。これらをクリックすると，［Enter］キーや［F1］～［F24］キーを押したのと同じ結果が得られます。

注

HP-UX(IPF)，HP-UX(IPF64)の場合，

メニューはPF16まで表示されます。

［PF9］～［PF16］キーは，［Ctrl］キーを押したまま，［PF1］～［PF8］キーを押すことを意味します。リソースファイルをカスタマイズすると，PF24まで使用できます。

AIX(32)，AIX(64)，Solaris(SPARC)の場合

メニューはPF24まで表示されます。

［PF13］～［PF24］キーは，［Ctrl］キーを押したまま［PF1］～［PF12］キーを押すことを意味します。

(2)　エラー表示画面

エラー表示画面は，誤ったデータを入力したときなどに自動的に表示される画面であり，エラー表示領域だけから構成されます。エラー表示画面の構成を次に示します。

12.2.2　キーの機能

カーソルの移動などで使用するキーの意味を次に示します。

使用するキー
意味

［→］
カーソルが右に1カラム移動します。ただし，フィールドの右端のときは，後方のフィールドの先頭に移動します。

［←］
カーソルが左に1カラム移動します。ただし，フィールドの左端のときは，前方のフィールドの末尾に移動します。

［↑］
前方のフィールドの先頭にカーソルが移動します。

［↓］
後方のフィールドの先頭にカーソルが移動します。ただし，後方にフィールドがない場合は，フィールドの右端にカーソルが移動します。

［Tab］
後方のフィールドの先頭にカーソルが移動します。

［BackSpace］
現在カーソルが位置づけられているカラムの入力を取り消し，カーソルが左に1カラム移動します。

［Home］
フィールドの先頭にカーソルを移動します。フィールドが複数指定されている場合は，最初のフィールドの先頭にカーソルを移動します。

［End］
カーソルの位置に関係なく，そのフィールドのデータをクリアします。
数字項目のフィールドは0でクリアされ，カーソルは表示されているデータの左端に位置づけられます。
数字編集項目のフィールドは0でクリアされ，カーソルは表示されているデータの左端または小数点上に位置づけられます。
その他の項目は空白文字でクリアされ，カーソルは表示されているデータの左端に位置づけられます。

［Enter］，
［F1］～［F24］
入力が終了します。
この場合，［F13］～［F24］キーは，［Ctrl］キーを押したまま［F1］～［F12］キーを押すことを意味します。

注意事項

フィールドの前方，後方とは画面上の次のような位置関係をいいます。
[図データ]

12.2.3　LINE／COLUMN句を使用した画面の座標指定

画面節（SCREEN SECTION）では，LINE／COLUMN句を指定すると，画面項目に画面上での座標を与えられます。例を次に示します。

（例）

          :
      SCREEN SECTION.
      01 SC-11.
        02 SC-12 VALUE 'ABCDE'
            LINE PLUS 2 COLUMN PLUS 2.    …2.
        02 SC-13 PIC X(5) TO WC-11
            LINE PLUS 2 COLUMN PLUS 2.    …3.
        02 SC-14 VALUE 'FGHIJ'
            LINE PLUS 2 COLUMN PLUS 2.    …4.
          :
      PROCEDURE DIVISION.
          DISPLAY SC-11 AT LINE 2 COLUMN 2. …1.
          :

起点アドレス（2，2）が与えられます。

起点からの相対値2のアドレスに画面項目が表示されます。

入力画面項目なので表示されませんが，LINE／COLUMN句の指定は有効です。

前画面項目からの相対値2のアドレスに画面項目が表示されます。

実行結果は次のようになります。

12.2.4　CRT STATUS句を使用したファンクションキー入力結果の取得

＜この項の構成＞

(1)　ファンクションキーとキー番号

(1)　ファンクションキーとキー番号

CRT STATUS句を指定した場合，ACCEPT文を実行したときにファンクションキーを入力すると，各ファンクションキーに対応するキー番号がCRT STATUS句で指定したデータの2バイト目に設定されます。

次にファンクションキーに対応するキー番号を示します。

ファンクションキー

割り当てられている
キーの標準値
キー番号

[PF1]
[F1]
1

[PF2]
[F2]
2

[PF3]
[F3]
3

[PF4]
[F4]
4

[PF5]
[F5]
5

[PF6]
[F6]
6

[PF7]
[F7]
7

[PF8]
[F8]
8

[PF9]
[F9]
9

[PF10]
[F10]
10

[PF11]
[F11]
11

[PF12]
[F12]
12

[PF13]
[F13]
13

[PF14]
[F14]
14

[PF15]
[F15]
15

[PF16]
[F16]
16

[PF17]
[F17]
17

[PF18]
[F18]
18

[PF19]
[F19]
19

[PF20]
[F20]
20

[PF21]
[F21]
21

[PF22]
[F22]
22

[PF23]
[F23]
23

[PF24]
[F24]
24

注1

HP-UX(IPF)，HP-UX(IPF64)の場合

デフォルトでは，［F16］まで使用できます。［F9］～［F16］キーは，［Ctrl］キーを押したまま［F1］～［F8］キーを押すことを意味します。

AIX(32)，AIX(64)，Solaris(SPARC)の場合

デフォルトでは，［F24］まで使用できます。［F13］～［F24］キーは，［Ctrl］キーを押したまま［F1］～［F12］キーを押すことを意味します。

注2

［F1］～［F24］キーがMotifのキーボード操作，およびその標準値としても割り当てられている場合，Motifの標準値が優先されます。Motifのキーボード操作，およびその標準値については，システムのMotifについて記載されたマニュアルを参照してください。

CRT STATUS句の詳細については，マニュアル「COBOL2002　言語　拡張仕様編　12.1.4 CRT STATUS句（SCREEN SECTION）」を参照してください。

12.2.5　注意事項

COBOLでは，画面機能を使用する場合，次のシグナルを登録します。

SIGCLD（子プロセス）

COBOL以外のプログラムで上記プロセスを登録した場合や，子プロセスを生成した場合，画面機能の動作は保証しません。

画面節（SCREEN SECTION）で画面を表示する場合，COBOL専用の画面（cbl2002term）が表示されます。

画面節（SCREEN SECTION）による画面機能を使用する場合，setlocaleまたはsetlocale_r※システムコールを発行しないでください。発行した場合の結果は保証しません。

注※

setlocale_rは，setlocaleのリエントラント対応関数です。

画面節（SCREEN SECTION）のプログラムを実行した場合に，何も応答がなくプロセスが終了することがあります。この場合，COBOL専用の画面（cbl2002term）の初期化に失敗している可能性があります。次の要因が考えられますので確認してください。

X Window上で実行していない。

環境変数PATHの設定内容に誤りがある。

指定したフィールドが画面（主画面のユーザ表示領域）に入りきらない場合，フィールドは入出力の対象になりません。次に示す対応を行い，画面に入るように調整してください。

フィールドの大きさを小さくする。

12.3　画面節（WINDOW SECTION）による画面機能

画面節（WINDOW SECTION）を使用した画面の入出力について説明します。

画面節（WINDOW SECTION）を使用した画面の入出力については，マニュアル「COBOL2002　言語　拡張仕様編　13. 画面節（WINDOW SECTION）による画面機能」を参照してください。

なお，SCREEN SECTIONとWINDOW SECTIONは，同時に使用できません。同時に使用した場合，エラーメッセージが出力されます。

＜この節の構成＞

12.3.1　画面の種類と構成

12.3.2　データの表示形式

12.3.3　データの入力方式

12.3.4　キーの機能

12.3.5　ポップアップ画面入出力機能

12.3.6　ユーザポップアップHELP機能

12.3.7　注意事項

12.3.1　画面の種類と構成

画面節（WINDOW SECTION）では，主画面，ポップアップ画面，ユーザポップアップHELP画面，およびエラー表示画面の4種類の画面を使用します。これらの画面について説明します。

＜この項の構成＞

(1)　主画面

(2)　ポップアップ画面

(3)　ユーザポップアップHELP画面

(4)　エラー表示画面

(1)　主画面

主画面は，画面の入出力で使用する主画面であり，タイトルバー，メニューバー，ステータスバー，ユーザ表示領域から構成されます。主画面の構成を次に示します。

ステータスバーには，SET文のBACK CURSOR KEY指定で割り当てたバックカーソルキー，およびHELP KEY句で割り当てたヘルプキーが，それぞれ表示されます。

メニューバーの［終了キー］をクリックすると，次のドロップダウンメニューが表示されます。これらをクリックすると，［Enter］キーや［F1］～［F24］キーを押したのと同じ結果が得られます。

注

HP-UX(IPF)，HP-UX(IPF64)の場合，

メニューはPF16まで表示されます。

［PF9］～［PF16］キーは，［Ctrl］キーを押したまま，［PF1］～［PF8］キーを押すことを意味します。リソースファイルをカスタマイズすると，PF24まで使用できます。

AIX(32)，AIX(64)，Solaris(SPARC)の場合

メニューはPF24まで表示されます。

［PF13］～［PF24］キーは，［Ctrl］キーを押したまま［PF1］～［PF12］キーを押すことを意味します。

(2)　ポップアップ画面

ポップアップ画面は，ポップアップ入出力機能で使用する画面であり，タイトルバーとユーザ表示領域から構成されます。ユーザ表示領域のサイズはプログラム中で指定します。ポップアップ画面の構成を次に示します。

ポップアップ画面の詳細については，「12.3.5　ポップアップ画面入出力機能」を参照してください。

(3)　ユーザポップアップHELP画面

ユーザポップアップHELP画面は，ユーザポップアップHELP機能で使用する画面であり，ユーザ表示領域だけから構成されます。ユーザ表示領域のサイズはプログラム中で指定します。ユーザポップアップHELP画面の構成を次に示します。

ユーザポップアップHELP画面の詳細については，「12.3.6　ユーザポップアップHELP機能」を参照してください。

(4)　エラー表示画面

エラー表示画面は，誤ったデータを入力したときなどに自動的に表示される画面であり，エラー表示領域だけから構成されます。エラー表示画面の構成を次に示します。

12.3.2　データの表示形式

＜この項の構成＞

(1)　数字項目の表示形式

(2)　その他の項目の表示形式

(1)　数字項目の表示形式

数字項目はフィールドに右詰めで表示されます。このとき，必要があれば左側に空白を補って表示されます。仮想小数点（V）の指定が右端以外にある場合は，その位置にピリオド（.）が表示されます。また，符号付き数字項目の場合は，先頭または末尾に符号（+，-）を付けて表示されます。

（例）

(2)　その他の項目の表示形式

数字項目以外の場合は，データ項目の値がそのまま（左詰め）フィールドに表示されます。

12.3.3　データの入力方式

＜この項の構成＞

(1)　数字項目の入力方式

(2)　数字編集項目の入力方式

(3)　英字項目，英数字項目，日本語項目の入力方式

(4)　英数字編集項目，日本語編集項目の入力方式

(5)　注意事項

(1)　数字項目の入力方式

数字項目を入力する場合，整数部は数字を1けた入力するごとに全体の表示が左にシフトし，小数部は数字を1けた入力するごとにカーソルが右にシフトします。また，符号部はいつでも変更できます。

（例1）

PIC S99V99の場合

（例2）

PIC 999の場合

(2)　数字編集項目の入力方式

数字編集項目を入力する場合，キーを押すと同時に値が編集され，画面に反映されます。浮動挿入編集状態，ゼロ抑制編集状態では数字を1けた入力するごとに全体の表示が左にシフトし，ほかの編集状態では数字を1けた入力するごとにカーソルが右にシフトします。また，符号部はいつでも変更できます。

（例1）

PIC ***.**の場合

（例2）

PIC +ZZZ99の場合

(3)　英字項目，英数字項目，日本語項目の入力方式

英字項目，英数字項目，日本語項目は，フィールドの左端から順次入力します。不当な文字を入力するとエラーが表示されます。RESET句，JUST句が指定されているときは，フィールドへの入力を終了すると，入力した文字が右詰めで再表示されます。

（例）

PIC AAAAAA JUSTの場合

(4)　英数字編集項目，日本語編集項目の入力方式

英数字編集項目，日本語編集項目は，フィールドの左端から順次入力します。不当な文字を入力するとエラーが表示されます。キーを押すと同時に値が編集され，画面に反映されます。

（例）

PIC XX/X/Xの場合

(5)　注意事項

入力フィールドにカーソルを移動した場合，入力を助けるために，フィールドに初期表示がされます。この状態で何も入力しなければ，データ項目の内容は変更されません。また，何も入力しないでカーソルを別のフィールドに移動すると，フィールドの表示は元に戻ります。

入出力フィールドにカーソルを移動した場合，すでにデータが出力されているときはそのままですが，データが出力されていないときは入力フィールドと同様に初期表示がされます。この状態で何も入力しなければ，データ項目の内容は変更されません。また，何も入力しないでカーソルを別のフィールドに移動すると，フィールドの表示は元に戻ります。

12.3.4　キーの機能

カーソルの移動などで使用するキーの意味を次に示します。

使用するキー
意味

［→］
カーソルが右に1カラム移動します。ただし，フィールドの右端のときは，後方のフィールドの先頭に移動します。

［←］
カーソルが左に1カラム移動します。ただし，フィールドの左端のときは，前方のフィールドの末尾に移動します。

［↑］
前方のフィールドの先頭にカーソルが移動します。

［↓］
後方のフィールドの先頭にカーソルが移動します。

［Tab］
後方のフィールドの先頭にカーソルが移動します。

［BackSpace］
現在カーソルが位置づけられているカラムの入力を取り消し，カーソルが左に1カラム移動します。

［End］
カーソルの位置に関係なく，そのフィールドのデータをクリアします。
数字項目のフィールドは0でクリアされ，カーソルは整数一の位に位置づけられます。ただし整数項目がない場合，小数第一位に位置づけられます。
数字編集項目のフィールドは0でクリアされ，カーソルは表示されているデータの左端または小数点上に位置づけられます。
その他の項目は空白文字でクリアされ，カーソルは表示されているデータの左端に位置づけられます。

［Enter］，
［F1］～［F24］
入力が終了します。
この場合，［F13］～［F24］キーは，［Ctrl］キーを押したまま［F1］～［F12］キーを押すことを意味します。

注意事項

フィールドの前方，後方とは画面上の次のような位置関係をいいます。
[図データ]

前方または後方のフィールドがない場合は，末尾または先頭のフィールドにカーソルが移動します。

12.3.5　ポップアップ画面入出力機能

ポップアップ画面入出力機能は，主画面とは別にもう一つの画面（ポップアップ画面）を表示し，この画面からデータを入出力するときに使用します。ポップアップ画面の例を，次に示します。

ポップアップ画面は，プログラム中のREPLY文が実行されると表示されます。ポップアップ画面のフィールドへの入力などが終わり，終了キー（［Enter］キー，［F1］～［F24］キー）を押すと，ポップアップ画面が閉じます。

注意事項

HELP LINE指定，HELP COLUMN指定で指定する表示位置は，ポップアップ画面（タイトルバーを含む）の左隅上です。

ポップアップ画面が表示されているときは，主画面のタイトルバーのメニューは使用できません。

12.3.6　ユーザポップアップHELP機能

ユーザポップアップHELP機能は，商品コードなどを確認しながら画面に入力するために，一時的にこれらのコードの一覧をガイダンス画面に表示するような場合に使用します。このとき表示するガイダンス画面をユーザポップアップHELP画面といいます。ユーザポップアップHELP画面やこの画面を表示するためのキーは画面節（WINDOW SECTION）のHELP WINDOW句で指定します。

ユーザポップアップHELP画面の操作手順の例を次に示します。

カーソルをフィールド（商品コード）に位置づけてヘルプキー（［PF1］キー）を押すと，対応するユーザポップアップHELP画面が主画面に重ねて表示されます。

ユーザポップアップHELP画面を見ながら商品コードを入力します。

カーソルをほかのフィールド（商品コード以外）に移すか，終了キーを押すと，ユーザポップアップHELP画面が閉じます。

注意事項

ここでいう終了キーとは，メニューバーの［終了キー］で表示される［Enter］キー，［F1］～［F24］キーコマンド，およびこれらに対応する［Enter］キー，［F1］～［F24］キーを指します。

12.3.7　注意事項

＜この項の構成＞

(1)　ACCEPT／REPLY文を使用する場合

(2)　LETTER句を使用する場合（Solaris(SPARC)の場合）

(3)　olwnマネージャを使用する場合

(4)　Motifのキーボード操作，およびその標準値に関する注意事項

(5)　指定したフィールドが画面（主画面のユーザ表示領域）に入りきらない場合

(6)　その他の注意事項

(1)　ACCEPT／REPLY文を使用する場合

ACCEPT／REPLY文でFIRST FIELD指定を使用する場合，次のような制限があります。

-DebugCompatiオプションを指定しても，FIRST FIELD指定の一意名に対して添字はチェックされません。

FIRST FIELD指定の直後には，IN NUMERIC MODE指定を記述できません。ただし，INを省略した場合は，IN NUMERIC MODE指定を記述できます。

(2)　LETTER句を使用する場合（Solaris(SPARC)の場合）

画面節（WINDOW SECTION）でLETTER句（WIDE，LONG，DOUBLE）を記述しても，縦長や横長の文字は普通サイズで表示されます。LETTER句の記述を文字サイズに反映させて表示させたい場合は，アプリケーションリソースファイル（Cbl2002term）を修正してください。修正内容を次に示します。

ただし，この修正をすると画面節（WINDOW SECTION）の画面の初期表示に時間が掛かります。

（修正内容）

LETTER句用のフォント（デフォルト）の先頭に「!」を付けてコメントにし，LETTER句用のフォント（正規サイズ）の先頭の「!」を削除して有効にします。

(3)　olwnマネージャを使用する場合

olwnマネージャの画面でダブルクリックイベントを取得する場合は，「$HOME/.Xdefaults」ファイルを次に示すように変更してください。

（修正内容）

変更前

OpenWindows.SetInput:select

変更後

OpenWindows.SetInput:followmouse

(4)　Motifのキーボード操作，およびその標準値に関する注意事項

［F1］～［F24］キーがMotifのキーボード操作，およびその標準値としても割り当てられている場合，Motifの標準値が優先されます。Motifのキーボード操作，およびその標準値については，システムのMotifについて記載されたマニュアルを参照してください。

(5)　指定したフィールドが画面（主画面のユーザ表示領域）に入りきらない場合

指定したフィールドが画面（主画面のユーザ表示領域）に入りきらない場合，実行時エラーとなります。次に示す対応を行い，画面に入るように調整してください。

フィールドの大きさを小さくする。

(6)　その他の注意事項

COBOLでは，画面機能を使用する場合，次のシグナルを登録します。

SIGCLD（子プロセス）

COBOL以外のプログラムで上記プロセスを登録した場合や，子プロセスを生成した場合，画面機能の動作は保証しません。

画面節（WINDOW SECTION）による画面機能を使用する場合，setlocaleまたはsetlocale_r※システムコールを発行しないでください。発行した場合の結果は保証しません。

注※

setlocale_rは，setlocaleのリエントラント対応関数です。

画面節（WINDOW SECTION）のプログラムを実行した場合に，何も応答がなくプロセスが終了することがあります。この場合，COBOL専用の画面（cbl2002term）の初期化に失敗している可能性があります。次の要因が考えられますので確認してください。

X Window上で実行していない。

環境変数PATHの設定内容に誤りがある。

12.4　リソース一覧

画面節（SCREEN SECTIONおよびWINDOW SECTION）による画面機能では，主画面の動作環境を定義するためのリソースの標準値が，アプリケーションリソースファイルに格納されています。このアプリケーションリソースファイル中のリソース値を設定すると，主画面のメニューバーの［終了キー］に表示されるファンクションキーなどを変更できます。

アプリケーションリソースファイル名

HP-UX(IPF)，AIX(32)，Solaris(SPARC)の場合：Cbl2002term

HP-UX(IPF64)，AIX(64)の場合：Cbl2002term64

アプリケーションリソースファイルのクラス名

HP-UX(IPF)，AIX(32)，Solaris(SPARC)の場合：Cbl2002term

HP-UX(IPF64)，AIX(64)の場合：Cbl2002term64

アプリケーションリソースファイルのキャプション文字列

HP-UX(IPF)，AIX(32)，Solaris(SPARC)の場合：cbl2002term

HP-UX(IPF64)，AIX(64)の場合：cbl2002term 64bit

リソースファイルの格納場所

リソースファイルは通常/usr下に格納しますが，HP-UX(IPF)では，「COBOLのインストールディレクトリ/resource/」下に格納し，本来の/usr下にはリソースファイルと同名のシンボリックリンクファイルを格納します。HP-UX(IPF)の言語別リソースファイルの格納場所とシンボリックリンクを次に示します。

言語 | リソースファイルの格納場所 | シンボリックリンク
シフトJIS | /opt/HILNGcbl2k/resource/ja_JP.SJIS/app-defaults/ | /usr/lib/X11/ja_JP.SJIS/app-defaults/
EUC | /opt/HILNGcbl2k/resource/ja_JP.eucJP/app-defaults/ | /usr/lib/X11/ja_JP.eucJP/app-defaults/

形式

HP-UX(IPF)，AIX(32)，Solaris(SPARC)の場合

Cbl2002term*リソース名:リソース値

HP-UX(IPF64)，AIX(64)の場合

Cbl2002term64*リソース名:リソース値

画面節（SCREEN SECTIONおよびWINDOW SECTION）による画面機能でのリソース一覧を次に示します。

リソース名

内容

リソース値の
標準値

background
背景色
white

foreground
前景色
black

highlightColor
高輝度前景色
red

showPF1
[終了キー]メニューに[PF1]キーを表示
True

showPF2
[終了キー]メニューに[PF2]キーを表示
True

showPF3
[終了キー]メニューに[PF3]キーを表示
True

showPF4
[終了キー]メニューに[PF4]キーを表示
True

showPF5
[終了キー]メニューに[PF5]キーを表示
True

showPF6
[終了キー]メニューに[PF6]キーを表示
True

showPF7
[終了キー]メニューに[PF7]キーを表示
True

showPF8
[終了キー]メニューに[PF8]キーを表示
True

showPF9
[終了キー]メニューに[PF9]キーを表示
True

showPF10
[終了キー]メニューに[PF10]キーを表示
True

showPF11
[終了キー]メニューに[PF11]キーを表示
True

showPF12
[終了キー]メニューに[PF12]キーを表示
True

showPF13
[終了キー]メニューに[PF13]キーを表示
True

showPF14
[終了キー]メニューに[PF14]キーを表示
True

showPF15
[終了キー]メニューに[PF15]キーを表示
True

showPF16
[終了キー]メニューに[PF16]キーを表示
True

showPF17
[終了キー]メニューに[PF17]キーを表示
True

showPF18
[終了キー]メニューに[PF18]キーを表示
True

showPF19
[終了キー]メニューに[PF19]キーを表示
True

showPF20
[終了キー]メニューに[PF20]キーを表示
True

showPF21
[終了キー]メニューに[PF21]キーを表示
True

showPF22
[終了キー]メニューに[PF22]キーを表示
True

showPF23
[終了キー]メニューに[PF23]キーを表示
True

showPF24
[終了キー]メニューに[PF24]キーを表示
True

PF1.labelString
[PF1]キーのラベル文字列
PF1

PF2.labelString
[PF2]キーのラベル文字列
PF2

PF3.labelString
[PF3]キーのラベル文字列
PF3

PF4.labelString
[PF4]キーのラベル文字列
PF4

PF5.labelString
[PF5]キーのラベル文字列
PF5

PF6.labelString
[PF6]キーのラベル文字列
PF6

PF7.labelString
[PF7]キーのラベル文字列
PF7

PF8.labelString
[PF8]キーのラベル文字列
PF8

PF9.labelString
[PF9]キーのラベル文字列
PF9

PF10.labelString
[PF10]キーのラベル文字列
PF10(a)

PF11.labelString
[PF11]キーのラベル文字列
PF11(b)

PF12.labelString
[PF12]キーのラベル文字列
PF12(c)

PF13.labelString
[PF13]キーのラベル文字列
PF13(d)

PF14.labelString
[PF14]キーのラベル文字列
PF14(e)

PF15.labelString
[PF15]キーのラベル文字列
PF15(f)

PF16.labelString
[PF16]キーのラベル文字列
PF16(g)

PF17.labelString
[PF17]キーのラベル文字列
PF17(h)

PF18.labelString
[PF18]キーのラベル文字列
PF18(i)

PF19.labelString
[PF19]キーのラベル文字列
PF19(j)

PF20.labelString
[PF20]キーのラベル文字列
PF20(k)

PF21.labelString
[PF21]キーのラベル文字列
PF21(l)

PF22.labelString
[PF22]キーのラベル文字列
PF22(m)

PF23.labelString
[PF23]キーのラベル文字列
PF23(n)

PF24.labelString
[PF24]キーのラベル文字列
PF24(o)

13.　COBOL入出力サービスルーチン

COBOL入出力サービスルーチンを使うと，ほかの言語で書かれたプログラムから，COBOL2002で作成した順編成ファイル，および相対編成ファイルにアクセスできます。

この章では，COBOL入出力サービスルーチンの使用方法について説明します。

＜この章の構成＞

13.1　COBOL入出力サービスルーチンの概要

13.2　COBOL入出力サービスルーチンの説明

13.3　COBOL入出力サービスルーチンのインタフェース

13.4　リンクの指定

13.5　デバッグ情報の取得

13.6　COBOL入出力サービスルーチンでのディスク書き込み保証

13.7　COBOL入出力サービスルーチンでのラージファイル入出力機能

13.8　COBOL入出力サービスルーチンの使用例

13.9　注意事項

13.1　COBOL入出力サービスルーチンの概要

＜この節の構成＞

13.1.1　概要

13.1.2　COBOL入出力サービスルーチンが対応している機能

13.1.1　概要

COBOL2002の順編成ファイル，および相対編成ファイルは，COBOL2002独自のファイル形式で作成されます。そのため，他言語で作成したプログラムから，直接これらの形式のファイルにはアクセスできません。

COBOL入出力サービスルーチンを使用すると，他言語のプログラムからでもCOBOL2002の順編成ファイル，および相対編成ファイルにアクセスできます。

＜この項の構成＞

(1)　COBOL入出力サービスルーチンの使用方法

(2)　COBOL入出力サービスルーチンで発生したエラーのデバッグ方法

(1)　COBOL入出力サービスルーチンの使用方法

COBOL入出力サービスルーチンは，COBOLプログラム，または他言語のプログラムから呼び出して使用します。ファイルの入出力に必要な情報は，インタフェース領域と呼ばれる構造体を通じて受け渡されます。各サービスルーチンを呼び出すときには，このインタフェース領域のアドレスを引数として渡します。

(2)　COBOL入出力サービスルーチンで発生したエラーのデバッグ方法

COBOL入出力サービスルーチンの実行中にエラーが発生した場合，エラーメッセージ番号がインタフェース領域に格納されます。エラーメッセージは出力されません。

また，環境変数CBL_FLSRVDUMPを設定すると，デバッグ情報をファイルに出力することもできます。

13.1.2　COBOL入出力サービスルーチンが対応している機能

＜この項の構成＞

(1)　サービスルーチンが対応しているファイル形式

(2)　COBOL入出力サービスルーチンの制限事項

(1)　サービスルーチンが対応しているファイル形式

COBOL入出力サービスルーチンでアクセスできるファイル形式を，次に示します。

固定長の順編成ファイル

可変長の順編成ファイル

固定長の相対編成ファイル

可変長の相対編成ファイル

COBOL入出力サービスルーチンを使うと，これらの形式のファイルに対してCOBOL2002の入出力機能，およびファイル共用が使用できます。また，COBOLプログラムからアクセスすることを考慮したエラーチェックも実行されます。

(2)　COBOL入出力サービスルーチンの制限事項

COBOL入出力サービスルーチンを使ってファイルの入出力をする場合，次の指定，および機能は使用できません。

CLOSE文のWITH LOCK指定

不定ファイル（SELECT句のOPTIONAL指定）

入出力で誤り状態が発生したときの制御移行（USE文，AT END指定など）

行制御機能（WRITE文のADVANCING指定，ファイル記述項のLINAGE句）

特殊ファイルへの入出力（テープ装置，プリンタなど）

マルチスレッド環境下での実行

ラージファイル入出力機能（COBOL入出力サービスルーチンでは，ラージファイル入出力機能を使用できません。ただし，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)の場合，順編成ファイルでは，COBOL入出力サービスルーチンを使用してラージファイルに対する入出力ができます。）

COBOL入出力サービスルーチンでは，エラーが発生しても終了処理がされません。エラーが発生した場合は，COBOL入出力サービスルーチンを呼び出したプログラム側で終了処理するようにしてください。

13.2　COBOL入出力サービスルーチンの説明

COBOL入出力サービスルーチンの一覧を，次に示します。

表13-1　COBOL入出力サービスルーチンの一覧

サービスルーチンの名称 | 順ファイルの入出力 | 相対ファイルの入出力 | 機能
CBLOPEN | ○ | ファイルを開く
CBLCLOSE | ○ | ファイルを閉じる
CBLREAD | ○ | レコードの入力
CBLWRITE | ○ | レコードの出力
CBLREWRITE | ○ | レコードの書き換え
CBLUNLOCK | ○ | レコード施錠の解除
CBLDELETE | × | ○ | レコードの削除
CBLSTART | × | ○ | レコードの位置づけ
CBLWDISK | ○ | ファイルのディスクへの書き込み保証

（凡例）

○：使用できる

×：使用できない

各サービスルーチンの処理概要を，次に示します。

CBLOPENサービスルーチン

OPEN文のモード，ファイル属性に従い，ファイルを開く。

書き込みモードの場合，ファイルを作成する。ファイルがすでにある場合は，既存のファイルに上書きする。

追加書き込みモードの場合，ファイルの終端にファイルポインタを移動する。

ファイルの排他・共用のための施錠要求をする。

内部的に必要な領域を確保する。

CBLCLOSEサービスルーチン

ファイルを閉じる。

レコードの施錠を解除する。

オープン時に確保した領域を解放する。

CBLREADサービスルーチン

レコードをバッファに読み込む。

読み込んだレコードの長さを設定する。

レコード施錠の指定に従い，レコードを施錠する，または施錠を解除する。

読み込んだレコードの相対レコード番号を設定する（相対ファイルだけ）。

CBLWRITEサービスルーチン

バッファのレコードを書き出す。

レコードの施錠を解除する。

書き込んだレコードの相対番号を返す（相対ファイルだけ）。

CBLREWRITEサービスルーチン

書き込みバッファのレコードとの書き換えをする。

直前のREAD文をチェックする（順アクセスの場合だけ）。

書き換えレコード長をチェックする。

レコードの施錠を解除する。

CBLUNLOCKサービスルーチン

すべてのレコード施錠を解除する。

CBLDELETEサービスルーチン

レコードを削除する。

直前のREAD文をチェックする（順アクセスの場合だけ）。

レコードの施錠を解除する。

CBLSTARTサービスルーチン

キー番号と条件からレコードを位置づける。

ファイルのアクセスモードをチェックする（乱アクセスの場合はできない）。

CBLWDISKサービスルーチン

ファイルに出力したデータの，ディスクへの書き込み保証を適用する。

COBOL入出力サービスルーチンを呼び出すときの注意事項

COBOL2002のファイル入出力機能と同様に，オープン時のOPEN文のモードによって実行できないサービスルーチンがあります。

13.3　COBOL入出力サービスルーチンのインタフェース

＜この節の構成＞

13.3.1　サービスルーチンを呼び出す関数の形式

13.3.2　インタフェース領域の形式

13.3.1　サービスルーチンを呼び出す関数の形式

COBOL入出力サービスルーチンは，すべて次の形式で呼び出します。

形式

#include "CBL85fl.h"
int  サービスルーチン名(CBLCOMFL * com, CBLPARMFL * parm)

引数

CBLCOMFL * com：管理情報インタフェース領域のアドレス

CBLPARMFL * parm：パラメタインタフェース領域のアドレス

戻り値

0：正常に終了した場合

-1：エラーが発生した場合

注意事項

管理情報インタフェース領域，およびパラメタインタフェース領域は，ユーザプログラム側で確保する必要があります。

各インタフェース領域中のシステムが使用する領域，および予備領域には，最初のCBLOPENサービスルーチンを実行する前にNULL（X'00'）を指定して，領域をクリアしておく必要があります。
ただし，一度CBLCLOSEサービスルーチンで入出力を終了したあと，再度同じインタフェース領域を使ってCBLOPENサービスルーチンで入出力を開始する場合は，管理情報インタフェース領域中のシステムが使用する領域，および予備領域をクリアする必要はありません。

同じファイルにアクセスするときには，CBLOPENサービスルーチンでファイルを開いてからCBLCLOSEサービスルーチンでファイルを閉じるまで，同じ管理情報インタフェース領域を使用する必要があります。

同時に複数のファイルにアクセスする場合は，各ファイルに対して別々の管理情報インタフェース領域を用意する必要があります。

管理情報インタフェース領域中のファイル情報は，CBLOPENサービスルーチンを実行したときの設定値が有効となります。ファイルを開いたあとの入出力サービスルーチンでファイル情報を変更しても無効です。ただし，デバッグ情報出力指示の設定は，ファイルを開いたあとでも有効となります。

13.3.2　インタフェース領域の形式

COBOL入出力サービスルーチンで使用するインタフェース領域を，次に示します。

表13-2　COBOL入出力サービスルーチンで使用するインタフェース領域

インタフェース領域の名称
（構造体のtypedef名称）
サイズ（バイト）
用途

UNIX32の場合
UNIX64の場合

管理情報インタフェース領域
（CBLCOMFL）
256
312

ファイル情報を管理する

OPEN時のファイル情報を指定する

エラー発生時，エラー情報を指定する

COBOL2002の内部情報として使用される

パラメタインタフェース領域
（CBLPARMFL）
32
48

入出力パラメタを指定する

＜この項の構成＞

(1)　管理情報インタフェース領域

(2)　パラメタインタフェース領域

(1)　管理情報インタフェース領域

管理情報インタフェース領域の形式を，「表13-3　管理情報インタフェース領域の形式（1）」，および「表13-4　管理情報インタフェース領域の形式（2）」に示します。

表13-3　管理情報インタフェース領域の形式（1）

データ項目名
UNIX32の場合
UNIX64の場合
設定／参照する値
CBLOPENサービスルーチンでの指定

区分
名称
位置
長さ
データ形式
位置
長さ
データ形式
OUTPUT指定
OUTPUT以外

属性チェック無
属性チェック有

ファイル情報
ファイル編成とレコード形式
0
4
char[4]
0
4
char[4]

SAMF：順ファイル固定長レコード形式

SAMV：順ファイル可変長レコード形式

RELF：相対ファイル固定長レコード形式

RELV：相対ファイル可変長レコード形式

○
△※¹
○

最大レコード長
4
4
int
4
4
int
レコード長
（固定長形式の場合レコード長）
○
△※¹
○

最小レコード長
8
4
int
8
4
int
レコード長
（固定長形式の場合は無視される）
○
△
○

未使用
－
－
－
12
4
char[4]
サービスルーチン予備領域
NULL（X'00'）を指定してクリアしておくこと
NULL（X'00'）を指定してクリアしておくこと
NULL（X'00'）を指定してクリアしておくこと

ファイル名称アドレス
12
4
char＊
16
8
char＊
オープンするファイル名称のアドレスファイル名称はNULLで終わる文字列とする。
CBLOPENサービスルーチンを呼び出す時だけ指定が必要。
CBLOPENサービスルーチンの呼び出しが成功したあと，CBLCLOSEサービスルーチン実行までの入出力文で，COBOL2002は，このアドレス，およびアドレスが指す領域を参照しない。
○
○
○

属性チェックオプション※²
16
1
char
24
1
char

CBLCOM_NOCHK：

管理情報インタフェース領域とファイル実体の属性をチェックしない。

CBLCOM_CHK：

管理情報インタフェース領域とファイル実体の属性をチェックする。

－
○
CBLCOM_NOCHK
○
CBLCOM_CHK

ファイルOPEN文のモード
17
1
char
25
1
char

CBLCOM_OPEN_INPUT：

読み取り専用（OPEN INPUT）

CBLCOM_OPEN_IO：

読み取りと書き込み（OPEN I-O）

CBLCOM_OPEN_OUTPUT：

書き込み専用・新規作成（OPEN OUTPUT）

CBLCOM_OPEN_EXTEND：

追加書き（OPEN EXTEND）

○
CBLCOM_OPEN_OUTPUT
○
○

ファイル施錠モード
18
1
char
26
1
char

CBLCOM_LOCK_NO：

LOCK MODE句指定なし

CBLCOM_LOCK_EXCL：

排他施錠（LOCK MODE IS EXCLUSIVE）

CBLCOM_LOCK_AUTO：

自動施錠（LOCK MODE IS AUTOMATIC）

CBLCOM_LOCK_MANU：

手動施錠（LOCK MODE IS MANUAL）※³

○
○
○

ディスク書き込みオプション
19
1
char
27
1
char

CBLCOM_ENVFSYNC：

環境変数CBLFSYNCに従う。

CBLCOM_NOFSYNC：

ディスク書き込み保証を適用しない。

CBLCOM_FSYNC：

クローズ時のディスク書き込み保証を適用する。

CBLCOM_WDISK：

書き込み時のディスク書き込み保証を適用する。

詳細は「13.6　COBOL入出力サービスルーチンでのディスク書き込み保証」を参照。
○
○
（読み取り専用では無視）
○
（読み取り専用では無視）

ファイルアクセスモード
20
1
char
28
1
char

CBLCOM_ACCESS_SEQ：

順アクセス法（ACCESS MODE IS SEQUENTIAL）

CBLCOM_ACCESS_RAND：

乱アクセス法（ACCESS MODE IS RANDOM）

CBLCOM_ACCESS_DYNA：

動的アクセス法（ACCESS MODE IS DYNAMIC）

順ファイルでは順アクセス法だけが指定できる。

○
○
○

ラージファイル対応オプション
21
1
char
29
1
char

CBLCOM_ENVLARGEFILE：

環境変数CBLLARGEFILEの指定に従う（順編成ファイルだけ）。

CBLCOM_NOLARGEFILE：

環境変数CBLLARGEFILEの指定を有効としない（順編成ファイルだけ）。

CBLCOM_LARGEFILE：

ラージファイル入出力機能を使用する（順編成ファイルだけ）。

○
○
○

未使用
22
6
char[6]
30
10
char[10]
サービスルーチン予備領域
○
NULL（X'00'）を指定してクリアしておくこと
○
NULL（X'00'）を指定してクリアしておくこと
○
NULL（X'00'）を指定してクリアしておくこと

（凡例）

○：必ず指定する項目

△：COBOL2002が値を返す項目

－：無視される項目

注

表中の「CBLCOM_xxx」は，COBOL2002で使用できるインクルードファイル（CBL85fl.h）中で定義されているマクロです。CBL85fl.hファイルは，次のディレクトリの下に提供されています。

UNIX32，Linux(IPF64)の場合

/opt/HILNGcbl2k/include/cbl

HP-UX(IPF64)，AIX(64)，Linux(x64)の場合

/opt/HILNGcbl2k64/include/cbl

注※1

順固定長ファイルに対して入出力する場合は，必ず指定してください。

注※2

順固定長ファイルではこの指定は無視され，レコード長に従います。

注※3

順ファイルでは手動施錠を指定できません。

表13-4　管理情報インタフェース領域の形式（2）

データ項目名
UNIX32の場合
UNIX64の場合
設定／参照する値
備考

区分
名称
位置
長さ
データ形式
位置
長さ
データ形式

エラー情報
入出力状態
（FILE STATUS）
28
2
short
40
2
short
0～99
正常／エラーに関係なく，必ず値が返される。
返される値の詳細は「付録F　入出力状態の値」を参照

システムエラー情報有無
30
1
char
42
1
char

CBLCOM_ERR_NOSYSTEM：

システムエラー情報なし

CBLCOM_ERR_SYSTEM：

システムエラー情報有り

未使用
31
1
char
43
1
char
サービスルーチン予備領域

COBOLメッセージ番号
32
2
short
44
2
short
3001～4099
COBOLエラーメッセージ番号
「13.5.1　COBOL入出力サービスルーチンで出力されるエラーメッセージ番号」を参照

システムコール番号
34
2
short
46
2
short
1～999
エラーとなったシステムコールを表すCOBOL2002が定める関数番号
システムエラー情報有りの場合に有効。
番号と内容については，マニュアル「COBOL2002　メッセージ」を参照

システムエラーコード
36
4
int
48
4
int
システムが返すエラーコード
システムエラー情報有りの場合に有効。
システムのマニュアルを参照

COBOLエラー詳細情報
40
1
char
52
1
char
インタフェース領域指定誤り，およびファイル属性エラー発生時の詳細情報
COBOLメッセージ番号が3701～3703，および3801～3803の場合に有効。
設定される値は，「表13-5　COBOLエラー詳細情報の一覧」を参照

未使用
41
15
char[15]
53
15
char[15]
サービスルーチン予備領域

デバッグ情報
デバッグ情報出力指示
56
1
char
68
1
char

CBLCOM_DBG_NO：

デバッグ情報を出力しない

CBLCOM_DBG_BEF：

各入出力サービスルーチン実行の前にデバッグ情報を出力する

CBLCOM_DBG_AFT：

各入出力サービスルーチン実行後にデバッグ情報を出力する

CBLCOM_DBG_BEFAFT：

各入出力サービスルーチン実行の前とあとでデバッグ情報を出力する

「13.5.2　インタフェース領域のダンプ出力」を参照

未使用
57
11
char[11]
69
11
char[11]
サービスルーチン予備領域

ユーザ領域
68
16
char[16]
80
16
char[16]
プログラムで使用可能な領域。
COBOL2002では管理しない

システムで使用する領域
84
172
char[132]
char *[10]
96
216
char[136]
char *[10]
システムで使用する領域。
最初のオープンを実行する前にNULL（X'00'）を指定してクリアしておく
NULL（X'00'）クリア以降，この領域を更新してはならない

注

表中の「CBLCOM_xxx」は，COBOL2002で使用できるインクルードファイル（CBL85fl.h）中で定義されているマクロです。CBL85fl.hファイルは，次のディレクトリの下に提供されています。

UNIX32，Linux(IPF64)の場合

/opt/HILNGcbl2k/include/cbl

HP-UX(IPF64)，Linux(x64)の場合

/opt/HILNGcbl2k64/include/cbl

管理情報インタフェース領域のデータ項目に関する注意事項

(a)属性チェックオプション

属性チェックオプションには，ファイルのオープン時に管理情報インタフェース領域の値とファイル実体の属性をチェックするかどうかを指定します。

(i)属性をチェックしない場合

属性チェックオプションにCBLCOM_NOCHKを指定すると，ファイルの属性がチェックされません。この場合，CBLOPENサービスルーチンの呼び出し成功時に，ファイル実体に基づいて次のデータ項目が自動的に設定されます。

ファイル形式
順ファイル可変長レコード形式の場合　：SAMV
相対ファイル固定長レコード形式の場合：RELF
相対ファイル可変長レコード形式の場合：RELV

最大レコード長

最小レコード長

入出力状態
00が返されます。

ユーザは，設定されたデータ項目の値から，入出力に必要なバッファ領域を用意するようなプログラムを作成する必要があります。また，ファイル形式が妥当かどうかをユーザプログラム側で必ず判定するようにしてください。

(ii)属性をチェックする場合

属性チェックオプションにCBLCOM_CHKを指定すると，次のデータ項目についてファイルの属性がチェックされます。

ファイル編成とレコード形式

最大レコード長

最小レコード長

また，CBLOPENサービスルーチンの呼び出し成功時に，入出力状態に00が返されます。

属性チェックの結果，管理情報インタフェース領域の設定とファイル実体の属性が一致しなかった場合，サービスルーチンはエラーの戻り値を返し，ファイルは開かれません。

注意事項

OPEN文のモードに「書き込み専用・新規作成（OPEN_OUTPUT）」を指定した場合，属性チェックオプションの指定は無視され，管理情報インタフェース領域に指定されたファイル編成，およびレコード長に従って新規にファイルが作成されます。

ファイル編成とレコード形式にSAMF（順ファイル固定長レコード形式）を指定した場合，属性チェックオプションの指定は無視され，指定したレコード長に従ってファイルの入出力処理が実行されます。

ファイル編成とレコード形式に順ファイル固定長レコード形式（SAMF）を指定しないで，かつ，属性チェックオプションにチェックしない（CBLCOM_NOCHK）を指定した場合，順固定長ファイルに対してCBLOPENサービスルーチンを実行すると，対象外ファイルとみなされます。

(b)エラー情報

エラー情報に設定される値は，サービスルーチンの終了状態によって次のように異なります。

サービスルーチンの終了状態
入出力状態
COBOLメッセージ番号
システムエラー情報有無
システムコール番号／システムエラーコード

正常終了
00
0
なし
（CBLCOM_ERR_NOSYSTEM）
0

エラー発生
入出力状態を表す値
メッセージ番号
（0以外）
なし
（CBLCOM_ERR_NOSYSTEM）
0

あり
（CBLCOM_ERR_SYSTEM）
該当するコードが設定される

COBOLメッセージ番号，システムコール番号，およびシステムエラーコードの値は，COBOL2002が独自に定めた値，またはシステム固有のコードです。そのため，エラー発生時のプログラム実行制御には，入出力状態の値を使用してください。

(c)COBOLエラー詳細情報

COBOLエラー詳細情報に返される情報，およびその意味を次に示します。

表13-5　COBOLエラー詳細情報の一覧

COBOLメッセージ番号
エラー種別
マクロ名称
値
エラー項目／エラーの意味

3701
3801
管理情報インタフェース領域指定誤り
CBLCOM_ERRC_FORM
1
ファイル編成とレコード形式

CBLCOM_ERRC_MAX
2
最大レコード長
（最大レコード長の値が1～1,073,741,799以外，または最小レコード長より小さい）

CBLCOM_ERRC_MIN
3
最小レコード長
（最小レコード長の値が1～1,073,741,799以外）

CBLCOM_ERRC_PATH
4
ファイル名称アドレス

CBLCOM_ERRC_FLOPT
5
属性チェックオプション

CBLCOM_ERRC_OPEN
6
ファイルオープンモード

CBLCOM_ERRC_LOCK
7
ファイル施錠モード

CBLCOM_ERRC_FSYNC
8
ディスク書き込みオプション

CBLCOM_ERRC_DBGINF
9
デバッグ情報出力指示

CBLCOM_ERRC_ACCESS
10
ファイルアクセスモード

CBLCOM_ERRC_MSGBUFSIZ
11
メッセージ出力用バッファ長

CBLCOM_ERRC_LARGEFILE
12
ラージファイル対応オプション

3702
3802
パラメタインタフェース領域指定誤り
CBLCOM_ERRP_RDBUF
21
読み込みバッファアドレス

CBLCOM_ERRP_WRBUF
22
書き出しバッファアドレス

CBLCOM_ERRP_LOCK
23
WITH LOCK指定

CBLCOM_ERRP_KEY
24
レコード番号キー

CBLCOM_ERRP_ACCESS
25
レコード単位アクセスモード

CBLCOM_ERRP_KEYMODE
26
キー比較条件

3703
3803
ファイル属性エラー
CBLCOM_ERRF_CBL
41
ファイルフォーマット
（COBOL以外で作成したファイル，またはファイル破壊）

CBLCOM_ERRF_FORM
42
ファイル形式（ファイル編成，またはレコード形式）

CBLCOM_ERRF_MAX
43
最大レコード長

CBLCOM_ERRF_MIN
44
最小レコード長

インタフェース領域中の複数のデータ項目に誤りがある場合や，ファイルの属性チェックで複数の項目の属性が一致しなかった場合，COBOLエラー詳細情報には，最初に発見されたエラー項目に関する値が設定されます。

(2)　パラメタインタフェース領域

パラメタインタフェース領域の形式を，次に示します。

表13-6　パラメタインタフェース領域の形式

データ項目名
UNIX32の場合
UNIX64の場合
設定／参照する値
各サービスルーチンでの指定

区分
名称および意味
位置
長さ
データ形式
位置
長さ
データ形式
ＯＰ
ＣＬ
ＲＥ
ＷＲ
ＲＷ
ＤＥ
ＳＴ
ＵＮ
ＷＤ

入出力パラメタ
読み込みバッファ
アドレス
0
4
char *
0
8
char *
読み込んだレコードを格納する領域のアドレス
－
－
○
－
－
－
－
－
－

読み込み
サイズ
4
4
int
8
4
int
読み込んだレコードの長さを返す
－
－
△
－
－
－
－
－
－

未使用
－
－
－
12
4
char[4]
サービスルーチン予備領域
－
－
－
－
－
－
－
－
－

書き出しバッファアドレス
8
4
char *
16

char *
書き出すレコードのバッファアドレス
－
－
－
○
○
－
－
－
－

書き出しサイズ
12
4
int
24
4
int
書き出すレコードの長さ
－
－
－
○※1
○※1
－
－
－
－

相対レコード番号キー
(RELATIVE KEY
16
4
int
28
4
int
入出力対象レコードキー番号※2
ファイルアクセスモード：順アクセス
－
－
△
△
N
N
○
－
－

ファイルアクセスモード：乱アクセス
－
－
○
○
○
○
E
－
－

ファイルアクセスモード：動的アクセス
－
－
※3
○
○
○
○
－
－

WITH LOCK指定
20
1
char
32
1
char
CBLPARM_NOLOCK：レコード施錠要求なし（WITH NO LOCK）
CBLPARM_LOCK：レコード施錠要求あり（WITH LOCK）
レコード施錠の詳細は，マニュアル「COBOL2002　言語　標準仕様編」を参照
○
－
○
－
－
－
－
－
－

レコード単位アクセスモード
21
1
char
33
1
char
CBLPARM_ACCESS_NEXT：順アクセス（READ NEXT）
CBLPARM_ACCESS_KEY：乱アクセス（READ KEY）
－
－
○※4
－
－
－
－
－
－

キー比較条件
22
1
char
34
1
char
位置づける相対レコード番号とキー（key）の比較条件
CBLPARM_KEY_EQUAL：キーの値と等しい（EQUAL）
CBLPARM_KEY_GREAT：キーの値より大きい（GREATER THAN）
CBLPARM_KEY_NOTLESS：キーの値より小さくない（NOT LESS THAN）
CBLPARM_KEY_GREATEQ：キーの値より大きいか，または等しい（GREATER THAN OR EQUAL）
－
－
－
－
－
－
○
－
－

未使用
23
9
char[9]
35
13
char[13]
サービスルーチン予備領域
※5
※5
※5
※5
※5
※5
※5
※5
※5

（凡例）

OP：CBLOPENサービスルーチン

CL：CBLCLOSEサービスルーチン

RE：CBLREADサービスルーチン

WR：CBLWRITEサービスルーチン

RW：CBLREWRITEサービスルーチン

DE：CBLDELETEサービスルーチン

ST：CBLSTARTサービスルーチン

UN：CBLUNLOCKサービスルーチン

WD：CBLWDISKサービスルーチン

○：必ず指定する項目

△：COBOL2002が値を返す項目

E：エラー（乱アクセス法の場合，CBLSTARTサービスルーチンは実行できない）

N：無視される項目（直前にCBLREADサービスルーチンの呼び出しが成功したレコードが対象となる）

－：無視される項目

注※1

固定長レコード形式の場合，このデータ項目の指定は無視されます。

注※2

入出力対象レコードキー番号について次に示します（○△だけ該当）。

最初のレコード番号は1，以降2，3，…となり1ずつ増えます。

このデータ項目の指定は，相対ファイルだけで有効となります。順ファイルで指定した場合は，無視されます。

順アクセスの場合，CBLREADサービスルーチンやCBLWRITEサービスルーチンによって読み書きされたレコードの，相対レコード番号が返されます。

乱アクセス，または動的アクセスの場合，入出力文を実行する前に入出力対象レコードの相対レコード番号を設定する必要があります。

注※3

ファイルアクセスモードが動的アクセスのCBLREADサービスルーチンを実行したときは，レコード単位アクセスモードの指定によって，順アクセスか乱アクセスかが決まります。

注※4

順ファイルの場合，このデータ項目の指定は無視されます。

注※5

最初にCBLOPENサービスルーチンを実行する前にNULL（X'00'）を指定して，領域をクリアしておく必要があります。

パラメタインタフェース領域のデータ項目に関する注意事項

(a)レコード単位アクセスモード

レコード単位アクセスモードには，相対ファイルに対するCBLREADサービスルーチンの実行が，順アクセスか，乱アクセスかを指定します。順ファイルに対してこの項目を指定した場合，指定は無視され，常に順アクセスとなります。

レコード単位アクセスモードに指定する値による動作の違いを，次に示します。

指定する値
レコード単位
アクセスモード
指定可能な
ファイルアクセスモード
（CBLOPENサービスルーチン実行時の指定）
動作

CBLPARM_ACCESS_NEXT
順アクセス

順アクセス法

動的アクセス法

次のどちらかのレコードを読み込む。

直前のCBLREADサービスルーチンによって位置づけられたレコードの，次のレコード

直前のCBLSTARTサービスルーチンによって位置づけられたレコード

ただし，CBLOPENサービスルーチンを実行した直後の場合は，有効な先頭レコードを読み込む。

CBLPARM_ACCESS_KEY
乱アクセス

乱アクセス法

動的アクセス法

相対レコード番号キーに指定した番号のレコードを読み込む。

レコードのアクセスモードが順アクセスの場合，直前のCBLREADサービスルーチン，またはCBLSTARTサービスルーチンがエラー（パラメタエラーを含む）になると，それに続くCBLREADサービスルーチンもエラーになります。

(b)キー比較条件

キー比較条件には，相対ファイルに対するCBLSTARTサービスルーチンで，位置づける相対レコード番号とキーの比較条件を指定します。キー比較条件の指定値と意味を，次に示します。

指定する値
比較条件
対応するCOBOL START文のKEY指定
位置づけるレコード（以下の条件を満たさない時はエラー）

CBLPARM_KEY_EQUAL
キーの値と等しい
KEY IS EQUAL TO
（KEY IS = TO）
相対レコード番号がキーと等しいレコード

CBLPARM_KEY_GREAT
キーの値より大きい
KEY IS GREATER THAN
（KEY IS > ）
相対レコード番号がキーの値より大きい最初のレコード

CBLPARM_KEY_NOTLESS
キーの値より小さくない
KEY IS NOT LESS THAN
（KEY IS NOT < ）
相対レコード番号がキーの値より小さくない最初のレコード

CBLPARM_KEY_GREATEQ
キーの値より大きいか，または等しい
KEY IS GREATER THAN
OR EQUAL TO
（KEY IS >= ）
相対レコード番号がキーの値より大きいか，または等しい最初のレコード

13.4　リンクの指定

COBOL入出力サービスルーチンを使用したプログラムをリンクする場合，-lcbl2kflまたは-lcbl2kfl64の指定が必要です。指定形式を次に示します。

形式

UNIX32，Linux(IPF64)の場合

cc  -Iyyy  xxx.c  -L/opt/HILNGcbl2k/lib -lcbl2k -lcbl2kml -lcbl2kfl… -lm

HP-UX(IPF64)の場合

cc  -Iyyy  xxx.c  +DD64 -L/opt/HILNGcbl2k64/lib -lcbl2k -lcbl2kml -lcbl2kfl… -lm

Linux(x64)の場合

cc  -Iyyy  xxx.c  -L/opt/HILNGcbl2k64/lib -lcbl2k -lcbl2kml -lcbl2kfl… -lm

AIX(64)の場合

cc  -Iyyy  xxx.c  -q64 -L/opt/HILNGcbl2k64/lib -lcbl2k64 -lcbl2kml64 -lcbl2kfl64… -lm

xxx.c

COBOL入出力サービスルーチンを使用するCプログラムのファイル名

yyy

COBOLインクルードファイルがあるディレクトリ

また，COBOL入出力サービスルーチンを使用したCプログラムを，COBOLプログラムとともにccbl2002コマンドでリンクすることもできます。指定形式を次に示します。

形式

UNIX32，HP-UX(IPF64)，Linux(IPF64)，Linux(x64)の場合

ccbl2002 -Main,System zzz.cbl xxx.o -lcbl2kfl

AIX(64)の場合

ccbl2002 -Main,System zzz.cbl xxx.o -lcbl2kfl64

xxx.o

COBOL入出力サービスルーチンを使用するCプログラムのオブジェクトファイル名

zzz.cbl

COBOLソースファイル

COBOL入出力サービスルーチンライブラリは，共用ライブラリで提供されています。次に，共用ライブラリを示します。

システム
共用ライブラリ

HP-UX(IPF)
HP-UX(IPF64)
Linux(x86)
Linux(x64)
Linux(IPF64)
Solaris(SPARC)
libcbl2kfl.so

AIX(32)
libcbl2kfl.a

AIX(64)
libcbl2kfl64.a

13.5　デバッグ情報の取得

COBOL入出力サービスルーチンでエラーが発生した場合，エラーメッセージは出力されません。その代わり，管理情報インタフェース領域にメッセージ番号や入出力状態などのエラー情報が出力されます。ユーザは，これらの情報や，メッセージ番号が指すエラーメッセージの内容から，エラーの内容を知ることができます。

また，デバッグ情報として，インタフェース領域の内容をダンプ形式で出力できます。

ここでは，これらのデバッグ情報の取得方法，および利用方法について説明します。

＜この節の構成＞

13.5.1　COBOL入出力サービスルーチンで出力されるエラーメッセージ番号

13.5.2　インタフェース領域のダンプ出力

13.5.1　COBOL入出力サービスルーチンで出力されるエラーメッセージ番号

COBOL入出力サービスルーチンでエラーが発生したときだけに出力されるメッセージ番号と，その対処方法を次の表に示します。次の表にないメッセージ番号が出力された場合は，マニュアル「COBOL2002　メッセージ」の実行時のメッセージの説明を参照してください。

表13-7　COBOL入出力サービスルーチンで出力されるメッセージ番号

メッセージ番号
エラーの内容
対処

順ファイル
相対ファイル

3701
3801
管理情報インタフェース領域の指定に誤りがあります。
管理情報インタフェース領域中のCOBOLエラー詳細情報を基に，指定値を見直す。※¹

3702
3802
パラメタインタフェース領域の指定に誤りがあります。
管理情報インタフェース領域中のCOBOLエラー詳細情報を基に，指定値を見直す。※¹

3703
3803
ファイルの属性情報とプログラムの指定との間に矛盾があります。
管理情報インタフェース領域中のCOBOLエラー詳細情報を基に，ファイル属性情報とプログラムの指定を一致するように変更する。※²

3704
3804
入出力エラーが発生しました。
管理情報インタフェース領域中のシステムコール番号とシステムエラーコードを基に，原因を調査する。

3705
3805
デバッグ情報の出力中に入出力エラーが発生しました。
管理情報インタフェース領域中のシステムコール番号とシステムエラーコードを基に，原因を調査する。サービスルーチンの処理自体は正常終了している。

3706
3806
デバッグ情報の出力中に入出力エラーが発生しました。サービスルーチンでもエラーが発生しています。
管理情報インタフェース領域中のシステムコール番号とシステムエラーコードを基に，原因を調査する。
管理情報インタフェース領域のエラー情報は，デバッグ情報出力中に発生したエラーに関する情報である。
サービスルーチンの処理自体でもエラーが発生しているため，デバッグ情報出力中のエラーを対策のあと，再実行して，サービスルーチンのエラー原因を調査する。

3707
3807
メッセージ番号が不正です。
関数情報のエラーリターン後に管理情報インタフェース領域が更新された可能性がある。入出力サービスルーチンの発行順序を見直す。

3751
3851
メモリが不足しました。
不要な資源を削除して再実行する。

3752
指定されたファイルは取り扱えません。
COBOL入出力サービスルーチンで取り扱えるのは，COBOL2002で作成した順可変長レコード形式，または相対ファイルである。
また，ファイルが破壊されたおそれもある。指定したファイルを見直す。

－
3861
CBLSTARTには乱アクセス以外で相対ファイルだけが指定できます。
エラーの内容に従いプログラムを見直す。

－
3862
NEXT指定のCBLREADは，相対ファイルの動的アクセス，および順アクセスファイルに指定できます。
エラーの内容に従いプログラムを見直す。

3763
3863
KEY指定のCBLREADは，順アクセス以外で相対ファイルだけが指定できます。
エラーの内容に従いプログラムを見直す。

3764
－
CBLDELETEは相対ファイルだけが指定できます。
エラーの内容に従いプログラムを見直す。

3765
－
順ファイルにはLOCK MODE MANUALの指定はできません。
エラーの内容に従いプログラムを見直す。

－
3866
EXTEND指定のCBLOPENは，順アクセスのファイルだけが指定できます。
エラーの内容に従いプログラムを見直す。

3767
3867
ファイルが開かれていないためCBLWDISKサービスルーチンが実行できません。
開かれているファイルに対してCBLWDISKサービスルーチンを実行するようにプログラムを修正して再実行する。

（凡例）

－：該当するメッセージ番号はない

注

順ファイルのエラーに対しては3700番台のメッセージ番号が，相対ファイルのエラーに対しては3800番台のメッセージ番号が，それぞれ設定されます。ただし，エラー発生時にファイル編成が特定できない場合は，3700番台のメッセージ番号が設定されます。

注※1

各インタフェース領域で複数のデータ項目の指定値に誤りがある場合，COBOLエラー詳細情報には，最初に誤りが発見されたデータ項目名に該当する値が設定されます。

注※2

ファイル属性エラーが発生したときのCOBOLエラー詳細情報には，次に示す順で最初に発見されたエラー項目に該当する値が設定されます。

ファイルフォーマット
・オープンするファイルに，COBOL2002が定めるヘッダ情報がない。
・COBOL2002で作成した順可変長ファイル，または相対ファイルでない。または，ファイルが破壊されている。

ファイル編成／レコード形式

最大レコード長

最小レコード長

13.5.2　インタフェース領域のダンプ出力

COBOL入出力サービスルーチンが使用する次の三つのインタフェース領域の内容を，デバッグ情報としてダンプ形式で出力できます。

管理情報インタフェース領域

パラメタインタフェース領域

入出力レコード領域

ここでは，これらのデバッグ情報の出力方法について説明します。

＜この項の構成＞

(1)　出力先ファイル名の指定

(2)　出力タイミングの指定

(3)　出力の対象となる領域

(4)　出力形式

(1)　出力先ファイル名の指定

デバッグ情報を出力するときは，環境変数CBL_FLSRVDUMPに出力先となるファイル名を指定します。次に，環境変数CBL_FLSRVDUMPの指定方法を示します。

形式

CBL_FLSRVDUMP=出力先ファイル名

出力先ファイル名

デバッグ情報を出力するファイル名を絶対パスで指定します。

規則

環境変数CBL_FLSRVDUMPに指定したファイルがない場合，新規にファイルが作成されます。すでにファイルがある場合は，ファイルの最後にデバッグ情報が追加されます。

環境変数CBL_FLSRVDUMPに指定したパスがない場合，実行時エラーとなります。

環境変数CBL_FLSRVDUMPを指定しない場合，または値を指定しない場合は，デバッグ情報が出力されません。

(2)　出力タイミングの指定

デバッグ情報は，各入出力サービスルーチンの実行前，実行後，またはその両方のときに出力できます。管理情報インタフェース領域のデバッグ情報出力指示に値を指定すると，どのタイミングでデバッグ情報を出力するかを指定できます。次に，デバッグ情報出力指示に指定する値と，デバッグ情報が出力されるタイミングの関係を示します。

デバッグ情報出力指示の値 | デバッグ情報が出力されるタイミング
CBLCOM_DBG_NO | デバッグ情報は出力されない
CBLCOM_DBG_BEF | 各入出力サービスルーチンの実行前
CBLCOM_DBG_AFT | 各入出力サービスルーチンの実行後
CBLCOM_DBG_BEFAFT | 各入出力サービスルーチン実行の前後両方

規則

デバッグ情報出力指示の値は，ファイルを開いている間でも任意に変更できます。これによって，入出力サービスルーチンごとに異なるタイミングでデバッグ情報を出力できます。

COBOL入出力サービスルーチンでパラメタエラーが発生した場合，サービスルーチン実行後にはデバッグ情報が出力されません。

デバッグ情報出力指示の値は，COBOL2002によって変更されません。

(3)　出力の対象となる領域

デバッグ情報へ出力されるインタフェース領域の種類は，実行するCOBOL入出力サービスルーチンの種類によって異なります。サービスルーチンごとに出力されるデバッグ情報の種類を，次に示します。

COBOL入出力
サービスルーチン
出力される領域

管理情報インタフェース領域
パラメタインタフェース領域
読み込み
バッファ※¹
書き出し
バッファ※¹

CBLOPEN
○
○
×
×

CBLCLOSE
○
×
×
×

CBLREAD
○
○
○※²
×

CBLWRITE
○
○
×
○

CBLREWRITE
○
○
×
○

CBLUNLOCK
○
×
×
×

CBLDELETE
○
○
×
×

CBLSTART
○
○
×
×

CBLWDISK
○
×
×
×

（凡例）

○：デバッグ情報に出力される

×：デバッグ情報に出力されない

注※1

バッファ領域は，実際に入出力した長さでダンプ出力されます。

注※2

CBLREADサービスルーチンの実行前には出力されません。

(4)　出力形式

デバッグ情報には，それぞれの先頭の領域を0とした相対的な位置と内容が，ダンプ形式で出力されます。

デバッグ情報の出力例を，次に示します。

注※1

CBLCOMFLに続くダンプリストは，管理情報インタフェース領域を表しています。

注※2

CBLPARMFLに続くダンプリストは，パラメタインタフェース領域を表しています。

13.6　COBOL入出力サービスルーチンでのディスク書き込み保証

COBOL2002のファイル入出力機能と同様に，COBOL入出力サービスルーチンでも，ファイルのクローズ時，または書き込み時に，ディスクへの書き込み保証が適用された入出力処理ができます。

ファイルのディスクへの書き込み保証は，次のCOBOL入出力サービスルーチンの呼び出し完了時に適用されます。

ファイルクローズ時の保証

CBLCLOSEサービスルーチン

ファイル書き込み時の保証

CBLWRITEサービスルーチン

CBLREWRITEサービスルーチン

CBLDELETEサービスルーチン

また，CBLWDISKサービスルーチンを呼び出すと，その時点でのディスクへの書き込み保証が適用されます。

COBOL2002のファイル入出力機能でのディスク書き込み保証については，「14.1　ファイルのディスク書き込み保証」を参照してください。

COBOL入出力サービスルーチンでは，次の3種類の方法でファイルのディスクへの書き込みを保証します。

ファイルごとに指定する

プロセス内のすべてのファイルに対して指定する

CBLWDISKサービスルーチンを呼び出す

＜この節の構成＞

13.6.1　ファイルごとに指定する方法

13.6.2　プロセス内のすべてのファイルに対して指定する方法

13.6.3　CBLWDISKサービスルーチンを呼び出して保証する方法

13.6.4　注意事項

13.6.1　ファイルごとに指定する方法

ファイルごとにディスクへの書き込み保証を適用する場合は，書き込み保証を適用したいファイルに対応する管理情報インタフェース領域中のディスク書き込みオプションを指定します。ディスク書き込みオプションに指定できる値と，その意味を次に示します。

マクロ名 | 値 | 意味
CBLCOM_ENVFSYNC | 0 | 環境変数CBLFSYNCの指定に従う。環境変数CBLFSYNCの詳細は，「14.1　ファイルのディスク書き込み保証」を参照のこと。
CBLCOM_NOFSYNC | 1 | クローズ時のディスクへの書き込み保証が適用されない。
CBLCOM_FSYNC | 2 | クローズ時のディスクへの書き込み保証が適用される。
CBLCOM_WDISK | 3 | 書き込み時のディスクへの書き込み保証が適用される。

13.6.2　プロセス内のすべてのファイルに対して指定する方法

クローズ時のディスクへの書き込み保証は，プロセス内のすべてのファイルに対して指定できます。指定方法を次に示します。

環境変数CBLFSYNCにYESを指定する。
環境変数CBLFSYNCの詳細は，「14.1　ファイルのディスク書き込み保証」を参照してください。

すべてのファイルに対応する管理情報インタフェース領域のディスク書き込みオプションに，「CBLCOM_ENVFSYNC」または「CBLCOM_FSYNC」を指定する。
管理情報インタフェース領域については，「13.3.2　インタフェース領域の形式」を参照してください。

注意事項

ディスク書き込みオプションにCBLCOM_NOFSYNCを指定したファイルは，ディスクへの書き込み保証が適用されません。

13.6.3　CBLWDISKサービスルーチンを呼び出して保証する方法

CBLWDISKサービスルーチンを呼び出すと，指定されたファイルに対して，サービスルーチン呼び出し時までに出力したデータのディスクへの書き込み保証が適用されます。

CBLWDISKサービスルーチンの呼び出し方法については，「13.3　COBOL入出力サービスルーチンのインタフェース」を参照してください。

また，次のサービスルーチンによってファイルの書き込みが発生したときに，ディスクへの書き込み保証を適用する場合は，ファイルに対応する管理情報インタフェース領域のディスク書き込みオプションに，「CBLCOM_WDISK」を指定してください。

CBLWRITEサービスルーチン

CBLREWRITEサービスルーチン

CBLDELETEサービスルーチン

管理情報インタフェース領域については，「13.3.2　インタフェース領域の形式」を参照してください。

13.6.4　注意事項

COBOL入出力サービスルーチンでディスク書き込み保証を使用する場合，次の点に注意してください。

ディスクへの書き込み保証が適用されるサービスルーチンの呼び出しが完了する前にシステムダウンが発生したときは，データのディスクへの書き込み保証は適用されません。

管理情報インタフェース領域のディスク書き込みオプションに指定した値は，CBLOPENサービスルーチンの呼び出し時だけチェックされます。

13.7　COBOL入出力サービスルーチンでのラージファイル入出力機能

ファイル入出力機能の入出力文と同様に，COBOL入出力サービスルーチンでもラージファイル入出力機能を使用できます。ラージファイル入出力機能は，ファイルサイズが2GB以上のファイル（ラージファイル）に対して入出力できる機能です。ファイル入出力機能のラージファイル入出力機能の詳細は，「6.10　ラージファイル入出力機能」を参照してください。

＜この節の構成＞

13.7.1　ラージファイル入出力機能の指定方法

13.7.2　管理情報インタフェース領域の指定

13.7.3　注意事項

13.7.1　ラージファイル入出力機能の指定方法

COBOL入出力サービスルーチンでのラージファイル入出力機能は，ファイル編成が順編成ファイルのときに有効になります。

COBOL入出力サービスルーチンにラージファイル入出力機能を適用するには，次の方法があります。

＜この項の構成＞

(1)　ファイル単位に指定する方法

(2)　実行単位中のすべてのファイルに指定する方法

(3)　環境変数CBLLARGEFILEとラージファイル対応オプションの組み合わせ

(1)　ファイル単位に指定する方法

ファイルごとにラージファイル入出力機能を適用するには，管理情報インタフェース領域のラージファイル対応オプションにCBLCOM_LARGEFILEを指定します。

環境変数CBLLARGEFILEにYESを指定したとき，ラージファイル入出力機能を適用しないファイルに対しては，CBLCOM_NOLARGEFILEを指定してください。

(2)　実行単位中のすべてのファイルに指定する方法

実行単位中のすべてのファイルにラージファイル入出力機能を適用するには，次の方法があります。

環境変数CBLLARGEFILEにYESを指定する。この場合，管理情報インタフェース領域のラージファイル対応オプションには，CBLCOM_ENVLARGEFILEを指定する。

すべてのファイルに対して，管理情報インタフェース領域のラージファイル対応オプションにCBLCOM_LARGEFILEを指定する。

(3)　環境変数CBLLARGEFILEとラージファイル対応オプションの組み合わせ

環境変数CBLLARGEFILEと管理情報インタフェース領域のラージファイル対応オプションの組み合わせを次の表に示します。

表13-8　環境変数CBLLARGEFILEとラージファイル対応オプションの組み合わせ

ラージファイル対応オプション | 環境変数CBLLARGEFILE
YES | 指定なし
CBLCOM_ENVLARGEFILE | ○ | ×
CBLCOM_NOLARGEFILE | × | ×
CBLCOM_LARGEFILE | ○ | ○

（凡例）

○：ラージファイル入出力機能を使用する。

×：ラージファイル入出力機能を使用しない。

13.7.2　管理情報インタフェース領域の指定

ラージファイル入出力機能を適用するかどうかをファイル単位に指定したい場合，管理情報インタフェース領域のラージファイル対応オプションを指定します。ラージファイル対応オプションについては，「13.3.2　インタフェース領域の形式」を参照してください。

ラージファイル対応オプションに不正な値を指定してCBLOPENサービスルーチンを呼び出した場合，サービスルーチンはエラーを返します。このとき，管理情報インタフェース領域のCOBOLメッセージ番号には「3701」，COBOLエラー詳細情報には「12」が設定されます。

13.7.3　注意事項

相対編成ファイルは，ラージファイル入出力機能には対応していません。

ラージファイル入出力機能を使用した場合，管理情報インタフェース領域のファイルロックモードの指定や，パラメタインタフェース領域のWITH LOCK指定は無効となり，ファイル共用はできません。

13.8　COBOL入出力サービスルーチンの使用例

COBOL入出力サービスルーチンの使用例を，次に示します。

（例1）サービスルーチンを使ってファイルを読み込むCプログラム

  :
#include "CBL85fl.h"   /* COBOL提供ヘッダファイルの取り込み */
  :
CBLCOMFL   com ;         /* 管理情報インタフェース領域 */
CBLPARMFL  parm ;        /* パラメタインタフェース領域 */
char  filename[100] ;    /* ファイル名称 */
int   end_flg ;

memset(&com, 0x00, sizeof(CBLCOMFL)) ; /* テーブル0クリア */
memset(&parm, 0x00, sizeof(CBLPARMFL)) ;
/* OPENパラメタを設定する */
strcpy(filename, "/tmp/outfile") ;
com.cblcom_pathname = filename ;
com.cblcom_flopt    = CBLCOM_NOCHK ;
                                   /*属性チェックをしない*/
com.cblcom_openmode = CBLCOM_OPEN_INPUT ;
                                   /*OPENモードはINPUT*/
parm.cblparm_lock   = CBLPARM_NOLOCK ;     /*施錠なし*/
if (CBLOPEN(&com, &parm) != 0) {
                              /*CBLOPENサービスルーチン実行*/
ERROUT(&com) ;          /*エラー情報出力用サブルーチン呼び出し*/
return(-1) ;
}
if (memcmp(com.cblcom_form, "SAMV", 4) != 0) {
  printf("ファイルはCOBOL順可変長形式ではない。¥n") ;
  return(-1) ;
}
/* READパラメタを設定する */
parm.cblparm_lock = CBLPARM_NOLOCK ;        /*施錠なし*/
/* OPENのリターン情報に従い入出力バッファ取得 */
if ((parm.cblparm_read_buf = malloc(com.cblcom_maxrec))
     == NULL) {
  :        /* 必要なメモリが取得できない場合のエラー処理 */
}
end_flg = 0 ;
while(end_flg == 0) {              /*レコード終了までループ*/
if (CBLREAD(&com , &parm) == 0) {
                              /*CBLREADサービスルーチン実行*/
  :                                /* READ成功時の処理 */
} else {
  end_flg = 1 ;                /*読み込み終了フラグ　オン */
    if (com.cblcom_fs == 10) {  /*入出力状態値10:ファイル終了*/
      :                        /* ファイル終了時の処理 */
  } else {
     ERROUT(&com) ;             /*エラー処理*/
    }
 }
}
/* 終了処理 */
if (CBLCLOSE(&com, &parm) != 0) {
                            /*CBLCLOSEサービスルーチン実行*/
ERROUT(&com) ;
}

（例2）エラー情報を出力するC副プログラム

extern void ERROUT(p1)
CBLCOMFL *p1 ;
{
  if ((p1->cblcom_msgno >= 3701)
       && (p1->cblcom_msgno <= 3703)) {
    printf("パラメタエラー(詳細情報番号=%d)¥n",
                  p1->cblcom_cbldetail) ;
  } else {
    printf("メッセージ番号=%d¥n",p1->cblcom_msgno) ;
    if (p1->cblcom_sysinf == CBLCOM_ERR_SYSTEM) {
       /* システムエラー情報がある時 */
       printf("システムコール番号=%dエラーコード=%d¥n",
                  p1->cblcom_funcno, p1->cblcom_errno) ;
   }
 }
}

13.9　注意事項

ここでは，COBOL入出力サービスルーチンを使用するときの注意事項について説明します。

各インタフェース領域中のシステムが使用する領域，および予備領域は，インタフェース領域を使用する最初のCBLOPENサービスルーチンを実行する前に，すべてNULL（X'00'）を指定して内容をクリアしてください。また，クリアしたあとは，これらの領域を更新しないでください。領域をクリアしなかった場合，またはクリア後に更新した場合，動作は保証しません。

管理情報インタフェース領域に出力されるエラー情報は，サービスルーチンがエラーを返した直後だけ，内容を保証します。

CBLOPENサービスルーチンの呼び出しが成功したあとに処理を中断する場合，必ずCBLCLOSEサービスルーチンを呼び出すようにしてください。CBLCLOSEサービスルーチンを呼び出さないで処理を中断した場合，領域の解放やレコード施錠の解除がされません。

14.　ファイルのディスク書き込み保証

COBOL2002には，システムダウンなどが発生したときにデータのディスクへの書き込み漏れが発生しないように，ファイルのディスク書き込み保証機能があります。この章では，ファイルのディスク書き込み保証機能について説明します。

＜この章の構成＞

14.1　ファイルのディスク書き込み保証

14.1　ファイルのディスク書き込み保証

COBOL2002の入出力処理では，入出力文の実行とデータのディスクへの書き込みが非同期に処理されます。そのため，入出力文の実行直後にシステムダウンが発生した場合，OSが管理するバッファ内のデータが，ディスクに書き込まれないことがあります。

このようなディスクへの書き込み漏れを防ぐため，COBOL2002には次のようなファイルのディスク書き込みを保証する機能があります。

ファイルクローズ時の保証

プログラムの終了時，またはCLOSE文の実行終了時に，ファイルのディスク書き込みを保証する機能です。

ファイル書き込み時の保証

WRITE文，REWRITE文，またはDELETE文の実行終了時に，ファイルのディスク書き込みを保証する機能です。

ここでは，ファイルのディスク書き込み保証機能について説明します。

＜この節の構成＞

14.1.1　対象となるファイル

14.1.2　ファイルクローズ時のディスク書き込み保証の指定方法

14.1.3　ファイル書き込み時のディスク書き込み保証の指定方法

14.1.4　整列併合機能の出力ファイルに対するディスク書き込み保証

14.1.5　注意事項

14.1.1　対象となるファイル

ディスクへの書き込み保証の対象となるファイルを次に示します。

表14-1　ディスクへの書き込み保証の対象となるファイル

ファイル | ファイルクローズ時の保証 | ファイル書き込み時の保証
順編成ファイル | ○ | ○
相対編成ファイル | ○ | ○
ISAMによる索引編成ファイル | ○※ | ○
HiRDBによる索引編成ファイル | × | ×
テキスト編成ファイル | ○ | ×
CSV編成ファイル | ○ | ×

（凡例）

○：保証の対象となる

×：保証の対象とならない

注※

AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効です。

HiRDBによる索引編成ファイルのディスク書き込み保証

HiRDBによる索引編成ファイルのディスク書き込み保証は，HiRDBの仕様に従います。詳細は，「HiRDBの解説マニュアル」を参照してください。

なお，HiRDBによる索引編成ファイルでは，COMMIT文の実行後は，ファイルのディスクへの書き込みを保証します。

COBOL入出力サービスルーチン使用時のディスク書き込み保証

COBOL入出力サービスルーチン使用時のディスク書き込み保証については，「13.6　COBOL入出力サービスルーチンでのディスク書き込み保証」を参照してください。

バイトストリーム入出力サービスルーチン使用時のディスク書き込み保証

バイトストリーム入出力サービスルーチン使用時のディスク書き込み保証については，「15.5　バイトストリーム入出力サービスルーチンでのディスク書き込み保証機能（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）」を参照してください。

14.1.2　ファイルクローズ時のディスク書き込み保証の指定方法

ファイルクローズ時のディスク書き込み保証は，「14.1.1　対象となるファイル」で示すファイルに対して，ファイル別に指定する方法と，プロセス内のすべてのファイルに対して指定する方法があります。

＜この項の構成＞

(1)　ファイル別に指定する方法

(2)　プロセス内のすべてのファイルを指定する方法

(3)　注意事項

(1)　ファイル別に指定する方法

形式

CBLD_ファイル名=｛ FSYNC ｜ NOFSYNC ｝

機能

環境変数CBLD_ファイル名にFSYNCを指定すると，COBOLプログラムの環境部のファイル管理記述項で指定したファイル名のファイルに対してクローズ時のディスクへの書き込み保証が適用されます。

NOFSYNCを指定した場合は，ディスクへの書き込み保証が適用されません。

(2)　プロセス内のすべてのファイルを指定する方法

(a)　順編成ファイル，相対編成ファイル，テキスト編成ファイル，CSV編成ファイル

形式

CBLFSYNC=YES

機能

環境変数CBLFSYNCにYESを指定すると，プロセス内のすべてのファイルに対してクローズ時のディスクへの書き込み保証が適用されます。この環境変数の指定をしなかった場合，およびYES以外の値を指定した場合は，クローズ時のディスクへの書き込み保証は適用されません。

また，環境変数CBLD_ファイル名にNOFSYNCが指定されたファイルに対しては，環境変数CBLFSYNCの指定は有効とならないため，クローズ時のディスクへの書き込み保証は適用されません。

(b)　ISAMによる索引編成ファイル（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

形式

CBLISAMFSYNC=YES

機能

環境変数CBLISAMFSYNCにYESを指定すると，プロセス内のすべてのISAMによる索引編成ファイルに対してクローズ時のディスクへの書き込み保証が適用されます。この環境変数の指定をしなかった場合，およびYES以外の値を指定した場合は，クローズ時のディスクへの書き込み保証は適用されません。

また，環境変数CBLD_ファイル名にNOFSYNCが指定されたファイルに対しては，環境変数CBLISAMFSYNCの指定は有効とならないため，クローズ時のディスクへの書き込み保証は適用されません。

(3)　注意事項

次の場合，ファイルのディスクへの書き込み保証は適用されません。

CLOSE文の動作が完了する前にシステムダウンが発生した場合

ファイルクローズ時のディスク書き込み保証が行なわれる前にシステムダウンが発生して，ディスクへ書き込まれなかった場合

14.1.3　ファイル書き込み時のディスク書き込み保証の指定方法

形式

CBLD_ファイル名=WDISK

機能

環境変数CBLD_ファイル名にWDISKを指定すると，COBOLプログラムの環境部のファイル管理記述項で指定したファイル名のうち，「14.1.1　対象となるファイル」で示すファイルに対して，書き込み時のディスクへの書き込み保証が適用されます。

注意事項

次の場合，ファイルのディスクへの書き込み保証は適用されません。

WRITE文，REWRITE文，DELETE文の動作が完了する前にシステムダウンが発生した場合

14.1.4　整列併合機能の出力ファイルに対するディスク書き込み保証

SORT文およびMERGE文で使用する出力用ファイルにディスク書き込み保証を適用する場合は，出力用ファイル名に対して環境変数CBLD_ファイル名にFSYNC，またはCBLD_ファイル名にWDISKを指定します。また，環境変数CBLFSYNCにYESを指定した場合は，プロセス内のすべてのファイルに対してディスク書き込み保証が有効となり，整列併合機能で使用する出力用ファイルにもクローズ時のディスクへの書き込み保証が適用されます。

ただし，出力用ファイルとして索引ファイルを指定した場合は，環境変数CBLD_ファイル名にWDISKを指定した場合だけにディスク書き込み保証が適用されます。

ディスク書き込み保証の対象ファイルについては，「14.1.1　対象となるファイル」を参照してください。

次に，COBOLプログラムとファイル別の環境変数の指定例を示します。

COBOLプログラムの指定例

      INPUT-OUTPUT SECTION.
      FILE-CONTROL.
           SELECT INFILE   ASSIGN SYS010.
           SELECT OUTFILE  ASSIGN SYS020.
           SELECT SORTFILE ASSIGN SYS001S.
         ：
      PROCEDURE DIVISION.
           SORT SORTFILE DESCENDING KEY SORT-KEY
                USING  INFILE
                GIVING OUTFILE.

環境変数の指定例

CBLD_OUTFILE=FSYNC

14.1.5　注意事項

環境変数CBLD_ファイル名のFSYNC／NOFSYNC／WDISKと，環境変数CBLFSYNCおよび環境変数CBLISAMFSYNCを同時に指定した場合，環境変数CBLD_ファイル名の指定が有効となります。このとき，環境変数CBLD_ファイル名を指定したファイルに対しては，環境変数CBLFSYNCおよび環境変数CBLISAMFSYNCの指定は無効となります。

環境変数CBLD_ファイル名にFSYNC／NOFSYNC／WDISKの指定がないファイルでは，環境変数CBLFSYNCおよび環境変数CBLISAMFSYNCの指定が有効となります。

環境変数の組み合わせと，保証するディスク書き込みについて次に示します。

環境変数CBLFSYNC
および環境変数CBLISAMFSYNC※
環境変数CBLD_ファイル名

FSYNC
NOFSYNC
WDISK
指定なし

YES
C
×
W
C

YES以外，または
環境変数指定なし
C
×
W
×

（凡例）

C：該当ファイルに対して，ファイルクローズ時のディスクへの書き込み保証を適用する

W：該当ファイルに対して，ファイル書き込み時のディスクへの書き込み保証を適用する

×：該当ファイルに対して，ファイルのディスクへの書き込み保証を適用しない

注※

AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効

標準出力（stdout）または標準エラー出力（stderr）は，ディスク書き込み保証機能の対象になりません。

15.　バイトストリーム入出力サービスルーチン（UNIX32，HP-UX(IPF64)，AIX(64)，Linux(x64)で有効）

バイトストリーム入出力サービスルーチンを使用すると，COBOLのレコード定義に依存しないで，Cプログラムなどで作成したバイナリファイルの読み書きができます。

この章では，バイトストリーム入出力サービスルーチンの使い方について説明します。

＜この章の構成＞

15.1　バイトストリーム入出力サービスルーチンの概要

15.2　バイトストリーム入出力サービスルーチンの説明

15.3　使用例

15.4　バイトストリーム入出力サービスルーチンでのラージファイル入出力機能（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

15.5　バイトストリーム入出力サービスルーチンでのディスク書き込み保証機能（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

15.1　バイトストリーム入出力サービスルーチンの概要

バイトストリーム入出力サービスルーチンを使用すると，COBOLのレコード定義に依存しないで，Cプログラムなどで作成したバイナリファイルの読み書きができます。バイトストリーム入出力サービスルーチンの一覧を「表15-1　バイトストリーム入出力サービスルーチンの一覧」に示します。

表15-1　バイトストリーム入出力サービスルーチンの一覧

サービスルーチンの名称 | 機能
CBLSTMCLOSE | バイトストリーム処理用に開かれたファイルを閉じる。
CBLSTMCREATE | バイトストリーム処理用の新しいファイルを作成する。
CBLSTMOPEN | バイトストリーム処理用に既存のファイルを開く。
CBLSTMREAD | ファイルからバイト列を読み込む。
CBLSTMWRITE | ファイルへバイト列を書き出す。

＜この節の構成＞

(1)　バイトストリーム入出力サービスルーチンを使用するときの注意事項

(1)　バイトストリーム入出力サービスルーチンを使用するときの注意事項

バイトストリーム入出力サービスルーチンが正常終了したかどうかは，RETURN-CODE特殊レジスタを参照して確認してください。

バイトストリーム入出力サービスルーチンは，COBOLプログラムだけから呼び出せます。COBOL以外のプログラムから呼び出されたときの動作は保証しません。

引数を誤って指定したり，省略したりしたときの動作は保証しません。

初期化属性プログラムが呼び出された場合，バイトストリームファイルの状態は初期化されません。また，CANCEL文を実行しても，バイトストリームファイルの状態は取り消されません。

ラージファイル入出力機能を使用すると，バイトストリーム入出力サービスルーチンで，ラージファイル（ファイルサイズが2GB以上のファイル）を取り扱えます。ラージファイル入出力機能を使用しない場合は，ラージファイルを取り扱えません。この場合に取り扱うことができる最大ファイルサイズは，2,147,483,135バイト以内です。これを超えたサイズのファイルを読み書きした場合，結果は保証しません。
バイトストリーム入出力サービスルーチンでのラージファイル入出力機能については，「15.4　バイトストリーム入出力サービスルーチンでのラージファイル入出力機能（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）」を参照してください。

バイトストリーム入出力サービスルーチンは，COBOLファイル入出力機能およびCOBOL入出力サービスルーチン※で作成した順固定長ファイルを読み書きできます。順可変長ファイルまたは順編成ファイル以外のファイル編成で作成されたファイルに対する読み書きはできません。

注※

COBOL入出力サービスルーチンとは，COBOLで作成した順ファイル，および相対ファイルにアクセスできるCBLOPENなどのサービスルーチンであり，バイトストリーム入出力サービスルーチンではありません。COBOL入出力サービスルーチンの詳細は，「13.　COBOL入出力サービスルーチン」を参照してください。

バイトストリーム入出力サービスルーチンを使用して，固定長レコードの繰り返しとして作成したファイルは，COBOLファイル入出力機能およびCOBOL入出力サービスルーチンで，順固定長ファイルとして読み書きできます。ただし，ファイルの内容は，ユーザ側で保証してください。また，順可変長ファイルまたは順編成ファイル以外のファイル編成としては読み書きできません。

バイトストリーム入出力サービスルーチンは，マルチスレッド環境下では実行できません。

バイトストリーム入出力サービスルーチン呼び出し時にエラーが発生したときは，COBOL実行時メッセージを出力し，RETURN-CODE特殊レジスタにエラーの要因別の値を設定します。出力される実行時メッセージについては，マニュアル「COBOL2002　メッセージ」を参照してください。

RETURN-CODE特殊レジスタに返す値

0：処理が正常終了した。

負の値：引数の指定に誤りがある。

正の値：上記以外で処理中にエラーが発生した。

表15-2　RETURN-CODE特殊レジスタに返す値とその内容

値
内容

0
処理が正常に終了した。

-1
OPENモードが1／2／3以外。

-2
排他モードが0／1／2／3以外。

-3
OPENモードが2のとき，排他モードが0または2でない。

-4
フラグが0／128以外（CBLSTMREADサービスルーチン），または0以外
（CBLSTMWRITEサービスルーチン）。

-5
相対位置に指定された値が最大値を超えている。

-6
読み書きするバイト数に指定された値が最大値を超えている。

-7
ファイル名の長さが最大値を超えている。

-8
ファイル名の指定がない。

-9
ファイルハンドルに指定された値が正しくない。

CBLSTMCREATEサービスルーチン，またはCBLSTMOPENサービスルーチンの場合，0でない。

CBLSTMREADサービスルーチン，CBLSTMWRITEサービスルーチン，またはCBLSTMCLOSEサービスルーチンの場合，CBLSTMCREATEサービスルーチン，またはCBLSTMOPENサービスルーチンで返される値ではない。

10
ファイルの終わりに達した。

30
ファイルの範囲を超えて読み込もうとした。

34
指定したファイルサイズが上限に達した。

35
ファイルが存在しないときCBLSTMOPENサービスルーチンを実行しようとした。

37
指定されたファイルではCBLSTMCREATEサービスルーチンまたはCBLSTMOPENサービスルーチンに書かれたモードは使用できない。

47
読み込み専用または読み込み／書き出しモードで開かれていないファイルに対してCBLSTMREADサービスルーチンを実行しようとした。

48
書き出しまたは読み込み／書き出しモードで開かれていないファイルに対してCBLSTMWRITEサービスルーチンを実行しようとした。

90
入出力エラーが発生した。

93
ファイルはすでに使用されている。

15.2　バイトストリーム入出力サービスルーチンの説明

＜この節の構成＞

15.2.1　CBLSTMCLOSE

15.2.2　CBLSTMCREATE

15.2.3　CBLSTMOPEN

15.2.4　CBLSTMREAD

15.2.5　CBLSTMWRITE

15.2.1　CBLSTMCLOSE

バイトストリーム処理用に開いたファイルを閉じます。

形式

CALL 'CBLSTMCLOSE' USING  引数1

規則

UNIX32の場合，引数1には，ファイルを開いたときに返されたファイルハンドルを4バイトの符号なし2進項目（COMP-X）で指定します。

HP-UX(IPF64)，AIX(64)，Linux(x64)の場合，引数1には，ファイルを開いたときに返されたファイルハンドルを8バイトの符号なし2進項目（COMP-X）で指定します。

STOP RUN文，またはCOBOL主プログラム中のGOBACK文が実行されるときに開いているバイトストリームファイルがあれば自動的に閉じられます。

ファイルが正常に閉じられた場合，引数1には0を返します。

15.2.2　CBLSTMCREATE

バイトストリーム処理用の新しいファイルを作成します。

形式

CALL 'CBLSTMCREATE' USING  引数1 引数2 引数3 引数4 引数5

規則

引数1には，作成するファイル名を英数字項目で指定します。領域の長さはファイル名の長さ＋1バイト以上が必要で，ファイル名は空白（X'20'），またはNULL文字（X'00'）で止める必要があります。

引数2には，OPENモードを1バイトの符号なし2進項目（COMP-X）で指定します。指定する値は次のとおりです。
1：読み込み専用
2：書き出し専用（排他モードに0または2を指定する必要がある）
3：読み込み／書き出し

引数3には，排他モードを1バイトの符号なし2進項目（COMP-X）で指定します。指定する値は次のとおりです。
0，2：読み込み／書き出しを禁止
1：書き出しを禁止
3：読み込み／書き出しを禁止しない

引数4には，1バイトの符号なし2進項目（COMP-X）で，0を指定します。
AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で，ファイルごとにラージファイル入出力機能を適用するには，ラージファイル対応オプションを指定します。指定する値は，「15.4.1　ラージファイル入出力機能の指定方法」を参照してください。

UNIX32の場合，引数5には，開いたファイルハンドルを受け取る領域を4バイトの符号なし2進項目（COMP-X）で指定します。CBLSTMCREATEサービスルーチン呼び出し時，引数5の値は0でなければなりません。

HP-UX(IPF64)，AIX(64)，Linux(x64)の場合，引数5には，開いたファイルハンドルを受け取る領域を8バイトの符号なし2進項目（COMP-X）で指定します。CBLSTMCREATEサービスルーチン呼び出し時，引数5の値は0でなければなりません。

注意事項

ファイルハンドルを受け取る領域の値は，そのファイルを閉じるまで必要です。この値を更新した場合の動作は保証しません。

空白を含むファイル名は指定できません。指定できるファイル名の最大長は255バイトです。

15.2.3　CBLSTMOPEN

バイトストリーム処理用に既存のファイルを開きます。

形式

CALL 'CBLSTMOPEN' USING  引数1 引数2 引数3 引数4 引数5

規則

引数1には，開くファイル名を英数字項目で指定します。領域の長さはファイル名の長さ＋1バイト以上必要で，ファイル名は空白（X'20'）またはNULL文字（X'00'）で止める必要があります。

引数2には，OPENモードを1バイトの符号なし2進項目（COMP-X）で指定します。指定する値は次のとおりです。
1：読み込み専用
2：書き出し専用（排他モードに0または2を指定する）
3：読み込み／書き出し

引数3には，排他モードを1バイトの符号なし2進項目（COMP-X）で指定します。指定する値は次のとおりです。
0，2：読み込み／書き出しを禁止
1：書き出しを禁止
3：読み込み／書き出しを禁止しない

引数4には，1バイトの符号なし2進項目（COMP-X）で，0を指定します。
AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で，ファイルごとにラージファイル入出力機能を適用するには，ラージファイル対応オプションを指定します。指定する値は，「15.4.1　ラージファイル入出力機能の指定方法」を参照してください。

UNIX32の場合，引数5には，開いたファイルハンドルを受け取る領域を4バイトの符号なし2進項目（COMP-X）で指定します。CBLSTMOPENサービスルーチン呼び出し時，引数5の値は0でなければなりません。

HP-UX(IPF64)，AIX(64)，Linux(x64)の場合，引数5には，開いたファイルハンドルを受け取る領域を8バイトの符号なし2進項目（COMP-X）で指定します。CBLSTMOPENサービスルーチン呼び出し時，引数5の値は0でなければなりません。

注意事項

ファイルハンドルを受け取る領域の値は，そのファイルを閉じるまで必要です。この値を更新した場合の動作は保証しません。

空白を含むファイル名は指定できません。指定できるファイル名の最大長は255バイトです。

15.2.4　CBLSTMREAD

ファイルからバイト列を読み込みます。

形式

CALL 'CBLSTMREAD' USING 引数1 引数2 引数3 引数4 引数5

規則

UNIX32の場合，引数1には，ファイルを開いたときに返されたファイルハンドルを4バイトの符号なし2進項目（COMP-X）で指定します。

HP-UX(IPF64)，AIX(64)，Linux(x64)の場合，引数1には，ファイルを開いたときに返されたファイルハンドルを8バイトの符号なし2進項目（COMP-X）で指定します。

引数2には，読み込む位置を8バイトの符号なし2進項目（COMP-X）で指定します。この値はファイルの先頭を0とした相対位置です。指定できる最大値は2,147,483,135です。ただし，引数4の値が128のときは，この領域に現在のファイルサイズが返されます。

引数3には，読み込むバイト数を4バイトの符号なし2進項目（COMP-X）で指定します。指定できる最大値は65,535です。0を指定した場合は読み込まれません。

引数4には，パラメタを1バイトの符号なし2進項目（COMP-X）で指定します。指定する値は次のとおりです。
0：標準の読み込み用。
128：現在のファイルサイズを引数2に指定した領域に返す。このとき，バイト列は読み込まれない。

引数5には，バイト列が読み込まれるバッファを英数字項目で指定します。バッファのサイズは読み込まれるバイト列の格納に十分な大きさを確保しておく必要があります。

注意事項

引数5に指定したバッファのうち，引数3で指定した読み込むバイト数を超える領域は，バイトストリーム入出力サービスルーチンでは更新されません。

15.2.5　CBLSTMWRITE

ファイルへバイト列を書き出します。

形式

CALL 'CBLSTMWRITE' USING 引数1 引数2 引数3 引数4 引数5

規則

UNIX32の場合，引数1には，ファイルを開いたときに返されたファイルハンドルを4バイトの符号なし2進項目（COMP-X）で指定します。

HP-UX(IPF64)，AIX(64)，Linux(x64)の場合，引数1には，ファイルを開いたときに返されたファイルハンドルを8バイトの符号なし2進項目（COMP-X）で指定します。

引数2には，書き出すファイル内の位置を8バイトの符号なし2進項目（COMP-X）で指定します。この値はファイルの先頭を0とした相対位置です。指定できる最大値は2,147,483,135です。

引数3には，書き出すバイト数を4バイトの符号なし2進項目（COMP-X）で指定します。指定できる最大値は65,535です。0を指定した場合は書き出されません。

引数4には，パラメタを1バイトの符号なし2進項目（COMP-X）で指定します。指定する値は次のとおりです。
0：標準の書き出し用

引数5には，書き出すバイト列を格納したバッファを英数字項目で指定します。

15.3　使用例

バイトストリーム入出力サービスルーチンの使用例を次に示します。

UNIX32の場合

 IDENTIFICATION DIVISION.
 PROGRAM-ID. SAMPLE1.
   ：
 DATA　DIVISION.
 WORKING-STORAGE SECTION.
   01 FILE-NAME      PIC X(255)      VALUE '/sample/file.dat'.
   01 RSV            PIC X     COMP-X VALUE 0.
   01 PARM           PIC X     COMP-X VALUE 0.
   01 OPEN-MODE      PIC X     COMP-X VALUE 2.
   01 EXCLUSION-MODE PIC X     COMP-X VALUE 0.
   01 HANDLE         PIC X(4)  COMP-X VALUE 0.
   01 DATA-START     PIC X(8)  COMP-X.
   01 DATA-LENGTH    PIC X(4)  COMP-X.
   01 BUF            PIC X(128)      VALUE ALL '*'.
       :
 PROCEDURE DIVISION.
* バイトストリーム処理用のファイルを書き出しモードで開く
     CALL 'CBLSTMOPEN'
           USING FILE-NAME OPEN-MODE EXCLUSION-MODE RSV HANDLE.
     IF (RETURN-CODE NOT = 0) THEN
* エラー処理
       :
     END-IF.
       :
* ファイルの先頭を0とする相対位置63(64バイト目)から
* 128バイトの長さのデータを書き出す
     MOVE 63  TO DATA-START.
     MOVE 128 TO DATA-LENGTH.
     CALL 'CBLSTMWRITE'
           USING HANDLE DATA-START DATA-LENGTH PARM BUF.
     IF (RETURN-CODE NOT = 0) THEN
* エラー処理
       :
     END-IF.
       :
* ファイルを閉じる
     CALL 'CBLSTMCLOSE' USING HANDLE.
     IF (RETURN-CODE NOT = 0) THEN
* エラー処理
       :
     END-IF.

     STOP RUN.

HP-UX(IPF64)，AIX(64)，Linux(x64)の場合

 IDENTIFICATION DIVISION.
 PROGRAM-ID. SAMPLE1.
   ：
 DATA　DIVISION.
 WORKING-STORAGE SECTION.
   01 FILE-NAME      PIC X(255)      VALUE '/sample/file.dat'.
   01 RSV            PIC X     COMP-X VALUE 0.
   01 PARM           PIC X     COMP-X VALUE 0.
   01 OPEN-MODE      PIC X     COMP-X VALUE 2.
   01 EXCLUSION-MODE PIC X     COMP-X VALUE 0.
   01 HANDLE         PIC X(8)  COMP-X VALUE 0.
   01 DATA-START     PIC X(8)  COMP-X.
   01 DATA-LENGTH    PIC X(4)  COMP-X.
   01 BUF            PIC X(128)      VALUE ALL '*'.
       :
 PROCEDURE DIVISION.
* バイトストリーム処理用のファイルを書き出しモードで開く
     CALL 'CBLSTMOPEN'
           USING FILE-NAME OPEN-MODE EXCLUSION-MODE RSV HANDLE.
     IF (RETURN-CODE NOT = 0) THEN
* エラー処理
       :
     END-IF.
       :
* ファイルの先頭を0とする相対位置63(64バイト目)から
* 128バイトの長さのデータを書き出す
     MOVE 63  TO DATA-START.
     MOVE 128 TO DATA-LENGTH.
     CALL 'CBLSTMWRITE'
           USING HANDLE DATA-START DATA-LENGTH PARM BUF.
     IF (RETURN-CODE NOT = 0) THEN
* エラー処理
       :
     END-IF.
       :
* ファイルを閉じる
     CALL 'CBLSTMCLOSE' USING HANDLE.
     IF (RETURN-CODE NOT = 0) THEN
* エラー処理
       :
     END-IF.

     STOP RUN.

15.4　バイトストリーム入出力サービスルーチンでのラージファイル入出力機能（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

ファイル入出力機能の入出力文と同様に，バイトストリーム入出力サービスルーチンでもラージファイル入出力機能を使用できます。ラージファイル入出力機能は，ファイルサイズが2GB以上のファイル（ラージファイル）に対して入出力できる機能です。ファイル入出力機能のラージファイル入出力機能の詳細は，「6.10　ラージファイル入出力機能」を参照してください。

＜この節の構成＞

15.4.1　ラージファイル入出力機能の指定方法

15.4.2　ラージファイル入出力機能を使用したときのバイトストリーム入出力サービスルーチン引数の上限値

15.4.3　注意事項

15.4.1　ラージファイル入出力機能の指定方法

バイトストリーム入出力サービスルーチンにラージファイル入出力機能を適用するには，次の方法があります。

＜この項の構成＞

(1)　実行単位中のすべてのファイルに指定する方法

(2)　ファイルごとに指定する方法

(3)　環境変数CBLSTMLARGEFILEとラージファイル対応オプションの組み合わせ

(1)　実行単位中のすべてのファイルに指定する方法

実行単位中のすべてのファイルにラージファイル入出力機能を適用するには，次の方法があります。

すべてのファイルに対して，ラージファイル対応オプションに1を指定します。ラージファイル対応オプションについては，「(2)　ファイルごとに指定する方法」を参照してください。

環境変数CBLSTMLARGEFILEにYESを指定します。この場合，ラージファイル対応オプションに0または1を指定します。
環境変数CBLSTMLARGEFILEについて，次に示します。

形式

CBLSTMLARGEFILE=YES

規則

ラージファイル対応オプションに0または1を指定したバイトストリーム入出力サービスルーチンによるファイルに対してはラージファイル入出力機能が適用されます。2を指定したバイトストリーム入出力サービスルーチンによるファイルに対してはラージファイル入出力機能が適用されません。

YES以外の値を指定した場合，バイトストリーム入出力サービスルーチンでのラージファイル入出力機能はラージファイル対応オプションの指定に従います。

(2)　ファイルごとに指定する方法

ファイルごとにラージファイル入出力機能を適用するには，次のバイトストリーム入出力サービスルーチンの引数4に，ラージファイル対応オプションを1バイトの符号なし2進項目(COMP-X)で指定します。

CBLSTMOPEN

CBLSTMCREATE

ラージファイル対応オプションに指定する値は次のとおりです。

0：環境変数CBLSTMLARGEFILEの指定に従う。

1：ラージファイル入出力機能を使用する。

2：ラージファイル入出力機能を使用しない。

適用したいファイルに対して，ラージファイル対応オプションに1を指定します。なお，環境変数CBLSTMLARGEFILEにYESを指定した環境でバイトストリーム入出力サービスルーチンでのラージファイル入出力機能を適用したくないファイルがある場合は，ラージファイル対応オプションに2を指定します。

(3)　環境変数CBLSTMLARGEFILEとラージファイル対応オプションの組み合わせ

環境変数CBLSTMLARGEFILEとラージファイル対応オプションの組み合わせを次の表に示します。

表15-3　環境変数CBLSTMLARGEFILEとラージファイル対応オプションの組み合わせ

ラージファイル対応オプション | 環境変数CBLSTMLARGEFILEの指定値
YES | 指定なし
0 | ○ | ×
1 | ○ | ○
2 | × | ×

（凡例）

○：バイトストリーム入出力サービスルーチンでラージファイル入出力機能を使用する。

×：バイトストリーム入出力サービスルーチンでラージファイル入出力機能を使用しない。

15.4.2　ラージファイル入出力機能を使用したときのバイトストリーム入出力サービスルーチン引数の上限値

ラージファイル入出力機能の使用によって拡張される，バイトストリーム入出力サービスルーチン引数の上限値を次の表に示します。

表15-4　ラージファイル入出力機能の使用によって拡張される上限値

バイトストリーム入出力サービスルーチン | 引数 | ラージファイル入出力機能を使用しない場合 | ラージファイル入出力機能を使用する場合
CBLSTMREAD | 引数2 | 指定できる最大値は2,147,483,135です。 | 2,147,483,136以上の値も指定できます。指定できる相対位置の最大値は，システムで作成できるファイルサイズに依存します。
引数3 | 指定できる最大値は65,535です。 | 指定できる最大値は1,073,741,823です。
CBLSTMWRITE | 引数2 | 指定できる最大値は2,147,483,135です。 | 2,147,483,136以上の値も指定できます。指定できる相対位置の最大値は，システムで作成できるファイルサイズに依存します。
引数3 | 指定できる最大値は65,535です。 | 指定できる最大値は1,073,741,823です。

15.4.3　注意事項

CBLSTMOPENサービスルーチンまたはCBLSTMCREATEサービスルーチンのラージファイル対応オプションに不正な値を指定して呼び出した場合，サービスルーチンはエラーになります。このとき，RETURN-CODE特殊レジスタに「-10」を返します。

ラージファイルを使用するには，ファイルシステムの属性がラージファイルに対応している必要があります。ファイルシステムの属性については，システムのマニュアルを参照してください。また，作成できるファイルサイズについては，システム資源の制限が設定されている場合があります。詳細は，システムのulimitコマンドなどについて記載されたマニュアルを参照してください。

次のどちらかに該当する場合，ラージファイル使用時の動作保証はしません。

ファイルシステムの属性がラージファイルに対応していない。

バイトストリーム入出力サービスルーチンでのラージファイル入出力機能を使用していない。

15.5　バイトストリーム入出力サービスルーチンでのディスク書き込み保証機能（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

バイトストリーム入出力サービスルーチンで，ファイルのクローズ時にディスクへの書き込み保証を適用するには，環境変数CBLSTMFSYNCにYESを指定します。

環境変数CBLSTMFSYNCについて，次に示します。

形式

CBLSTMFSYNC=YES

機能

環境変数CBLSTMFSYNCにYESを指定すると，プロセス内のすべてのバイトストリーム入出力サービスルーチンのファイルに対して，CBLSTMCLOSEサービスルーチンの呼び出し完了時にクローズ時のディスクへの書き込み保証が適用されます。この環境変数の指定をしなかった場合，およびYES以外の値を指定した場合は，クローズ時のディスクへの書き込み保証は適用されません。

注意事項

次の場合，ファイルのクローズ時にディスクへの書き込み保証は適用されません。

CBLSTMCLOSEサービスルーチンの動作が完了する前にシステムダウンが発生した。

ファイルクローズ時のディスク書き込み保証が行なわれる前にシステムダウンが発生して，ディスクへ書き込まれなかった。

16.　COBOLの実行単位

この章では，COBOLの実行単位について説明します。

＜この章の構成＞

16.1　実行単位の構成

16.2　引数の受け取りと外部スイッチ

16.3　COBOL実行単位の終了

16.1　実行単位の構成

＜この節の構成＞

(1)　実行単位とは

(2)　実行可能ファイルや共用ライブラリとは

(3)　実行単位と実行モジュールの例

(1)　実行単位とは

プログラムの実行時に，プログラムを構成する最も包括的な単位を実行単位といいます。実行単位は，一つの実行可能ファイル，または複数のお互いに連絡し合う実行可能ファイルや共用ライブラリから構成されている，一つの閉じた処理の単位です。

また，実行単位には，COBOL以外の言語で作成された実行可能ファイルや共用ライブラリ（Cプログラムなど）を含むことができます。

(2)　実行可能ファイルや共用ライブラリとは

実行可能ファイルや共用ライブラリは，翻訳単位（原始プログラム）をコンパイルして生成した結果です。実行可能ファイルや共用ライブラリは，それに含まれる関数，メソッド，およびプログラムの翻訳結果である一つ以上のオブジェクトファイルから構成されています。

(3)　実行単位と実行モジュールの例

COBOL原始プログラム「SAMPLE1.cbl」「SAMPLE2.cbl」をコンパイルした場合に，生成されるCOBOLプログラムの実行単位，実行モジュール，およびプログラムを次に示します。

（原始プログラム：SAMPLE1.cbl）

（原始プログラム：SAMPLE2.cbl）

（生成されるプログラムの構成）

一つの実行可能ファイルで構成される場合

複数の実行可能ファイルや共用ライブラリで構成される場合

16.2　引数の受け取りと外部スイッチ

実行単位は，ほかの実行単位と共通のデータファイルや通信文を処理したり，外部スイッチを設定・参照したりできます。また，実行単位は，プログラムの実行時にコマンド行に指定した引数を受け取れます。

ここでは，実行単位で受け取るコマンド行の引数の形式と受け取り方法，および外部スイッチの設定・参照方法について説明します。

＜この節の構成＞

16.2.1　コマンド行に指定する引数の形式

16.2.2　引数の受け取り方法（C言語インタフェースに従った形式の場合）

16.2.3　引数の受け取り方法（VOS3インタフェースに従った形式の場合）

16.2.4　外部スイッチ

16.2.1　コマンド行に指定する引数の形式

コマンド行から受け取る引数の形式には，C言語インタフェースに従った形式と，VOS3インタフェースに従った形式の2種類があります。

＜この項の構成＞

(1)　C言語インタフェースに従った形式

(2)　VOS3インタフェースに従った形式

(1)　C言語インタフェースに従った形式

C言語インタフェースに従った形式でコマンド行に指定した引数を受け取る場合，COBOLプログラムには，次の形式で引数が渡されます。

コマンド行

実行可能ファイル名△引数1△引数2△…

（凡例）

△：半角空白文字

COBOLプログラムに渡される引数の形式

（凡例）

△：半角空白文字

規則

C言語インタフェースに従った形式で引数を受け取るCOBOLプログラムは，コンパイル時に-Main,Systemオプションを指定する必要があります。

コマンド行に指定した実行可能ファイル名は，入力した文字列のまま取得されます。

なお，COBOLプログラムでC言語インタフェースに従った形式の引数を受け取るコーディング方法については，「16.2.2　引数の受け取り方法（C言語インタフェースに従った形式の場合）」を参照してください。

(2)　VOS3インタフェースに従った形式

VOS3インタフェースに従った形式でコマンド行に指定した引数を受け取る場合，COBOLプログラムには，次の形式で引数が渡されます。

コマンド行

実行可能ファイル名△引数

（凡例）

△：半角空白文字

COBOLプログラムに渡される引数の形式

規則

VOS3インタフェースに従った形式で引数を受け取るCOBOLプログラムは，コンパイル時に-Main,V3オプションを指定する必要があります。

なお，COBOLプログラムでVOS3インタフェースに従った形式の引数を受け取るコーディング方法については，「16.2.3　引数の受け取り方法（VOS3インタフェースに従った形式の場合）」を参照してください。

16.2.2　引数の受け取り方法（C言語インタフェースに従った形式の場合）

C言語インタフェースに従った形式でコマンド行に指定した引数を受け取る方法には，次の3種類があります。

アドレスデータ項目を使った引数の受け取り

サービスルーチンを使った引数の受け取り

ACCEPT／DISPLAY文を使った引数の受け取り

それぞれの受け取り方法について，次に示します。

＜この項の構成＞

(1)　アドレスデータ項目を使った引数の受け取り

(2)　サービスルーチンを使った引数の受け取り

(3)　ACCEPT／DISPLAY文を使った引数の受け取り

(1)　アドレスデータ項目を使った引数の受け取り

コマンド行から渡された引数の形式を連絡節（LINKAGE SECTION）で定義して，直接COBOLプログラムから参照する方法です。なお，引数の値は，アドレスとして渡されるため，アドレスデータ項目で参照する必要があります。

アドレスデータ項目を使った引数の受け取りの例

                   :
      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
                   :
      DATA DIVISION.
      WORKING-STORAGE SECTION.              …1.
      01 CMDN-G ADDRESSED BY A-CMDN.
        02 CMDN PIC X(8).
      01 OPT1-G ADDRESSED BY A-OPT1.
        02 OPT1 PIC X(8).
      01 OPT2-G ADDRESSED BY A-OPT2.
        02 OPT2 PIC X(8).
                   :
      LINKAGE SECTION.                      …2.
      01 ARGC PIC 9(9) USAGE COMP.
      01 ARGV.
        02 ARGV1 USAGE ADDRESS.
        02 ARGV2 USAGE ADDRESS.
        02 ARGV3 USAGE ADDRESS.
                   :
      PROCEDURE DIVISION USING              …3.
                         BY VALUE     ARGC
                         BY REFERENCE ARGV.
          COMPUTE A-CMDN = ARGV1.
          COMPUTE A-OPT1 = ARGV2.
          COMPUTE A-OPT2 = ARGV3.
                   :

作業場所節（WORKING-STORAGE SECTION）で，アドレスデータ項目で参照するデータを定義します。

連絡節（LINKAGE SECTION）で，受け取る引数の形式を定義します。

アドレスデータ項目のアドレス参照を解決し，引数の値をCOBOLのデータ項目に格納します。

規則

COBOLプログラムのコンパイル時に，-Main,Systemオプションを指定する必要があります。

連絡節で定義した受け取る引数の個数と，実際にコマンド行に入力した実行可能ファイル名，および引数の個数が一致していなければなりません。

受け取った引数の終端には，NULL文字（X'00'）が付加されています。COBOLプログラム中で引数の長さなどを求める場合は，このNULL文字の分を考慮する必要があります。

最初の引数を受け取るデータ項目は，「PIC 9(9) USAGE COMP」で定義する必要があります。

(2)　サービスルーチンを使った引数の受け取り

CBLARGCサービスルーチンおよびCBLARGVサービスルーチンを呼び出して，引数を受け取る方法です。

CBLARGCサービスルーチンでコマンド行の引数の個数を取得し，引数の個数だけCBLARGVサービスルーチンを繰り返し呼び出すことで，すべてのコマンド行の引数を取得できます。

サービスルーチンを使った引数の受け取りの例

                   :
      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 ARGC          PIC 9(9) USAGE COMP.  …1.
      01 ARGV.
        02 ARGV-LENGTH PIC 9(4) USAGE COMP.  …2.
        02 ARGV-AREA.                        …3.
          03 ARGV-AREA-C PIC X(1)
             OCCURS 1 TO 100 DEPENDING ON ARGV-LENGTH.
      77 CMD-NO        PIC 9(9) USAGE COMP.  …4.
                   :
      PROCEDURE DIVISION.
          CALL 'CBLARGC' USING BY REFERENCE ARGC.
          IF RETURN-CODE NOT = 0 THEN
            （CBLARGC異常時の処理）
          END-IF.
                   :
          MOVE 1 TO CMD-NO.
          PERFORM UNTIL ARGC = 0
            CALL 'CBLARGV' USING BY REFERENCE CMD-NO ARGV
            IF RETURN-CODE NOT = 0 THEN
             （CBLARGV異常時の処理）
            END-IF
           （CBLARGVで受け取った引数の処理）
            ADD 1 TO CMD-NO
            SUBTRACT 1 FROM ARGC
          END-PERFORM.
                   :

CBLARGCサービスルーチンで受け取る引数の個数の領域

CBLARGVサービスルーチンで受け取る引数の長さ

CBLARGVサービスルーチンで受け取る引数の文字列

CBLARGVサービスルーチンに引き渡す引数の順序

規則

COBOLプログラムのコンパイル時に，-Main,Systemオプションを指定する必要があります。

CBLARGCサービスルーチンで取得した値は，実行可能ファイル名と引数の個数の合計値となります。詳細については，「29.4.3　CBLARGC」を参照してください。

CBLARGVサービスルーチンで引数の文字列を受け取る領域は，100バイトで定義する必要があります。受け取ったコマンド行の引数が100バイト未満の場合，残りの領域は，空白文字で埋められます。また，受け取ったコマンド行の引数が100バイトを超える場合は，先頭から100バイトまでが有効となり，以降の文字列は切り捨てられます。詳細は，「29.4.4　CBLARGV」を参照してください。

(3)　ACCEPT／DISPLAY文を使った引数の受け取り

ACCEPT文やDISPLAY文を使って，コマンド行に指定された引数の個数や値を取得できます。詳細は，「10.3　コマンド行へのアクセス」を参照してください。

16.2.3　引数の受け取り方法（VOS3インタフェースに従った形式の場合）

VOS3インタフェースに従った形式でコマンド行に指定した引数を受け取る方法を，次に示します。

VOS3インタフェースに従った形式の場合の引数の受け取りの例

                   :
      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
      DATA DIVISION.
                   :
      LINKAGE SECTION.
      01 PARM-1.
        02 PLEN     PIC 9(4) USAGE COMP.  …1.
        02 PTAB OCCURS 10 TIMES.          …2.
          03 PTYPE  PIC X(3).
          03 PCOUNT PIC 9(3).
          03 PCOMMA PIC X(1).
      PROCEDURE DIVISION USING PARM-1.
          IF PLEN = 0 THEN
            （引数の指定がないときの処理）
          ELSE
            （引数の指定があるときの処理）
          END-IF.
                   :

受け取った引数の長さが格納されます。

受け取った引数の値が格納されます。
受け取った引数の長さがPTABの長さ未満の場合は，PLENに指定した長さ分のデータだけを保証します。また，受け取った値の長さがPLENに指定した長さを超える場合は，PTABの長さ分のデータだけを保証します。

規則

COBOLプログラムのコンパイル時に，-Main,V3オプションを指定する必要があります。

コマンド行中の実行可能ファイル名の後に指定した文字列だけが，引数として渡されます。引数が空白文字を含む場合は，引用符（"）で囲む必要があります。

受け取る引数の長さは100バイト以内でなければなりません。100バイトを超える文字列を指定した場合，先頭から100バイトまでが有効となります。

16.2.4　外部スイッチ

外部スイッチを使うと，プログラムの実行中に外部（別の実行単位）からプログラムを制御できます。ここでは，外部スイッチの使い方や値の設定方法について説明します。

＜この項の構成＞

(1)　外部スイッチとは

(2)　外部スイッチの設定方法

(3)　外部スイッチの参照方法

(1)　外部スイッチとは

COBOL2002では，外部からの制御情報を受け取るための0と1から構成される8けたの領域があります。この領域の各けたは，プログラムの特殊名段落で記述する外部スイッチ名（UPSI-0，UPSI-1，……，UPSI-7）に対応します。外部スイッチ名と領域上の位置との関係を次に示します。"1"になっている個所がそれぞれの外部スイッチに対応します。

表16-1　外部スイッチと位置との関係

外部スイッチ名 | 対応する位置
UPSI-0 | 10000000​
UPSI-1 | 01000000​
UPSI-2 | 00100000​
UPSI-3 | 00010000​
UPSI-4 | 00001000​
UPSI-5 | 00000100​
UPSI-6 | 00000010​
UPSI-7 | 00000001​

(2)　外部スイッチの設定方法

外部スイッチの状態の値は，環境変数CBLUPSIで設定します。ここでは，値の設定方法について説明します。

(a)　環境変数による外部スイッチの初期化

外部スイッチの状態の値は，プログラムの実行中に初めてスイッチ状態条件を参照したとき，環境変数CBLUPSIに指定された値の内容で初期化されます。

環境変数CBLUPSIの設定形式と規則を次に示します。

形式

CBLUPSI=文字列

規則

文字列は，8けたの0または1で設定します。8けたの文字列は，左から順にUPSI-0，UPSI-1，……，UPSI-7に対応します。

指定した文字列が8けたを超える場合は，8けたを超える部分が無視され，8けたに満たない場合は，文字列の後ろに0が仮定されます。また，0と1以外の文字を指定した場合，プログラムが異常終了します。

この環境変数を設定していない場合，すべての外部スイッチに0が仮定されます。

環境変数CBLUPSIは，COBOL実行単位中で初めて外部スイッチの参照／更新をしたときに，1回だけ参照されます。

(b)　SET文による外部スイッチの変更

SET文を使うと，プログラムの実行中に外部スイッチの状態を変更できます。ただし，SET文で変更した外部スイッチの状態は，現在実行中の実行環境だけで有効であり，環境変数CBLUPSIの値には反映されません。

(3)　外部スイッチの参照方法

プログラムで外部スイッチを参照するには，特殊名段落で外部スイッチの機能名が参照する外部スイッチのオン状態（on status）やオフ状態（off status）を，条件名に関連づけます。外部スイッチのスイッチ状態は，この条件名を使って調べられます。

外部スイッチの値を変更してプログラムの処理の流れを変更する例を示します。

（例）

次のCOBOLプログラムに対して外部スイッチの値を変更します。

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
                   :
      ENVIRONMENT DIVISION.
                   :
       CONFIGURATION SECTION.
       SPECIAL-NAMES.
           UPSI-0 IS SW0
                  ON STATUS IS ONIND0
                  OFF STATUS IS OFFIND0
           UPSI-3 IS SW3
                  ON STATUS IS ONIND3
                  OFF STATUS IS OFFIND3
                   :
           UPSI-5 OFF STATUS IS OFFS5.
                   :
       INPUT-OUTPUT SECTION.
                   :
      PROCEDURE DIVISION.
                   :
          IF ONIND0 GO TO A   …1.
          ELSE      GO TO B.
                   :
          IF ONIND3 GO TO C   …2.
          ELSE      GO TO D.
                   :
          IF OFFS5  GO TO A   …3.
          ELSE      GO TO C.
                   :
      A.
                   :
      B.
                   :
      C.
                   :
      D.
                   :

環境変数を"CBLUPSI=10010100"と設定すると，おのおのの外部スイッチの状態は次のようになります。

外部スイッチ名 | 外部スイッチの状態
UPSI-0 | 1（オン）
UPSI-1 | 0（オフ）
UPSI-2 | 0（オフ）
UPSI-3 | 1（オン）
UPSI-4 | 0（オフ）
UPSI-5 | 1（オン）
UPSI-6 | 0（オフ）
UPSI-7 | 0（オフ）

外部スイッチの状態が変更されたため，プログラムの1.，2.，3.の制御は次のようになります。

UPSI-0がオン状態なので制御は手続きAに移ります。

UPSI-3がオン状態なので制御は手続きCに移ります。

UPSI-5がオン状態なので制御は手続きCに移ります。

16.3　COBOL実行単位の終了

明示的または暗黙的にSTOP RUN文が実行されると，COBOL実行単位は終了します。このとき，実行単位で使用したCOBOLの資源の解放処理※が実行されます。

注※

閉じられていないファイルのクローズ，仮想メモリの解放，カバレージ機能のカウント情報の蓄積などの処理です。

なお，暗黙的にSTOP RUN文が実行されるのは，次の場合です。

実行中のプロセス内で，最初に呼ばれたCOBOLプログラムでGOBACK文が実行された場合

＜この節の構成＞

16.3.1　実行単位の終了方法

16.3.2　実行単位の終了コード

16.3.1　実行単位の終了方法

実行単位の終了方法には，次の三つがあります。

STOP RUN文によって終了する方法

実行単位中で最初に呼ばれたCOBOLプログラムのGOBACK文で終了する方法

CBLENDサービスルーチンを呼び出して終了する方法

＜この項の構成＞

(1)　STOP RUN文による終了

(2)　GOBACK文による終了

(3)　CBLENDサービスルーチンによる終了

(4)　注意事項

(1)　STOP RUN文による終了

COBOLプログラムでSTOP RUN文を実行すると，COBOLの実行環境が終了します。

プログラムが終了すると，閉じられていないファイルが閉じられるとともに，実行時に確保した仮想メモリが解放され，プロセスが終了します。

STOP RUN文による終了の例を次に示します。

図16-1　STOP RUN文による終了の例

(2)　GOBACK文による終了

実行単位内で最初に呼び出されたCOBOLプログラムでGOBACK文を実行すると，COBOLの実行環境が終了します。

プログラムが終了すると，閉じられていないファイルが閉じられるとともに，実行時に確保した仮想メモリが解放され，プロセスが終了します。

GOBACK文による終了の例を次に示します。

図16-2　GOBACK文による終了の例

(3)　CBLENDサービスルーチンによる終了

COBOL副プログラムから他言語の主プログラムへ戻る場合，閉じられていないファイルのクローズ処理や，実行時に確保した仮想メモリの解放が実行されません。これらのCOBOL資源を解放するには，CBLENDサービスルーチンを呼び出す必要があります。

CBLENDサービスルーチンは，COBOLプログラムから呼び出すのではなく，他言語のプログラムから呼び出します。CプログラムからCBLENDサービスルーチンを呼び出す形式を，次に示します。

形式

extern int CBLEND();        /* CBLENDの外部参照宣言 */

CBLEND();                   /* CBLENDの呼び出し     */

CBLENDサービスルーチンの詳細は，「29.4.1　CBLEND」を参照してください。

(4)　注意事項

COBOL以外のプログラムでexit関数などを発行してプロセスを終了した場合，COBOL2002は実行環境の終了処理をしないで，OSの終了処理に任せます。

COBOLプログラムの呼び出し元が制御プログラムでない場合，呼び出し元のプログラムでは，COBOL実行環境を終了させるためにCBLENDサービスルーチンを呼び出さなければなりません。CBLENDサービスルーチンを呼び出さないでほかのCOBOLプログラムを呼び出した場合，結果は保証しません。

16.3.2　実行単位の終了コード

COBOLの実行単位が終了するときに返す終了コードについて説明します。

COBOLプログラムから終了コードを返すには，RETURN-CODE特殊レジスタを使用します。また，プログラムが異常終了した場合は，COBOL2002によって終了コードが設定される場合があります。

＜この項の構成＞

(1)　RETURN-CODE特殊レジスタを使用する方法

(2)　プログラムが異常終了した場合の終了コード

(3)　注意事項

(1)　RETURN-CODE特殊レジスタを使用する方法

呼び出し元の制御プログラムに終了コードを返すには，プログラムが終了する前にRETURN-CODE特殊レジスタに値を設定します。

指定例

      MOVE 0 TO RETURN-CODE.

規則

RETURN-CODE特殊レジスタに設定できる値の範囲は，S9(9)の項目に設定できる値の範囲です。

ただし，このシステムで受け取れるRETURN-CODE特殊レジスタの値は，下位1バイト（8ビット）の内容です。

VOS3 COBOL85との動作と互換性を保つ必要がある場合は，RETURN-CODE特殊レジスタには，0～4,095の範囲で設定してください。

終了コードの値は，プログラム終了時にRETURN-CODE特殊レジスタに設定されている値になります。ただし，COBOLプログラム中でRETURN-CODE特殊レジスタに値を設定した後，RETURNING指定のないCALL文を実行した場合は，呼び出し先プログラムの戻り値が終了コードとなります。

RETURN-CODE特殊レジスタに値を設定しないで，COBOLプログラムが正常終了した場合は，終了コードとして0が返されます。ただし，COBOLプログラムから他言語のプログラムを呼び出している場合，呼び出し先プログラムの戻り値※が終了コードに設定されます。

注※

void型のC言語プログラムを最後に呼び出すと，終了コードの値が不定となることがあります。

(2)　プログラムが異常終了した場合の終了コード

プログラムが異常終了した場合，COBOL2002が終了コードを設定する場合があります。

COBOL実行時エラーが発生した場合

-DebugInf，-DebugInf,Trace，-DebugCompati，-DebugData，-TDInf，-CVInf，-DebugRange，または-MultiThreadオプション指定ありのCOBOLプログラムの場合
終了コードには，1が設定されます。ただし，実行時環境変数CBLCOREに１を指定した場合，COBOLプログラムは，abort命令を発行して終了します。このため，プログラムの終了コードには，シグナルSIGIOT発生時のシステムの終了コードが設定されます。
詳細は，システムのヘッダファイル（signal.h）およびシステムのマニュアルを参照してください。

上記のコンパイラオプション指定なしのCOBOLプログラムの場合
COBOLプログラムは，abort命令を発行して終了します。このため，プログラムの終了コードには，シグナルSIGIOT発生時のシステムの終了コードが設定されます。
詳細は，システムのヘッダファイル（signal.h）およびシステムのマニュアルを参照してください。

CBLABNサービスルーチンが実行された場合

-DebugInf，-DebugInf,Trace，-DebugCompati，-DebugData，-TDInf，-CVInf，-DebugRange，または-MultiThreadオプション指定ありのCOBOLプログラムの場合
終了コードには，1が設定されます。ただし，実行時環境変数CBLCOREに１を指定した場合，COBOLプログラムは，abort命令を発行して終了します。このため，プログラムの終了コードには，シグナルSIGIOT発生時のシステムの終了コードが設定されます。
詳細は，システムのヘッダファイル（signal.h）およびシステムのマニュアルを参照してください。

上記のコンパイラオプション指定なしのCOBOLプログラムの場合
COBOLプログラムは，abort命令を発行して終了します。このため，プログラムの終了コードには，シグナルSIGIOT発生時のシステムの終了コードが設定されます。
詳細は，システムのヘッダファイル（signal.h）およびシステムのマニュアルを参照してください。

上記以外のエラーが発生した場合

-DebugInf，-DebugInf,Trace，-DebugCompati，-DebugData，-TDInf，-CVInf，-DebugRange，または-MultiThreadオプション指定ありのCOBOLプログラムの場合
終了コードには，1が設定されます。ただし，実行時環境変数CBLCOREに１を指定した場合，COBOLプログラムは，abort命令を発行して終了します。このため，プログラムの終了コードには，シグナルSIGIOT発生時のシステムの終了コードが設定されます。
詳細は，システムのヘッダファイル（signal.h）およびシステムのマニュアルを参照してください。

上記のコンパイラオプション指定なしのCOBOLプログラムの場合
終了コードには，発生したシグナル別にOSが返す値が設定されます。

(3)　注意事項

COBOLプログラムが上位プロセスから起動される場合や，プログラム内でソフトウェアやハードウェアによって検出されて発生したシグナルを処理するプログラムがある場合，プログラムの終了コードは，それぞれ上位プロセス，および例外処理プログラムの戻り値となるため，（1）（2）の規則は適用されません。次に，（1）（2）の規則が適用されない例を示します。

テストデバッガのコマンド起動で，COBOLプログラムを実行した場合
（例）cblcv2k -Execute SAMPLE1

終了コードをシェルプログラミングで参照する場合，COBOLプログラムで設定したRETURN-CODE特殊レジスタの内容を終了コードとして参照できます。ただし，参照できる範囲は，RETURN-CODE特殊レジスタの下位8ビットの内容で，sh（Bシェル）は0～255です。

17.　プログラム間の引数と返却項目

プログラム間，およびメソッド呼び起こしの情報の受け渡しの方法には，CALL文およびINVOKE文のUSING指定（引数）による方法とRETURNING指定（返却項目）による方法があります。また，RETURN-CODE特殊レジスタを使用すると，呼び出し元プログラムに対して復帰コードを返却することもできます。

この章では，引数，返却項目，および復帰コードを使用したプログラム間の情報の受け渡し方法について説明します。

＜この章の構成＞

17.1　引数の受け渡し

17.2　復帰コードと返却項目

17.1　引数の受け渡し

＜この節の構成＞

17.1.1　引数の受け渡しの種類

17.1.2　使用例

17.1.3　引数の受け渡しの規則

17.1.1　引数の受け渡しの種類

プログラム間で引数を受け渡す場合は，CALL文のUSING指定を，メソッドを呼び起こす場合は，INVOKE文のUSING指定を，それぞれ使用します。

引数の受け渡しの種類

引数の受け渡しには，次の3種類があります。受け渡しの種類の指定を省略した場合は，BY REFERENCEが仮定されます。

引数の受け渡しの種類 | データの渡し方 | 仮引数の更新
BY REFERENCE | 参照渡し | 実引数に反映される。
BY CONTENT | 内容渡し | 実引数に反映されない。
BY VALUE | 値渡し | 実引数に反映されない。

それぞれの受け渡し方法の違いについて，次に説明します。

参照渡し（BY REFERENCE指定）

呼び出し元プログラムのデータ項目を直接参照するアドレスを，呼び出し先プログラムに渡します。呼び出し先プログラムでデータ項目の値を変更すると，呼び出し元プログラムのデータ項目にも反映されます。

内容渡し（BY CONTENT指定）

呼び出し元プログラムのデータ項目の内容を一時領域に転記し，転記後のデータ項目を参照するアドレスを呼び出し先プログラムに渡します。呼び出し先プログラムでデータ項目の値を変更しても，呼び出し元プログラムのデータ項目には影響しません。

値渡し（BY VALUE指定）

呼び出し元プログラムのデータ項目の値を，呼び出し先プログラムに渡します。呼び出し先プログラムでデータ項目の値を変更しても，呼び出し元プログラムのデータ項目には影響しません。

引数を値渡しする場合は，呼び出し元プログラムのデータ項目と呼び出し先プログラムのデータ項目での型の対応に注意する必要があります。

17.1.2　使用例

CALL文のUSING指定による引数の受け渡しの例を次に示します。

呼び出し元プログラム（MAIN1）

CALL 'SAMPLE1'
    USING ｛BY REFERENCE｜BY CONTENT｜BY VALUE｝ A1 B1 C1.

呼び出し先プログラム（SAMPLE1）

PROCEDURE DIVISION
    USING ｛BY REFERENCE｜BY VALUE｝ A2 B2 C2.

プログラムMAIN1のA1，B1，C1がプログラムSAMPLE1に渡すデータ項目です。また，プログラムSAMPLE1のA2，B2，C2がプログラムMAIN1から渡された情報を受け取るデータ項目です。データ項目A1，B1，C1はそれぞれデータ項目A2，B2，C2に対応します。

17.1.3　引数の受け渡しの規則

引数の受け渡しの規則について，説明します。

＜この項の構成＞

(1)　CALL文での引数の整合性チェック

(2)　CALL文での定数指定の引数

(3)　INVOKE文での定数指定の引数

(4)　INVOKE文でBY指定を省略した場合

(1)　CALL文での引数の整合性チェック

プログラムのコンパイル時に引数の適合チェックのオプション（-DebugCompati，または-TDInf）を指定すると，CALL文でのプログラム間の引数の整合性をチェックできます。ただし，INVOKE文では有効となりません。

引数の整合性チェックについては，「36.5　プログラム間整合性チェック」を参照してください。

(2)　CALL文での定数指定の引数

値渡し（BY VALUE指定）のCALL文では，引数に定数を指定できます。

数字定数，およびZEROは4バイトの2進形式として設定されます。

浮動小数点数字定数は，倍精度浮動小数点形式として設定されます。

UNIX32の場合，NULLはポインタ（4バイト2進形式）として設定されます。

UNIX64の場合，NULLはポインタ（8バイト2進形式）として設定されます。

COBOLプログラム間で定数の引数を渡す場合の型の対応について，次に示します。

表17-1　COBOLプログラム間でのデータ項目の型の対応

受け取り側作用対象 | 送り出し側作用対象
呼び出し元に指定された定数
数字定数 | 英数字定数 | 浮動小数点数字定数 | ZERO | NULL
固定長集団項目 | × |  | × | × |
英字項目 |  | ○ | × |  |
英数字項目 |  | ○ | × |  |
英数字編集項目 |  |  | × |  |
外部10進項目 |  | ○ | × |  |
内部10進項目 |  |  | × |  |
2進項目 | ○ |  | × | ○ |
数字編集項目 |  |  | × |  |
指標データ項目 | ×※ |  | × | ×※ | ○
オブジェクト参照 | ×※ |  | × | ×※ |
外部浮動小数点数字項目 |  |  | × |  |
単精度内部浮動小数点数字項目 | × | × | × | × | ×
倍精度内部浮動小数点数字項目 | × | × | ○ | × | ×
アドレスデータ項目 | ×※ |  | × | ×※ | ○
日本語項目 |  |  | × |  |
日本語編集項目 |  |  | × |  |
外部ブール項目 |  |  | × |  |
内部ブール項目 |  |  | × |  |
ポインタ項目 | ×※ |  | × | ×※ | ○

（凡例）

○：指定できる

空白：受け渡しできるかどうかはプラットフォームに依存するため，動作保証についてはユーザ責任とする

×：指定してはならない（指定したときの結果は保証しない）

注※

UNIX32の場合は「空白」になります。

(3)　INVOKE文での定数指定の引数

値渡し（BY VALUE指定）のINVOKE文では，引数に定数を指定できます。

INVOKE文に指定された実引数と呼び起こされるメソッドの仮引数は，適合していなければなりません。双方が適合している場合，実引数のデータ属性は，仮引数に指定されたデータ属性と同様になります。

(4)　INVOKE文でBY指定を省略した場合

INVOKE文でBY指定を省略した場合，指定された引数の属性，および呼び出し先メソッドに定義された引数の情報によって，仮定されるBY指定が異なります。INVOKE文でBY指定を省略した場合に仮定されるBY指定の内容について，次に示します。

INVOKE文にクラス名を指定した場合，または指定した一意名のデータ項目が普遍的オブジェクト参照でない場合は，次の表に示すBY指定が仮定されます。

表17-2　INVOKE文でBY指定を省略した場合に仮定されるBY指定の属性

INVOKE文でBY指定を省略した引数の種別
呼ばれるメソッド定義の引数のBY指定

REFERENCE
VALUE

ADDRESS OF 一意名
REFERENCE
REFERENCE

ファクトリ定義，オブジェクト定義
CONTENT
VALUE

プログラム定義
関数定義
メソッド定義
ファイル節※
作業場所節※
局所場所節
連絡節
通信節※
REFERENCE
VALUE

画面節（WINDOW SECTION）※
サブスキーマ節※
CONTENT
VALUE

注※

メソッド定義には指定できません。

INVOKE文に指定した一意名のデータ項目が普遍的オブジェクト参照の場合，BY REFERENCEが仮定されます。

17.2　復帰コードと返却項目

呼び出し先のプログラムやメソッドが呼び出し元プログラムに値を返すには，RETURN-CODE特殊レジスタ（復帰コード）を使用する方法と，RETURNING指定（返却項目）を使用する方法があります。復帰コードや返却項目は，COBOLプログラムからCOBOLプログラムやC言語のプログラムを呼び出し，呼び出し先プログラムで設定した返却項目を受け取るときに指定します。

規則

COBOLプログラム間で値を返す場合の規則を，次に示します。

呼び出し元プログラム
呼び出し先プログラム／メソッド

PROCEDURE DIVISIONの指定

RETURNING指定あり
RETURNING指定なし※

CALL文または
INVOKE文の指定
RETURNING指定あり
○
×

RETURNING指定なし※
×
○

（凡例）

○：返却項目を正しく受け渡せる

×：返却項目を正しく受け渡せない

注※

RETURNING指定がない場合は，RETURN-CODE特殊レジスタを使用して返却項目を参照または設定します。

CALL文またはINVOKE文のRETURNING指定のデータ項目と，呼び出し先プログラムまたはメソッドの手続き部見出しのRETURNING指定のデータ項目の長さ，および用途は同じでなければなりません。

同じ最外側のプログラムを複数のCALL文に指定した場合，RETURNINGの指定ありと，指定なしが混在してはいけません。また，RETURNINGの指定がある場合は，それぞれのRETURNINGに指定されたデータ項目の長さ，および用途が同じでなければなりません。

最外側のプログラムを呼び出す場合，RETURNINGに指定したデータ項目の属性で返却項目を参照します。

RETURNING指定でデータ項目に可変長項目を設定した場合，戻り値には常に最大長が受け渡されます。

例

CALL文のRETURNING指定による情報の受け渡しの例を，次に示します。

呼び出し元プログラムは，呼び出し先プログラムの返却項目（COBOLプログラムの手続き部見出しのRETURNINGに指定したデータ項目）の値を，CALL文のRETURNINGに指定したデータ項目で参照できます。

＜この節の構成＞

17.2.1　復帰コードと返却項目の使用方法

17.2.1　復帰コードと返却項目の使用方法

復帰コードと返却項目の使用方法について説明します。

＜この項の構成＞

(1)　返却項目の規則

(2)　復帰コードの規則

(1)　返却項目の規則

規則

呼び出し元プログラムと呼び出し先プログラムが両方ともCOBOLプログラムの場合，呼び出し先プログラムで手続き部見出しのRETURNINGに指定したデータ項目の値が，呼び出し元プログラムのCALL文RETURNINGに指定したデータ項目に格納されます。このとき，CALL文のRETURNING指定のデータ項目と，呼び出し先プログラムの手続き部見出しのRETURNING指定のデータ項目の長さ，および用途は同じでなければなりません。同じでない場合，動作は保証しません。

呼び出し先プログラムで手続き部見出しのRETURNINGのデータ項目に設定された戻り値は，呼び出し元プログラムのRETURN-CODE特殊レジスタでは参照できません。同様に，呼び出し先プログラムのRETURN-CODE特殊レジスタに設定された復帰コードは，呼び出し元プログラムのRETURNING指定のデータ項目では参照できません。

呼び出し元プログラムと呼び出し先プログラムのRETURNINGに指定されたデータ項目の型が異なってはなりません。

RETURNINGでデータ項目に可変長項目を設定した場合，常に最大長のデータが返却項目として受け渡されます。

返却項目の受け渡しの例

CALL文のRETURNING指定による返却項目の受け渡しの例を次に示します。

呼び出し元プログラム

      WORKING-STORAGE SECTION.
      01 RTC PIC S9(9) USAGE COMP.
      PROCEDURE DIVISION.
          :
          CALL 'SAMPLE1' RETURNING RTC.
          IF RTC = 12345 THEN
          ：

呼び出し先プログラム

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
          :
      LINKAGE SECTION.
      01 RTC PIC S9(9) USAGE COMP.
      PROCEDURE DIVISION RETURNING RTC.
          :
          MOVE 12345 TO RTC.
          EXIT PROGRAM.

(2)　復帰コードの規則

COBOLプログラムでは，RETURN-CODE特殊レジスタに値を設定することで，C言語のプログラムのように復帰コードを設定できます。復帰コードの規則について，次に示します。

(a)　復帰コードの設定方法

呼び出し先プログラムでRETURN-CODE特殊レジスタに値を設定できます。

呼び出し先プログラムで復帰コードに0を設定する例を，次に示します。

（呼び出し先プログラムがCOBOLプログラムの場合）

MOVE 0 TO RETURN-CODE.

（呼び出し先プログラムがCプログラムの場合）

return(0);

(b)　復帰コードの値

RETURN-CODE特殊レジスタに設定できる値の範囲は，S9(9)の項目に設定できる値の範囲です。

ただし，このシステムで受け取れるRETURN-CODE特殊レジスタの値は，下位1バイト（8ビット）の内容です。

VOS3 COBOL85との動作と互換性を保つ必要がある場合は，RETURN-CODE特殊レジスタには，0～4,095の範囲で設定してください。

RETURN-CODE特殊レジスタには，初回の呼び出しのときに初期値0が設定されます。このため，RETURN-CODE特殊レジスタを使用しないで正常終了したときは，復帰コードには0が設定されています。

(c)　復帰コードの参照方法

呼び出し先プログラムでRETURN-CODE特殊レジスタに設定された復帰コードを，呼び出し元プログラムで参照する方法を，次に示します。

COBOLプログラムの場合

ほかのプログラムから制御が戻ってきたとき，呼び出し先プログラムで設定したRETURN-CODE特殊レジスタの値を参照できます。

（例）

CALL 'SAMPLE1'.
IF RETURN-CODE = 20 THEN
   :

Cプログラムの場合

復帰コードは，関数の戻り値として参照できます。

（例）

int  rtn_value;
   :
rtn_value  =  SAMPLE1();
if  (rtn_value  ==  20)  {

(d)　注意事項

RETURN-CODE特殊レジスタの値は，Cプログラムとの混在がなく，呼び出し元以降にCALL文，INVOKE文，およびRETURN-CODE特殊レジスタの値の設定処理がない場合，COBOL主プログラムまで引き継がれます。

呼び出し元プログラムがCOBOLプログラム，呼び出し先プログラムがCプログラムの場合，復帰コードに設定できる値と参照できる値の範囲が次のように異なるので注意が必要です。

Cプログラムで設定できる戻り値

int型の変数に設定できる値の範囲が，戻り値として指定できます。

COBOLプログラムがRETURN-CODE特殊レジスタで参照できる値の範囲

S9(9) COMPで表現できる範囲が，RETURN-CODE特殊レジスタで参照できます。

18.　プログラムの呼び出し

この章では，プログラム間の呼び出し方法の種類，プログラム属性，およびプログラム呼び出しでのリンク方法の違いなどについて説明します。

＜この章の構成＞

18.1　プログラム呼び出しの種類と概要

18.2　プログラムの取り消し

18.3　COBOL主プログラムと副プログラム

18.4　プログラム属性

18.5　静的なリンクと動的なリンク

18.6　共用ライブラリに含まれるプログラムの呼び出しと共用ライブラリのアンロード

18.7　実行可能ファイルの呼び出し

18.1　プログラム呼び出しの種類と概要

COBOL2002では，プログラムから別のプログラムを呼び出せます。プログラム中で同じ副プログラムを2回以上呼び出し，2回目以降に制御が渡るとき，呼び出し先プログラムは，直前に制御を戻したときの状態を保持しています。※

注※

ただし，呼び出し先プログラムがCANCEL文を実行した場合や，初期化属性のプログラムの場合は，2回目以降の呼び出し時に状態が初期化されて副プログラムが実行されます。

COBOL2002でプログラムを呼び出すには，CALL文に呼び出すプログラム名を指定します。このとき，呼び出し先プログラムのPROGRAM-ID段落で指定したプログラム名は，等価規則が適用されるため，CALL文に指定するプログラム名も等価規則適用後のプログラム名で指定する必要があります。英小文字を含むプログラム名を定義したい場合は，呼び出し先プログラムのPROGRAM-ID段落で，プログラム名を英数字定数として指定する必要があります。また，CBL，CLS，CLT，CLUで始まる最外側のプログラム名を指定した場合，動作は保証しません。

CALL文で呼び出すプログラム名を指定する方法は，定数指定と一意名指定の2種類があります。

また，プログラム属性が再帰属性プログラム（RECURSIVE句指定あり）の場合，自分自身のプログラムを再帰的に呼び出せます。再帰属性プログラムの詳細は，「18.4.1　プログラム属性」の「(3)　再帰属性プログラム」を参照してください。

＜この節の構成＞

18.1.1　定数指定のCALL文

18.1.2　一意名指定のCALL文

18.1.1　定数指定のCALL文

定数指定のCALL文は，CALL文に呼び出すプログラム名を定数で指定する方法です。

定数指定のCALL文の場合，呼び出すプログラムがリンク時に静的に解決されるため，実行性能は良くなります。

（例）

18.1.2　一意名指定のCALL文

一意名指定のCALL文は，CALL文に呼び出すプログラム名を一意名で指定する方法です。一意名指定のCALL文の場合，呼び出し先のプログラム名は常に実行時に解決されます。

一意名指定のCALL文は，呼び出し先のプログラム名が実行時に解決されるため，定数指定のCALL文と比較すると実行性能は劣化します。特に，実行環境中で最初に呼び出すプログラムの場合，そのプログラムの検索に必要な処理を実行するため，最も処理時間が掛かります。ただし，すでに一意名指定で呼び出したプログラムを再び呼び出す場合，COBOL実行環境が保持しているプログラム情報を検索するので，最初の呼び出しと比べると，処理時間は短縮されます。

（例）

一意名指定のCALL文で最外側のプログラムを呼び出す場合は，次に示すコンパイラオプションの指定が必要です。

-DynamicLink

-IdentCall

18.2　プログラムの取り消し

通常，呼び出し先プログラムが処理を終えて呼び出し元プログラムに戻ったとき，呼び出し先プログラムは，制御を戻したときの状態を保持しています。COBOL2002では，この状態の保持を取り消せます。

ここでは，プログラムの取り消しについて説明します。

＜この節の構成＞

18.2.1　取り消し対象のプログラム

18.2.2　取り消しで解放される資源

18.2.3　取り消し後の呼び出し

18.2.1　取り消し対象のプログラム

実行中のプログラムを取り消すには，CANCEL文を使用します。

＜この項の構成＞

(1)　取り消しの対象に指定できるプログラム

(2)　取り消しの実行順序

(3)　CANCEL文に指定できないプログラム

(1)　取り消しの対象に指定できるプログラム

CANCEL文で取り消しの対象に指定できるプログラムは，CANCEL文を実行したプログラムから呼び出せるプログラムだけです。

（例）

プログラムAは，自身が呼び出せるプログラムB，およびプログラムCに対してCANCEL文を実行できます。

プログラムB，プログラムCがお互いを呼び出せる場合，直接呼び出したプログラムでなくても，プログラムBからプログラムCに対して，プログラムCからプログラムBに対して，それぞれCANCEL文を実行できます。

プログラムDは，プログラムCの内側のプログラムなので，プログラムAからプログラムDに対してCANCEL文を実行できません。

(2)　取り消しの実行順序

CANCEL文を実行したとき，CANCEL文に指定されたプログラム中に含まれるすべてのプログラムも取り消されます。このとき，プログラムが取り消される順番は，翻訳単位のプログラム中に現れた順序とは逆順に，含まれる各プログラムに対して正しいCANCEL文を実行した場合と同じです。

（例）

プログラムTEST01から「CANCEL 'A'.」を実行すると，プログラムAに含まれるすべての内側のプログラムに対してもCANCEL文が実行されたものとして扱われます。

(3)　CANCEL文に指定できないプログラム

CANCEL文を実行する場合，すでにほかのプログラムから呼び出されていて，まだEXIT PROGRAM文が実行されていないプログラムを，直接または間接に参照してはいけません。このような実行中のプログラムを参照した場合，実行時エラーとなります。

（例）

プログラムCから，まだ実行中のプログラムBをCANCEL文で取り消そうとした場合，実行時エラーとなります。

18.2.2　取り消しで解放される資源

CANCEL文の実行によって解放される資源を，次に示します。

閉じていないファイルのクローズ処理（報告書作成機能を使用している報告書に関連づけられたファイルを含む）

通信節による画面機能で開かれた画面やプリンタのクローズ処理(HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効)

最外側プログラムの場合，プログラム内で確保した仮想メモリの解放

注意事項

一度も呼び出されていないプログラムに対してCANCEL文を実行した場合，CANCEL文は無効となります。

CANCEL文で取り消すプログラムに内側のプログラムがある場合，その内側のプログラムもCANCEL文の対象となります。

他言語のプログラムに対してCANCEL文を実行しても，無効となります。

18.2.3　取り消し後の呼び出し

CANCEL文実行後のプログラムは，初期状態になっています。初期状態とは，プログラムが実行単位中で最初に呼び出された状態のことで，初期化属性を指定したプログラムの場合と同じ処理が実行されます。

CANCEL文実行後のプログラムの状態を次の表に示します。

表18-1　CANCEL文実行後のプログラムの状態

データ領域の種別 | VALUE句の指定あり | VALUE句の指定なし
CBLVALUEの指定あり | CBLVALUEの指定なし
連絡節 | － | － | －
作業場所節 | （1） | （2） | 不定
局所場所節 | （1） | 不定 | 不定
ファイル節 | － | （2） | 不定
報告書節 | （1） | （2） | 不定
画面節（SCREEN SECTION）※1 | （1） | （2） | 不定
画面節（WINDOW SECTION）※1 | （1） | （2） | 不定
通信節（画面機能）※2 | － | 不定 | 不定
通信節（データコミュニケーション機能）※3 | － | 不定 | 不定
サブスキーマ節 | － | （2） | 不定

（凡例）

－：該当しない

（1）：VALUE句に指定した値で初期化される

（2）：-MultiThreadオプションを指定した最外側のプログラムの再呼び出しをした場合だけ，コンパイラ環境変数CBLVALUEに指定した値で初期化される。それ以外の場合は，不定となる

注※1

HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Solaris(SPARC)で有効です。

注※2

HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効です。

注※3

UNIX32，AIX(64)，Linux(x64)，Linux(IPF64)で有効です。

（説明）

作業場所節，報告書節，画面節（SCREEN SECTION）※1，画面節（WINDOW SECTION）※1に含まれていて，VALUE句が書かれているデータ項目の場合，VALUE句に定義された値で初期化されます。VALUE句が書かれていないデータ項目の場合，初期値は規定されません。
ただし，-MultiThreadオプションおよび-CBLVALUEオプションを指定した最外側のプログラムを取り消したあと，そのプログラムを再び呼び出した場合，作業場所節，報告書節，画面節（SCREEN SECTION）※1，画面節（WINDOW SECTION）※1，ファイル節，サブスキーマ節に含まれているデータ項目は，コンパイラ環境変数CBLVALUEに指定した値で初期化されます。

局所場所節に含まれていて，VALUE句が書かれているデータ項目の場合，VALUE句に定義された値で初期化されます。VALUE句が書かれていないデータ項目の場合，初期値は常に規定されません。

プログラムに関連する内部ファイル結合子を持つファイルや報告書は，開かれた状態ではありません。

通信節による画面機能の送信先画面やプリンタは，開かれた状態ではありません。※2

プログラム中に含まれるすべてのPERFORM文に対する制御機構は，その初期状態に設定されます。

同じプログラム中に含まれるALTER文によって参照されるGO TO文は，その初期状態に設定されます。

注※1

HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Solaris(SPARC)で有効です。

注※2

HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効です。

18.3　COBOL主プログラムと副プログラム

COBOLプログラムには，COBOL主プログラムとCOBOL副プログラムの2種類があります。

COBOL主プログラムは，現在実行中のプロセス内で初めて呼ばれたCOBOLプログラムです。COBOL副プログラムは，COBOL主プログラムまたはCOBOL副プログラムから呼ばれたCOBOLプログラムです。

ここでは，COBOL主プログラムとCOBOL副プログラムについて説明します。

＜この節の構成＞

18.3.1　COBOLプログラムを主プログラムとして動作させる場合

18.3.2　COBOLプログラムを副プログラムとして動作させる場合

18.3.1　COBOLプログラムを主プログラムとして動作させる場合

COBOL主プログラムは，制御プログラムから直接呼ばれる場合と，制御プログラムから間接的に呼ばれる場合（他言語のプログラムから呼ばれる場合）があります。それぞれの場合の動作の違いを，次に示します。

＜この項の構成＞

(1)　制御プログラムから直接呼ばれる場合（アプリケーションの主プログラムの場合）

(2)　制御プログラムから間接的に呼ばれる場合

(3)　注意事項

(1)　制御プログラムから直接呼ばれる場合（アプリケーションの主プログラムの場合）

制御プログラムから直接呼ばれるCOBOL主プログラムを作成するには，-Main,Systemまたは-Main,V3オプションを指定してプログラムをコンパイルします。

-Main,Systemまたは-Main,V3オプションを指定してコンパイルしたCOBOL主プログラム（-Mainオプションが指定されたプログラム）には，スタートアップルーチン※が組み込まれます。制御プログラムからCOBOL主プログラムを呼び出す場合は，まず制御プログラムからスタートアップルーチンが呼ばれ，スタートアップルーチンからCOBOL主プログラムの手続きへと制御が移ります。

注※

スタートアップルーチンとは，main関数を含むCOBOL2002の実行時ライブラリのことです。

COBOLプログラムが制御プログラムから直接呼ばれる場合の例を次に示します。

(2)　制御プログラムから間接的に呼ばれる場合

制御プログラムから間接的に呼ばれるCOBOL主プログラムを作成するには，-Main,Systemおよび-Main,V3オプションを指定しないで，プログラムをコンパイルします。

-Main,Systemおよび-Main,V3オプションを指定しないでコンパイルしたCOBOL主プログラムには，スタートアップルーチンが組み込まれません。この場合，制御プログラムからはスタートアップルーチンに代わる主プログラムが呼ばれ，主プログラムからCOBOL主プログラムが呼ばれます。

COBOLプログラムが制御プログラムから間接的に呼ばれる場合の例を次に示します。

(3)　注意事項

COBOLプログラムでGOBACK文を実行すると，STOP RUN文と同様にプロセスを終了します。したがって，COBOL主プログラムを呼んだプログラムが制御プログラムでないとき，呼び出し元のプログラムには制御が戻りません。

18.3.2　COBOLプログラムを副プログラムとして動作させる場合

「18.3.1　COBOLプログラムを主プログラムとして動作させる場合」に示したように，実行中のプロセス内で初めて呼ばれたCOBOLプログラム（COBOL主プログラム）でGOBACK文を実行した場合，STOP RUN文と同じ動作となり，プロセスが終了するため，呼び出し元のプログラムに制御が戻りません。このため，COBOL主プログラムを呼び出したプログラム（C言語の主プログラムなど）がCOBOLプログラムから復帰したあとの処理を継続できなくなります。

このような場合，-MainNotCBLオプションを指定してCOBOLプログラムをコンパイルすると，実行中のプロセス内で初めて呼ばれたCOBOLプログラムをCOBOL副プログラムとみなし，GOBACK文またはEXIT PROGRAM文を実行したときでも呼び出し元のプログラムに復帰できます。

また，-MainNotCBLオプションを指定すると，他言語のプログラムからCOBOLプログラムを繰り返し呼び出す場合のCOBOL初期処理／終了処理の負荷を軽減できます。

-MainNotCBLオプションを指定した場合のCOBOLプログラムの動作を，次に示します。

上記の場合，最初に呼ばれるCOBOLプログラムAP1に-MainNotCBLオプションを指定しているので，以降に呼ばれるCOBOLプログラムは，すべてCOBOL副プログラムとして動作します。そのため，この実行環境内ではGOBACK文やEXIT PROGRAM文が有効となり，COBOLプログラムの呼び出し元へ制御が戻るため，復帰後の処理ができます。

＜この項の構成＞

(1)　COBOLプログラムの資源

(2)　COBOL実行環境の終了方法

(3)　注意事項

(1)　COBOLプログラムの資源

COBOLプログラムが呼び出し元のプログラムに戻っても，COBOLの実行環境は解除されません。このため，INITIAL句を指定していないCOBOLプログラムか，またはCANCEL文で取り消されていないCOBOLプログラムは，以前に呼ばれた状態を保持しています。保持している情報は，通常属性プログラムがほかのプログラムから2回以上呼び出された場合の規則に従います。詳細は，「18.4.1　プログラム属性」の「(1)　通常属性プログラム」を参照してください。

(2)　COBOL実行環境の終了方法

利用者プログラムは，COBOLプログラムの呼び出しが完了し，以降は呼び出しをしない状態になったとき，次の方法で実行環境を終了します。

COBOLプログラム内からSTOP RUN文を実行する。

COBOLプログラムの呼び出し元プログラムからCBLENDサービスルーチンを呼び出す。
CBLENDサービスルーチンについては，「29.4.1　CBLEND」を参照してください。

(3)　注意事項

-MainNotCBLオプションを指定する場合，該当する実行可能ファイル中に含まれるすべてのCOBOLプログラムを-MainNotCBLオプション指定でコンパイルする必要があります。-MainNotCBLオプションを指定したプログラムと指定していないプログラムが混在するときは，実行環境中で最初に呼ばれたプログラムの-MainNotCBLオプションの有無に従います。

18.4　プログラム属性

ここでは，COBOLプログラムのプログラム属性について説明します。

＜この節の構成＞

18.4.1　プログラム属性

18.4.1　プログラム属性

COBOLプログラムでは，プログラムの使用形態に応じて次の属性を指定できます。

通常属性プログラム

初期化属性プログラム

再帰属性プログラム

共通属性プログラム

＜この項の構成＞

(1)　通常属性プログラム

(2)　初期化属性プログラム

(3)　再帰属性プログラム

(4)　共通属性プログラム

(1)　通常属性プログラム

プログラムの見出し部に特に何も指定しない場合，通常属性プログラムとなります。

通常属性プログラムは，ほかのプログラムから2回以上呼び出された場合，前回呼ばれたときの，次の状態を保持しています。

プログラムに関連するファイルの状態（報告書作成機能を使用している報告書に関連づけられたファイルを含む）

画面節（SCREEN SECTION）※1，画面節（WINDOW SECTION）※1，通信節（画面機能）※2，通信節（データコミュニケーション機能）※3，サブスキーマ節で使用された資源の状態

作業場所節，報告書節，画面節（SCREEN SECTION）※1，画面節（WINDOW SECTION）※1，ファイル節，サブスキーマ節，通信節（画面機能）※2，通信節（データコミュニケーション機能）※3の内容

ALTER文で設定したGO TO文

注※1

HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Solaris(SPARC)で有効です。

注※2

HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効です。

注※3

UNIX32，AIX(64)，Linux(x64)，Linux(IPF64)で有効です。

ただし，プログラム中に含まれるすべてのPERFORM文に対する制御機構は，プログラムが呼び出されるたびに，初期状態に設定されます。

保持している状態を取り消すには，CANCEL文を実行します。詳細は，「18.2　プログラムの取り消し」を参照してください。

また，通常属性プログラムは，自分自身を再帰的に呼ぶことはできません。

(2)　初期化属性プログラム

プログラムの見出し部にINITIAL句を指定した場合，初期化属性プログラムとなります。

初期化属性プログラムは，ほかのプログラムから呼ばれたときに，毎回プログラムの状態が初期化されます。そのため，プログラムの状態は，実行単位でそのプログラムが最初に呼ばれたときと同じになります。

(a)　初期化プログラムが呼ばれたときの初期化の内容

初期化プログラムが呼ばれたときのプログラムの状態を次の表に示します。

AIX(32)，AIX(64)，Linux(x86)，Linux(x64)の場合，初期化プログラムが呼ばれたときの作業場所節のVALUE句の指定がないデータ項目の初期値については，「(b)　初期化プログラムが呼ばれたときの作業場所節のVALUE句の指定がないデータ項目の状態（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）」を参照してください。

表18-2　初期化プログラムが呼ばれたときのプログラムの状態

データ領域の種別 | VALUE句の指定あり | VALUE句の指定なし
CBLVALUEの指定あり | CBLVALUEの指定なし
連絡節 | － | － | －
作業場所節 | （1） | （2） | 不定
局所場所節 | （1） | 不定 | 不定
ファイル節 | － | （2） | 不定
報告書節 | （1） | （2） | 不定
画面節（SCREEN SECTION）※1 | （1） | 不定 | 不定
画面節（WINDOW SECTION）※1 | （1） | （2） | 不定
通信節（画面機能）※2 | － | 不定 | 不定
通信節（データコミュニケーション機能）※3 | － | 不定 | 不定
サブスキーマ節 | － | （2） | 不定

（凡例）

－：該当しない

（1）：VALUE句に指定した値で初期化される

（2）：最初に呼ばれたときだけ，コンパイラ環境変数CBLVALUEに指定した値での初期化は保証されるが，2回目以降に呼ばれたときは不定となる

注※1

HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Solaris(SPARC)で有効です。

注※2

HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効です。

注※3

UNIX32，AIX(64)，Linux(x64)，Linux(IPF64)で有効です。

（説明）

作業場所節，報告書節，画面節（SCREEN SECTION）※1，画面節（WINDOW SECTION）※1に含まれていて，VALUE句が書かれているデータ項目の場合，VALUE句に定義された値で初期化されます。VALUE句が書かれていないデータ項目の場合，初期値は規定されません。

局所場所節に含まれていて，VALUE句が書かれているデータ項目の場合，VALUE句に定義された値で初期化されます。VALUE句が書かれていないデータ項目の場合，初期値は常に規定されません。

プログラムに関連する内部ファイル結合子を持つファイルや報告書は，開かれた状態ではありません。

通信節による画面機能の送信先画面やプリンタは，開かれた状態ではありません。※2

プログラム中に含まれるすべてのPERFORM文に対する制御機構は，その初期状態に設定されます。

同じプログラム中に含まれるALTER文によって参照されるGO TO文は，その初期状態に設定されます。

注※1

HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Solaris(SPARC)で有効です。

注※2

HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効です。

(b)　初期化プログラムが呼ばれたときの作業場所節のVALUE句の指定がないデータ項目の状態（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

コンパイル時にコンパイラ環境変数CBLINITVALUEがあるかどうかで，初期化プログラムの作業場所節のVALUE句の指定がないデータ項目の状態が異なります。初期化プログラムが呼ばれたときの，作業場所節のVALUE句の指定がないデータ項目の状態を次の表に示します。

表18-3　初期化プログラムが呼ばれたときの，作業場所節のVALUE句の指定がないデータ項目の状態

VALUE句の指定なし
CBLINITVALUEの指定あり | CBLINITVALUEの指定なし
CBLVALUEの指定あり | CBLVALUEの指定なし | CBLVALUEの指定あり | CBLVALUEの指定なし
（1） | （2） | 不定

（凡例）

（1）：呼ばれるたびに，作業場所節のデータ項目がNULL（X'00'）で初期化される

（2）：最初に呼ばれたときだけ，コンパイラ環境変数CBLVALUEに指定した値での初期化が保証されるが，2回目以降に呼ばれたときは不定となる

(3)　再帰属性プログラム

プログラムの見出し部にRECURSIVE句を指定した場合，再帰属性プログラムとなります。

再帰属性プログラムは，自分自身を直接的，または間接的に再帰呼び出しできます。

再帰属性プログラムが呼ばれたときのプログラムの状態を次の表に示します。

表18-4　再帰属性プログラムが呼ばれたときのプログラムの状態

データ領域の種別 | VALUE句の指定あり | VALUE句の指定なし
CBLVALUEの指定あり | CBLVALUEの指定なし
連絡節 | － | － | －
作業場所節 | （1） | （3） | （4）
局所場所節 | （2） | 不定 | 不定
ファイル節 | － | （3） | （4）
報告書節 | （1） | （3） | （4）
画面節（SCREEN SECTION）※1 | （1） | （4） | （4）
画面節（WINDOW SECTION）※1 | （1） | （3） | （4）
通信節（画面機能）※2 | － | （4） | （4）
通信節（データコミュニケーション機能）※3 | － | （4） | （4）
サブスキーマ節 | － | （3） | （4）

（凡例）

－：該当しない

（1）：最初に呼び出された場合だけ，VALUE句に指定した値で初期化される

（2）：呼び出されるたびに初期化される

（3）：最初に呼び出された場合だけ，コンパイラ環境変数CBLVALUEに指定した値で初期化される。再帰呼び出しされた場合は，直前に呼び出された状態を保持している

（4）：最初に呼び出された場合は，不定となる。再帰呼び出しされた場合は，直前に呼び出された状態を保持している

注※1

HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Solaris(SPARC)で有効です。

注※2

HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効です。

注※3

UNIX32，AIX(64)，Linux(x64)，Linux(IPF64)，で有効です。

（説明）

次の個所は，プログラムが呼び出されるたびに初期化されます。

局所場所節に含まれていて，VALUE句が書かれているデータ項目の場合，VALUE句に定義された値で初期化されます。VALUE句が書かれていないデータ項目の場合，初期値は常に規定されません。

プログラム中に含まれるすべてのPERFORM文に対する制御機構は，その初期状態に設定されます。

同じプログラム中に含まれるALTER文によって参照されるGO TO文は，その初期状態に設定されます。

次の個所は，プログラムが再帰呼び出しされた場合，前回呼ばれた状態を保持しています。

作業場所節，報告書節，画面節（SCREEN SECTION）※1，画面節（WINDOW SECTION）※1に含まれていて，VALUE句が書かれているデータ項目の場合，最初に呼び出されたときは，VALUE句に定義された値で初期化されます。VALUE句が書かれていないデータ項目の場合，最初に呼び出されたときは，初期値は規定されません。

作業場所節，ファイル節，報告書節，画面節（SCREEN SECTION）※1，画面節（WINDOW SECTION）※1，通信節（画面機能）※2，通信節（データコミュニケーション機能）※3，サブスキーマ節に含まれているデータ項目で，再帰呼び出しされたときは，直前の状態を保持しています。

局所場所節に含まれていて，VALUE句が書かれているデータ項目の場合，定義された値で初期化されます。VALUE句が書かれていないデータ項目の場合，初期値は常に規定されません。

プログラムに関連する内部ファイル結合子を持つファイルや報告書は，開かれた状態で再帰呼び出しをすると，開かれた状態で引き継がれます。

画面節（SCREEN SECTION）※1，画面節（WINDOW SECTION）※1，通信節（画面機能）※2，通信節（データコミュニケーション機能）※3，サブスキーマ節で使用された資源の状態は，そのままの状態で引き継がれます。

注※1

HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Solaris(SPARC)で有効です。

注※2

HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効です。

注※3

UNIX32，AIX(64)，Linux(x64)，Linux(IPF64)で有効です。

(a)　RECURSIVE句の効果

RECURSIVE句を指定した場合の効果は，次のとおりです。

RECURSIVE句は，最外側のプログラム（この場合は，-Main,System／-Main,V3オプションを指定しないプログラム）でも指定できます。
また，プログラムが入れ子状態であるとき，外側のプログラムにRECURSIVE句の指定があれば，その直接または間接的な内側のプログラムにRECURSIVE句の指定がなくても，暗黙的に再帰属性プログラムとなります。
[図データ]

-Main,System／-Main,V3オプションを指定した最外側のプログラムにRECURSIVE句を指定した場合，警告エラーとなり，最外側のプログラムのRECURSIVE句の指定は無視されます。ただし，内側のプログラムについては，再帰属性となります。
[図データ]
上記の最外側のプログラム（"OYA"）を呼び出そうとした場合，次の結果となります。

最外側のプログラムの手続き，または含まれるプログラムの手続きから，CALL定数（CALL 'OYA'）で呼び出そうとした場合は，コンパイル時にエラーとなります。

別翻訳単位のプログラムの手続きから，CALL定数(CALL 'OYA')で呼び出そうとした場合，-DynamicLink,Callオプションの指定があれば実行時にエラー，-DynamicLink,Callオプションの指定がなければリンク時にリンクエラーとなります。

CALL一意名で呼び出そうとした場合は，実行時にエラーとなります。

(b)　再帰呼び出しの例

COBOL副プログラムの再帰呼び出し

（最外側のプログラムの再帰呼び出し）

（内側のプログラムの再帰呼び出し）

COBOL主プログラムの再帰呼び出し

Cプログラムなどを介して，制御プログラムから間接的に呼ばれるCOBOL主プログラムについても，再帰呼び出しができます。

(4)　共通属性プログラム

プログラムの見出し部にCOMMON句を指定した場合，共通属性プログラムとなります。

共通属性プログラムは，その共通属性プログラムを直接含まない，内側のプログラムから呼び出せます。

18.5　静的なリンクと動的なリンク

ここでは，プログラム間連絡での静的なリンクと動的なリンクの違いについて説明します。

リンク方法や，実行可能ファイルの作成方法については，「34.　実行可能ファイルと共用ライブラリの作成」を参照してください。また，共用ライブラリの静的なリンクと動的なリンクについては，「18.6.2　共用ライブラリに含まれるプログラムの呼び出し方法」を参照してください。

＜この節の構成＞

(1)　静的なリンク

(2)　動的なリンク

(1)　静的なリンク

静的なリンクとは

静的なリンクとは，オブジェクトファイルのリンク時にプログラムの呼び出しを解決して，実行可能ファイルを生成するリンク方法です。

静的なリンクとは，次の両方のことを指します。

オブジェクトファイルを静的に結合して，一つの実行可能ファイルを生成すること

実行可能ファイルに共用ライブラリをリンクし，呼び出し先プログラム名の名前解決を静的にすること

静的なリンクの長所と短所

静的にリンクすると，主プログラムがメモリにロードされるのと同時に，呼び出し先プログラムもロードされます。そのため，プロセス起動時にはロード時間が掛かりますが，CALL文でほかのプログラムを呼び出すとき，すでにメモリ上にプログラムがロードされているので，高速に呼び出せます。

静的にリンクした方がよいケース

同じプログラムを何度も呼び出すようなプログラム構造の場合は，静的にリンクした方がプログラムの実行性能が良くなります。

(2)　動的なリンク

動的なリンクとは

動的なリンクとは，呼び出し先プログラムの情報を保持しない実行可能ファイルを生成するリンク方法です。

動的なリンクでは，CALL文での呼び出し先プログラム（副プログラム）と呼び出し元プログラム（主プログラム）とを別ファイルで生成しておきます。呼び出し先プログラムは，呼び出し元プログラムがCALL文を実行したとき，メモリにロードされます。

動的なリンクの長所と短所

動的にリンクすると，主プログラムがメモリにロードされても，副プログラムはロードされないため，プロセス起動時のロード時間が静的リンクより高速になります。また，プログラムが消費するメモリ空間が少なくて済みます。しかし，CALL文の実行時に，呼び出し先プログラムのロードと検索処理が実行されるため，CALL文の処理時間は遅くなります。

動的にリンクした方がよいケース

処理の流れによって呼ばれないことがある副プログラムがある場合は，動的にリンクした方がプログラムの実行性能が良くなります。

18.6　共用ライブラリに含まれるプログラムの呼び出しと共用ライブラリのアンロード

＜この節の構成＞

18.6.1　共用ライブラリの概要

18.6.2　共用ライブラリに含まれるプログラムの呼び出し方法

18.6.3　動的なリンクのプレロード機能（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

18.6.4　動的なリンクのプログラム検索トレース機能（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

18.6.5　共用ライブラリのアンロード

18.6.1　共用ライブラリの概要

主プログラム（呼び出し元プログラム）と副プログラム（呼び出し先プログラム）を別ファイルにして，呼び出し先プログラムを一つのファイルにまとめたものを共用ライブラリといいます。

呼び出し先プログラムを共用ライブラリにすると，次の利点があります。

複数のユーザアプリケーションで一つの共用ライブラリを共用できます。このため，メモリ空間が節約でき，スワップの回数も減らせます。

関数の引数と戻り値を変更しなければ，共用ライブラリ中の関数を変更しても実行可能ファイルやほかの共用ライブラリの再コンパイルや再リンクは不要です。

不要となった共用ライブラリをメモリからアンロードすることによって，メモリを効率良く使用できます。

18.6.2　共用ライブラリに含まれるプログラムの呼び出し方法

共用ライブラリに含まれるプログラムの呼び出しには，静的なリンクによる呼び出しと，動的なリンクによる呼び出しの二つの方法があります。

＜この項の構成＞

(1)　静的なリンク

(2)　動的なリンク

(3)　注意事項

(4)　プログラムのデバッグ

(5)　動的なリンクを使用するプログラム作成時の注意事項

(6)　動的なリンクを使用する場合の注意事項

(1)　静的なリンク

呼び出し元プログラムのリンク時に共用ライブラリを指定して，呼び出し先プログラム名を解決する方法です。この場合，実行可能ファイルがロードされるときに，共用ライブラリもロードされます。

共用ライブラリを静的にリンクするには，呼び出し元プログラムから定数指定のCALL文で，呼び出し先プログラムの共用ライブラリを呼び出します。

プログラム実行時，リンク時に指定した検索パスに共用ライブラリがないと，プロセス起動エラーとなります。

UNIXの場合，-DynamicLink,Callオプションを指定していない定数指定のCALL文を実行することで，静的なリンクによって呼び出しを行います。

（例）

副プログラムを含む共用ライブラリがCALL '定数'で呼ばれ，実行可能ファイルの作成時に共用ライブラリを指定してリンクした場合，静的なリンクでの呼び出しとなります。

(2)　動的なリンク

実行時に呼び出し先プログラムを検索する方式です。

共用ライブラリを動的にリンクするには，呼び出し元プログラムから-DynamicLink,Callオプションを指定した場合のCALL文，または-DynamicLink,IdentCallオプションを指定した場合の一意名指定のCALL文で，呼び出し先プログラムの共用ライブラリを呼び出します。

動的なリンクの場合，CALL文実行時に動的なリンクによって共用ライブラリがロードされます。

共用ライブラリのロード条件

CALL文で副プログラムを呼び出すか，またはADDR関数でプログラムのアドレスを求める場合，次に示すプログラムの優先順位に従ってプログラムが検索され，見つかったプログラムが呼び出されるか，またはアドレスが求められます。プログラムが見つからなかった場合，動的なリンクによって，共用ライブラリがロードされます。

プログラムの優先順位は次のとおりです。

呼び出しできる内側のプログラム

静的にリンクされた最外側のプログラム

すでにロードされている共用ライブラリ中のプログラム

Linux，Solaris(SPARC)の場合，必ず環境変数CBLLSLIBを指定してください。

実行性能を重視するシステムでは，次に示す環境変数で検索対象となる共用ライブラリを限定することを推奨します。なお，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)の場合，動的なリンクのプレロード機能を使用してプログラム起動時に検索対象となる共用ライブラリをロードしておくことで，CALL文実行時点でのプログラム検索を高速化することもできます。動的なリンクのプレロード機能については，「18.6.3　動的なリンクのプレロード機能（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）」を参照してください。

環境変数名
概要
対象OS

CBLLPATH
検索対象となる共用ライブラリのディレクトリを指定します。指定がない場合は，カレントディレクトリだけが検索対象となります。
HP-UX(IPF)
HP-UX(IPF64)
AIX

CBLLSLIB
検索対象となる共用ライブラリを限定する場合に指定します。
Linux，Solaris(SPARC)の場合，環境変数CBLLSLIBは必ず指定してください。指定がない場合，検索する共用ライブラリがないことを意味します。
HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)の場合，環境変数CBLLPATHの指定に従います。
UNIX

LD_LIBRARY_PATH
共用ライブラリの検索ディレクトリを指定したいときに指定します。環境変数LD_LIBRARY_PATHに検索ディレクトリを指定しない場合，環境変数CBLLSLIBには絶対パスで共用ライブラリ名を指定してください。
Linux
Solaris(SPARC)

CBLLTAG
検索対象とする共用ライブラリの拡張子，ライブラリ種別，および検索方法を指定します。
指定がない場合は，拡張子（.so）の共用ライブラリおよびアーカイブ形式の共用ライブラリのデータセクション内のシンボル情報を検索対象にします。
AIX

注意事項

環境変数CBLLPATH，CBLLSLIB，CBLLTAGは，実行単位で最初の動的なリンクによる呼び出し時に取得した値が，その実行単位中で有効になります。

システム環境変数LD_LIBRARY_PATHは，動的なリンクによる呼び出しをするごとに最新の値が参照されます。

環境変数CBLLPATH（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)で有効）

検索対象となる共用ライブラリのディレクトリを指定します。

形式

CBLLPATH=検索ディレクトリ[:検索ディレクトリ]…

検索ディレクトリ

動的にリンクする共用ライブラリのディレクトリを指定します。

規則

複数ディレクトリを検索対象とする場合，コロン（:）で区切って指定します。

動的なリンクの対象となる共用ライブラリは，次のディレクトリにある共用ライブラリから順に，共用ライブラリの登録順で検索されます。
1.環境変数CBLLPATH設定のディレクトリ下の共用ライブラリ
2.カレントディレクトリ下の共用ライブラリ

検索ディレクトリの指定がない場合は，カレントディレクトリ下の共用ライブラリだけが動的なリンクの対象となります。

環境変数CBLLPATHに指定した各ディレクトリ名称に，ロード対象の共用ライブラリ名称を付加した文字列長は，終端NULL文字を含めて1,023バイトまでです。

環境変数CBLLSLIB

検索対象となる共用ライブラリを限定する場合に指定します。指定された共用ライブラリだけを検索対象とします。

形式

CBLLSLIB=共用ライブラリ名称[:共用ライブラリ名称]…

共用ライブラリ名称

動的にリンクする共用ライブラリの名称を指定します。

規則

共用ライブラリ名称の指定方法には，共用ライブラリのファイル名称だけを指定する方法と，ディレクトリを含めたファイル名称を指定する方法があります。

ファイル名称だけを指定した場合，カレントディレクトリの共用ライブラリだけが動的なリンクの対象となります。

複数の共用ライブラリを検索対象とする場合，コロン（:）で区切って指定します。コロン（:）で区切られた最後の’/’は無視されます。

複数の共用ライブラリを検索対象とする場合，指定した順に検索を行うため，指定順序によって検索時間を短縮できます。

注意事項

LinuxまたはSolaris(SPARC)の場合，環境変数CBLLSLIBにファイル名称だけを指定したとき，カレントディレクトリは検索対象になりませんので，必ず，システム環境変数LD_LIBRARY_PATHで検索パスを設定してください。

AIX(32)またはAIX(64)の場合，アーカイブ形式の共用ライブラリも指定できます。

環境変数CBLLSLIBの指定がない場合，ロード対象の共用ライブラリの検索方法を次に示します。
HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，またはAIX(64)の場合は，環境変数CBLLPATHに指定したディレクトリおよびカレントディレクトリから検索します。
LinuxまたはSolaris(SPARC)の場合，動的なリンクを使用するとき，環境変数CBLLSLIBで共用ライブラリを必ず指定してください。環境変数CBLLSLIBの指定がない場合には，検索する共用ライブラリがないことになります。

システム環境変数LD_LIBRARY_PATH（Linux，Solaris(SPARC)で有効）

共用ライブラリを動的にリンクする場合，検索ディレクトリを指定する環境変数CBLLPATHは使用できません。

共用ライブラリの検索ディレクトリを指定する場合，システム環境変数LD_LIBRARY_PATHで検索パスを設定する必要があります。システム環境変数LD_LIBRARY_PATHについては，システムのldコマンドのリファレンスを参照してください。

注意事項

カレントディレクトリを検索ディレクトリとする場合でも，システム環境変数LD_LIBRARY_PATHで検索パスを設定してください。

環境変数CBLLTAG（AIX(32)，AIX(64)で有効）

環境変数CBLLTAGは，動的なリンクの動作を指示するオプションを指定します。

形式

CBLLTAG=オプション[:オプション]

オプション：SO／NOSO，ARMBR／NOARMBR／ARMBRLSYM

規則

複数のオプションを指定する場合はコロン(:)で区切ります。

この環境変数に指定できるオプションを次に示します。
SO／NOSO
動的なリンクで，検索対象とする共用ライブラリの拡張子を選択できます。
SOを指定した場合は，拡張子「.so」の共用ライブラリを検索対象とします。このオプションの標準値はSOです。
NOSOを指定した場合は，拡張子「.so」の共用ライブラリを検索対象としません。ただし，すでにロードされている共用ライブラリには，このオプションは作用しません。すでにロードされている共用ライブラリとは，次に示す共用ライブラリを指します。
・実行可能ファイル作成時にリンクした共用ライブラリ
・前に呼び出したプログラムのライブラリ作成時にリンクした共用ライブラリ
・ロード関数により，すでにロードされている共用ライブラリ
ARMBR／NOARMBR／ARMBRLSYM
動的なリンクで，検索対象とするライブラリ種別や検索方法を選択できます。
ARMBRとARMBRLSYMを指定した場合は，アーカイブ化された共用ライブラリを検索対象とします。このオプションの標準値はARMBRです。
NOARMBRを指定した場合は，アーカイブ化された共用ライブラリを検索対象としません。
ARMBRとARMBRLSYMの違いを次に示します。
・ARMBR：共用ライブラリ中のデータセクションのシンボル情報から呼び出し先プログラムを検索
・ARMBRLSYM：共用ライブラリ中のローダセクションのシンボル情報から呼び出し先プログラムを検索
注　データセクションのシンボル情報は削除される場合があります。
ARMBR／NOARMBR／ARMBRLSYMは，すでにロードされているアーカイブ化された共用ライブラリについても有効となります。そのため，NOARMBRを指定した場合は，実行可能ファイル作成時にリンクしたアーカイブ化された共用ライブラリは検索対象になりません。
ARMBRは，データセクションのシンボル情報から呼び出し先プログラムを検索します。データセクションのシンボル情報には，エクスポートされている（外部参照できる）シンボル情報（関数名，変数名，位置，タイプ，属性情報など）およびエクスポートされていない（内部参照だけの）シンボル情報などが多数格納されています。
ARMBRLSYMは，共用ライブラリ中のローダセクションのシンボル情報から呼び出し先プログラムを検索します。ローダセクションのシンボル情報には，エクスポートされている（外部参照できる）シンボル情報だけが格納されています。
共用ライブラリのファイル構造については，システムのリファレンスなどを参照してください。
検索方法の違いから，ARMBRよりARMBRLSYMを指定する方がプログラム検索が高速になります。ただし，ARMBRLSYMを指定するとARMBRとは呼び出し先プログラムが異なる場合があります。
アーカイブ化された共用ライブラリが検索ディレクトリに存在するかどうかによって，プログラム検索がより高速となる指定を次に示します。

アーカイブ化された共用ライブラリ | 呼び出しプログラム | プログラム検索が高速な指定
検索ディレクトリに存在する | アーカイブ化された共用ライブラリに含まれる | ARMBRよりARMBRLSYMの方が高速となる
アーカイブ化された共用ライブラリに含まれない | ARMBRよりNOARMBRの方が高速となる※1
検索ディレクトリに存在しない | なし | ARMBRよりNOARMBRの方が高速となる※2

注※1
検索ディレクトリに存在するアーカイブ化された共用ライブラリ，および静的にリンクされているアーカイブ化された共用ライブラリの数や大きさによっては，NOARMBRよりもARMBRLSYMを指定した方が，プログラム検索が高速な場合があります。
注※2
静的にリンクされているアーカイブ化された共用ライブラリの数や大きさによっては，NOARMBRよりもARMBRLSYMを指定した方が，プログラム検索が高速な場合があります。

注意事項

この環境変数を使用する場合は，プログラムの開発環境と実行環境で，必ず，同じオプションを指定してください。

環境変数CBLLSLIBに拡張子「.so」の共用ライブラリ指定した場合，環境変数CBLLTAGにNOSOを指定したときでも，環境変数CBLLSLIBに指定された共用ライブラリは検索対象となります。

NOSO，NOARMBRオプションを指定する場合は，動的なリンクで呼び出すサブプログラムは，次に示す点に注意して作成してください。

指定するオプション
共用ライブラリファイル作成時の注意点

NOSOオプション
共用ライブラリファイルはldコマンドで作成し，拡張子は「.a」にしてください。拡張子を「.so」にした場合は，動的なリンクで呼び出すことができません。

NOARMBRオプション
共用ライブラリファイルは，ldコマンドで作成してください。
ldコマンドで作成した共用ライブラリをarコマンドでアーカイブファイル化した場合は，動的なリンクで呼び出すことができません。

ARMBRLSYMオプションの指定の有無で，ldコマンドの-sオプションやstripコマンド※でシンボル情報を除去した実行可能ファイルや，共用ライブラリ内のプログラムは動的なリンクでの呼び出し可否が次のように異なります。

ARMBRLSYMオプションの指定 | あり | なし
ldコマンドの-sオプションやstripコマンドでシンボル情報を除去した実行可能ファイルや共用ライブラリ内のプログラムの呼び出し | 呼び出せる | 呼び出せない

ldコマンドの-sオプションやstripコマンドでシンボル情報を除去した実行可能ファイルや共用ライブラリ内のプログラムを呼び出す可能性がある場合は，ARMBRLSYMオプションの指定によって呼び出し先プログラムが変わるおそれがあります。動的なリンクのプログラム検索トレース機能を使用して呼び出し先プログラムが変わらないことを確認することを推奨します。
注※
ldコマンドの-sオプションやstripコマンドは，オブジェクト中のデータセクションのシンボル情報を削除することでオブジェクトサイズを小さくするための機能です。詳細は，ldコマンドおよびstripコマンドのリファレンスを参照してください。

アーカイブ形式の共用ライブラリ（AIX(32)，AIX(64)で有効）

AIX(32)またはAIX(64)では，共用ライブラリをarコマンドによってアーカイブファイルにして（アーカイブ形式の共用ライブラリ），共有オブジェクトのメンバとして扱うことができます。arコマンドの使用例は，「34.　実行可能ファイルと共用ライブラリの作成」を参照してください。

AIX(32)またはAIX(64)で共用ライブラリを動的にリンクする場合，アーカイブ形式の共用ライブラリ中のプログラムを動的なリンクで呼び出せます。

ロード対象

環境変数CBLLSLIBにアーカイブ形式の共用ライブラリを指定した場合，アーカイブファイルにある共有オブジェクトのメンバがロード対象になります。

環境変数CBLLSLIBの指定がない場合，カレントディレクトリおよび環境変数CBLLPATHで指定したディレクトリ下のすべての共用ライブラリがロード対象となります。また，その共用ライブラリがアーカイブ形式の場合，ファイル中の共有オブジェクトのメンバがロード対象となります。

注意事項

ネストされたアーカイブは使用できません（ネストされたアーカイブとは，arコマンドでいったん作成したアーカイブを，さらにarコマンドでアーカイブ化することです）。

アーカイブ形式の共用ライブラリに同じ名称のメンバが複数存在する場合は，最初のメンバを対象とします。

アーカイブ形式の共用ライブラリを静的にリンクした場合は，アーカイブ形式でない共用ライブラリを静的にリンクした場合と同じく，リンク時に指定した共用ライブラリが実行開始時にロードされます。

指定が必要なライブラリ（HP-UX(IPF)，HP-UX(IPF64)で有効）

動的なリンクを使用する場合，ELFアクセスライブラリ（libelf.sl）が必要です。

（例）

一意名指定のCALL文での呼び出しの場合は，動的なリンクでの呼び出しとなります。

注意事項

環境変数の値は，プログラムで最初に呼ばれたCALL文の実行時に取得した値が，そのプログラム中で有効になります。

(3)　注意事項

マルチスレッド対応でないCOBOLプログラムの場合，動的にロードされた共用ライブラリは，COBOL実行環境の終了時にアンロードされます。したがって，atexitシステム関数などで，COBOL実行環境の終了後のタイミングで呼び出される関数を登録する場合は，次の点に注意してください。

COBOL実行環境終了後のタイミングで呼び出される関数は，動的にロードされる共用ライブラリに含まれる関数であってはなりません。動的にロードされた共用ライブラリがアンロードされると，その共用ライブラリに静的にリンクされた共用ライブラリもアンロードされます。この場合，静的にリンクされた共用ライブラリに登録する関数についても注意が必要です。

動的にロードされる共用ライブラリのアンロードを抑止するには，環境変数CBLNO_LIBFREEを使用してください。環境変数CBLNO_LIBFREEについては，「18.6.5　共用ライブラリのアンロード」を参照してください。

(4)　プログラムのデバッグ

実行可能ファイルに静的にリンクしたCOBOLプログラムと同様に，動的にリンクした共用ライブラリについてもテストデバッガを使用したデバッグができます。

(5)　動的なリンクを使用するプログラム作成時の注意事項

プログラムの作成時には次のような注意が必要になります。

Cプログラム，または-DynamicLinkオプションを指定しないでコンパイルした呼び出し元プログラムからCALL文で呼び出し先プログラムを呼び出す場合，動的なリンクは行いません。したがって，呼び出し先プログラムは次のような状態でなければなりません。

主プログラムに静的にリンクされている。

すでにロードされた共用ライブラリに含まれる。

呼び出し元プログラムと同じ共用ライブラリに含まれる。

また，呼び出し先プログラムが動的にロードされた共用ライブラリにある場合，その共用ライブラリはアンロードされる場合があります。この場合，呼び出し元プログラムを再実行したときの動作は保証しません。

動的にロードされる共用ライブラリに，静的にリンクされている共用ライブラリに含まれるCプログラムを呼び出す場合，次の注意が必要になります。

Cプログラムには，外部属性を持つ変数の実体を定義してはならない。

動的なリンクによってロードされた共用ライブラリは，COBOLの実行環境終了時にアンロードされます。このとき，システムによってアンロード対象の共用ライブラリに静的にリンクされている共用ライブラリもアンロードされます。この場合，外部属性を持つ変数の実体がなくなるため，プログラムが正常に動作しなくなる場合があります。

Cプログラムで外部属性を持つ変数を参照する場合，その変数の実体はすでに実行されたプログラムで定義しなければなりません。
未実行のプログラムで外部属性を持つ変数の実体が定義されている場合，そのプログラムを含む共用ライブラリがアンロードされる場合があります。このため，外部属性を持つ変数の実体がなくなり，プログラムが正常に動作しない場合があります。

-DynamicLinkオプションを指定したCOBOLオブジェクトファイルをリンクする場合，-lelfオプションの指定が必要です。ccbl2002コマンドを使用してリンクまで実行する場合，-DynamicLinkオプションを指定していると，ccbl2002コマンドがリンク時に-lelfオプションを仮定します。

HP-UX(IPF)またはHP-UX(IPF64)の場合，実行可能ファイル中に存在するプログラムを動的なリンクで呼び出すときは，実行可能ファイル作成（リンク）時に，-Eリンカオプションの指定が必要です。
ccbl2002コマンドを使用してリンクまで実行する場合，-DynamicLink,Callオプションを指定していると，ccbl2002コマンドがリンク時に-Eリンカオプションを仮定します。
-Eリンカオプションについては，システムのマニュアルを参照してください。

Linuxの場合，実行可能ファイル中に存在するプログラムを動的なリンクで呼び出すときは，実行可能ファイル作成（リンク）時に，-Eまたは-export-dynamicリンカオプションの指定が必要です。
ccbl2002コマンドを使用してリンクまで実行する場合，-DynamicLinkオプションを指定していると，ccbl2002コマンドがリンク時に-Eリンカオプションを仮定します。
-Eリンカオプションについては，システムのマニュアルを参照してください。

AIX(32)，AIX(64)の場合，動的なリンクを使用時に作業場所節のデータ記述項にEXTERNAL句を指定し，データを共用するプログラムを使用するときは，実行可能ファイル作成時に，次のリンカオプションを指定してください。

-bexpallオプションまたは-bEオプション
EXTERNAL指定のデータ項目の名称を外部シンボルとしてエクスポートする場合に指定します。
すべてのシンボルをエクスポートする場合は，-bexpallオプションを指定します。エクスポートするシンボルを限定する場合は，-bEオプションでエクスポートするEXTERNAL指定のデータ項目の名称を指定したファイルを指定します。

-brtlオプション
実行時リンクを使用する場合に指定します。

すべてのシンボルをエクスポートして，EXTERNAL句を用いたデータの共用を行う指定例を次に示します。

（例）

ccbl2002 -DynamicLink,Call -OutputFile prog1 prog1.cbl -Wl,-bexpall,-brtl

リンカオプションについては，システムのマニュアルのldコマンドに関する説明を参照してください。

利用者定義関数を含めた共用ライブラリは，動的なリンク（プログラム呼び出した時にメモリにロードされるリンク方法）では呼び出せません。

プログラムの作成方法については，「34.　実行可能ファイルと共用ライブラリの作成」を参照してください。

(6)　動的なリンクを使用する場合の注意事項

動的なリンクでは，独自に共用ライブラリのロードやアンロードを管理しています。そのため，プログラムの実行中に，共用ライブラリのロードやアンロードに関連するシステム関数※を，ユーザプログラムから呼び出してはなりません。

注※

共用ライブラリのロードやアンロードに関連するシステム関数は，次のとおりです。

HP-UX(IPF)，HP-UX(IPF64)の場合

shl_load，shl_unload

AIX(32)，AIX(64)，Linux，Solaris(SPARC)の場合

dlopen，dlclose

18.6.3　動的なリンクのプレロード機能（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

実行単位内で最初に実行されるCOBOLプログラムの起動時に，動的なリンクで検索対象となる共用ライブラリをロードすることで，動的なリンクによるCALL文実行時の呼び出し先プログラムの検索を高速化できます。

＜この項の構成＞

(1)　環境変数

(1)　環境変数

動的なリンクのプレロード機能を有効にするには，実行時環境変数CBLPRELOADに，プレロードする共用ライブラリ名称を記述したファイル（プレロードリストファイル）名を絶対パスで指定します。

形式

CBLPRELOAD=プレロードリストファイル名

プレロードリストファイルの形式

プレロードする共用ライブラリ名称を記述します。アーカイブ形式の共用ライブラリ（アーカイブファイルのメンバ）をプレロードする場合は，「アーカイブファイル名称(メンバ名称)」の形式で指定します。

1行に一つの共用ライブラリ名称を記述します。複数行，記述できます。

空行は無視されます。

行の先頭がシャープ"#"(X'23')の行はコメント行とみなされます。

行の長さが4,096バイトを超えた場合，その行は無視されます。

プレロードリストファイルに記述した文字の扱いを次に示します。

文字
文字の扱い

半角空白および水平タブ文字
次の半角空白文字（X'20'），水平タブ文字（X'09'）は無視されます。

行の先頭から共用ライブラリ名称の先頭まで

共用ライブラリ名称の終端から改行まで

シャープ"#"
行の先頭がシャープ"#"（X'23'）の行はコメント行とみなされます。

上記以外の文字
共用ライブラリ名称の一部とみなされます。

プレロードリストファイルの記述例

# プレロードする共用ライブラリ
/tmp/test01.a
# プレロードするアーカイブ形式の共用ライブラリ
/tmp/archive.a(test02.a)

規則

プレロードする共用ライブラリは，実行単位内で最初に実行されるCOBOLプログラムの起動時にロードします。プレロード機能でロードした共用ライブラリはプロセス終了までアンロードされません。

プレロードする共用ライブラリ名称は，絶対パスで指定してください。

プレロード機能でロードした共用ライブラリ内のプログラムは，環境変数CBLLPATHやCBLLSLIBを指定しなくても動的なリンクによるCALL文で呼び出せます。

プレロードリストファイル名に誤りがある，アクセス権がないなどの理由でプレロードリストファイルが開けない場合，警告メッセージが出力されます。このとき，プレロード機能は有効となりません。

プレロードリストファイルに記述した共用ライブラリのロードに失敗した場合，警告メッセージが出力されて処理が続行されます。

18.6.4　動的なリンクのプログラム検索トレース機能（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

プログラム検索トレース機能では，次のトレース情報を出力します。

動的なリンクによる，プログラム呼び出し時の共用ライブラリの検索情報

プレロード時の共用ライブラリのロード情報

＜この項の構成＞

(1)　環境変数CBLPGMSEARCHTRC

(2)　環境変数CBLPGMSEARCHTRC_SIZE

(3)　注意事項

(4)　プログラム検索トレースの内容

(1)　環境変数CBLPGMSEARCHTRC

実行時環境変数CBLPGMSEARCHTRCには，トレース情報を出力するファイル名を指定します。

形式

CBLPGMSEARCHTRC=プログラム検索トレースファイル名

規則

プログラム検索トレースファイル名は，絶対パスで指定してください。

プログラム検索トレースファイル名のパスに誤りがある，アクセス権がないなどの理由で，プログラム検索トレースファイルが開けない場合，警告メッセージが出力されます。このとき，プログラム検索トレース情報は出力されません。

次のどれかに該当するCALL文では，プログラム検索トレース情報は出力されません。
・-DynamicLinkオプションの指定がないCOBOLプログラムのCALL文
・-DynamicLink,IdentCallオプションを指定したCOBOLプログラムの定数指定のCALL文
・-DynamicLink,Callオプションを指定したCOBOLプログラムの定数指定のCALL文による内部プログラム呼び出し
・-DynamicLink,Callオプションを指定したCOBOLプログラムの定数指定のCALL文による2回目以降のプログラム呼び出し

実行時環境変数CBLPGMSEARCHTRCに指定したプログラム検索トレースファイル名は，次の形式のファイル名に変更されて出力されます。
[形式]
ファイル名[_i]_j.拡張子
i：スレッド識別子の値です。マルチスレッド対応COBOLプログラムのときだけ付加されます。
j：管理番号です。1または2が付加されます。

プログラム検索トレースファイルのファイルサイズが実行時環境変数CBLPGMSEARCHTRC_SIZEの指定値を超えた場合，管理番号を切り替えて，ファイルの先頭からトレース情報が出力されます。切り替え後のファイル名と同一名称のファイルが存在する場合，同一名称のファイルは削除されます。必要な場合は，削除される前にバックアップをとってください。

複数プロセスが並列で実行される場合，プログラム検索トレースファイル名には一意となる名称を指定する必要があります。同じプログラム検索トレースファイル名を指定し，プログラムを並列で実行した場合のプログラム検索トレースの出力結果は保証しません。

-DynamicLink,Callオプションを指定したCOBOLプログラムでADDR関数にプログラム名を指定した場合，ADDR関数でのプログラム検索情報がCALL文のプログラム検索トレースとして出力されます。

ディスクの空き容量不足などで，プログラム検索トレースファイルへのトレース出力中にエラーが発生した場合は，それ以降のトレース情報は出力されません。なお，このとき，実行時メッセージは出力されません。

(2)　環境変数CBLPGMSEARCHTRC_SIZE

実行時環境変数CBLPGMSEARCHTRC_SIZEには，プログラム検索トレースファイル名を切り替えるサイズを指定します。

形式

CBLPGMSEARCHTRC_SIZE=プログラム検索トレースファイル名を切り替えるサイズ(1～2,000,000)

規則

ファイルサイズはKB単位で指定してください。

指定に誤りがある場合，または指定がない場合は10,240が仮定されます。

実行時環境変数CBLPGMSEARCHTRC_SIZEの指定に従い，プログラム検索トレースファイルのサイズが指定値の上限を超えた場合，ファイル名の管理番号が切り替えられます。
切り替え先のファイルが開けないときは，警告メッセージが出力されます。なお，それ以降のプログラム検索トレースは出力されません。

プログラム検索トレースファイルの管理番号1のファイルが存在しない場合は，管理番号1のファイルにトレース情報が出力されます。管理番号1のファイルがすでに存在する場合は，次に示す管理番号のファイルにトレース情報が出力されます。

管理番号1ファイル | 管理番号2のファイル | トレース情報出力
ファイルサイズが上限を超えていない | － | 管理番号1のファイルに追加書きで出力する
ファイルサイズが上限を超えている | ファイルが存在しない | 管理番号2のファイルを作成して出力する
ファイルが存在する | ファイルサイズが上限を超えていない | 管理番号2のファイルに追加書きで出力する
ファイルサイズが上限を超えている | 最終更新日時が古い管理番号のファイルを削除，作成して出力する

（凡例）

－：条件なし

(3)　注意事項

プログラム検索トレース機能機能はデバッグ機能です。プログラム検索トレース機能を使用すると，動的なリンクの実行性能が低下するため，デバッグ時にだけ使用してください。

Linux(x86)，Linux(x64)の場合，プログラム検索トレースの共用ライブラリ名の情報には，環境変数CBLLSLIBに指定した値がそのまま出力されます。環境変数CBLLSLIBに共用ライブラリ名を絶対パスで指定していない場合，検索対象の共用ライブラリがどこに存在するのかは，システム環境変数LD_LIBRARY_PATHに指定されたパスを先頭から順に確認することで特定できます。

(4)　プログラム検索トレースの内容

日付/時刻を出力する。

トレース出力の契機を出力する。

PRE | 環境変数CBLPRELOADで指定されたプレロードリストファイルに記述された共用ライブラリの情報を出力する。
PROG | CALL文が実行されたプログラム名を5.に示す。
CALL | CALL文の処理であることを示す。3.がprogramの場合，呼び出すプログラム名を5.に示す。

処理内容の詳細を出力する。

open | ファイルのオープン処理であることを示す。
load | 共用ライブラリのロード処理であることを示す。
program | 呼び出し先プログラムの検索処理を開始したことを示す。
search | プログラムの検索処理であることを示す。
getaddr | プログラムのアドレス取得処理であることを示す。

処理の実行結果を出力する。

SUCCESS | 処理が成功したことを示す。
WARNING | 処理中にエラーが発生したことを示す。処理は継続する。
ERROR | 処理中にエラーが発生したことを示す。処理は終了する。
NOTFOUND | 処理を実行した結果，呼び出し先プログラムが見つからなかったことを示す。
FOUND | 処理を実行した結果，呼び出し先プログラムが見つかり，プログラム検索処理が終了したことを示す。

処理の対象ファイルまたは対象プログラムを出力する。

INSIDE PROGRAM | 呼び出しできる内側のプログラムに対する処理であることを示す。
CALLED PROGRAMS | 呼び出し済みプログラムに対する処理であることを示す。
LINKED TO STATICALLY | 静的にリンクされた最外側のプログラムに対する処理であることを示す。
ALREADY LOADED LIBRARY | ロード済みの共用ライブラリに対する処理であることを示す。
上記以外(ファイル名またはプログラム名) | ファイルまたはプログラムに対する処理であることを示す。

環境変数CBLPRELOADの指定がある場合は，プレロードリストファイルに記述された共用ライブラリに対するロード結果を出力する。ロード失敗時は，エラー番号(n)と詳細メッセージ(xxxxx)を出力する。
なお，エラー原因によっては，詳細メッセージが出力されない場合がある。また，Linuxの場合のエラー番号は不定である。
環境変数CBLPRELOADの指定がない場合，環境変数CBLPRELOADの情報は出力しない。

呼び出しできる内側のプログラムの中から呼び出し先プログラムを検索した結果を出力する。この情報は，一意名指定のCALL文のときだけ出力する。

動的なリンクによってすでに呼び出しされたプログラムから呼び出し先プログラムを検索した結果を出力する。

静的にリンクされた最外側のプログラムから呼び出し先プログラムを検索した結果を出力する。ただし，Linuxの場合，9.と10.を同時に処理するため，10.の出力だけとなる。

すでにロードされている共用ライブラリ中から呼び出し先プログラムを検索した結果を出力する。なお，Linuxの場合，9.の静的にリンクされた最外側のプログラムからの検索処理を含む。

未ロードの共用ライブラリから呼び出し先プログラムを検索した結果を出力する。
AIXの場合，環境変数CBLLTAGにNOARMBRが指定されていない環境では，すでにロードされているシステムの共用ライブラリなどを検索した結果も出力する。

呼び出し先プログラムを含む共用ライブラリをロードした結果を出力する。

呼び出し先プログラムのアドレスを取得した結果を出力する。

共用ライブラリのロードに失敗した場合，エラー番号と詳細メッセージを出力する。なお，エラー原因によっては，詳細メッセージが出力されない場合がある。また，Linuxの場合のエラー番号は不定である。

18.6.5　共用ライブラリのアンロード

動的なリンクによって呼び出された共用ライブラリだけがアンロードされます。

＜この項の構成＞

(1)　アンロード条件

(2)　アンロードの抑止

(1)　アンロード条件

動的にロードされた共用ライブラリは，COBOLの実行環境の終了時にアンロードされます。

注意事項

次の場合，共用ライブラリはアンロードされません。

マルチスレッド対応COBOLプログラムの場合

(2)　アンロードの抑止

環境変数CBLNO_LIBFREEを使用すると，動的にロードされた共用ライブラリのアンロードを抑止できます。

環境変数CBLNO_LIBFREE

COBOL実行環境の終了時に，動的にロードされた共用ライブラリのアンロードを抑止します。

形式

CBLNO_LIBFREE=EXIT

規則

動的にロードされた共用ライブラリは，COBOL実行環境の終了時にアンロードされます。atexitシステム関数などのように，COBOL実行環境の終了後のタイミングで呼び出される関数を，共用ライブラリに登録する場合に，環境変数CBLNO_LIBFREEを使用し，関数の呼び出しに失敗し異常終了することを回避します。

注意事項

環境変数CBLNO_LIBFREEにEXITを指定した場合，動的にロードされたすべての共用ライブラリが対象となります。

18.7　実行可能ファイルの呼び出し

CALL文で実行可能ファイルの呼び出しができます。

実行可能ファイルとは，ccbl2002コマンドなどで作成した実行可能ファイルやシェルのように，単独で実行できるファイルのことです。

＜この節の構成＞

18.7.1　実行可能ファイル呼び出しの概要

18.7.2　実行方式

18.7.3　実行可能ファイルの指定

18.7.4　引数の受け渡し

18.7.5　実行可能ファイルの終了コードの取得

18.7.6　実行可能ファイルを呼び出す場合の注意事項

18.7.1　実行可能ファイル呼び出しの概要

CALL文で呼び出すプログラムの名称中にファイル拡張子の区切り文字のピリオド（.）が含まれる場合（例：a.out），実行可能ファイルが指定されたものとみなされます。

注意事項

実行可能ファイルのファイル名を引用符（ " ）で囲むと，引用符（ " ）もファイル名の一部として認識されます。

（例）

「PROG.1 ZIKKOU.out」というファイルがあった場合

・CALL ' PROG.1 ZIKKOU.out '
   →  「PROG.1 ZIKKOU.out」が呼び出される。

・CALL ' "PROG.1 ZIKKOU.out" '
   →  「"PROG.1 ZIKKOU.out"」と認識され，実行時エラーになる。

18.7.2　実行方式

CALL文で実行可能ファイルを指定すると，新しいプロセスが起動し，実行可能ファイルは，そのプロセスで実行されます。呼び出し元のプログラムは，実行可能ファイルの終了後，次の処理に移ります。

新しいプロセスが起動できない場合，CALL文にON EXCEPTIONまたはON OVERFLOWの指定があれば，この指定が有効となります。指定がなければ，共通例外処理で定義した処理を実行します。共通例外処理を使用しないときは，エラーメッセージが出力され，実行単位が異常終了します。

新しいプロセスのカレントディレクトリや環境変数などの実行環境は，呼び出し元のプログラムの実行環境が引き継がれます。

外部属性を持つデータ項目のようなプログラム内で定義した情報は，呼び出し元プログラムと呼び出し先プログラムとでプロセスが異なるため共用はできません。

18.7.3　実行可能ファイルの指定

＜この項の構成＞

(1)　実行可能ファイル名の指定方法

(2)　ファイルの検索順序

(1)　実行可能ファイル名の指定方法

実行可能ファイル名は，CALL 定数，CALL 一意名のどちらでも指定できます。実行可能ファイルの指定方法には次の二つの方法があります。

ディレクトリを含めたパス名で指定する。

ディレクトリを含めないファイル名だけで指定する。

どちらの場合も，ファイル名は拡張子を含めて指定します。拡張子のないファイルを指定するときは，ファイル名のあとに区切り文字のピリオド（.）を付けて指定します。

ファイル名がピリオド（.）で終わる場合，ファイル名の最後のピリオド（.）のあとに，さらに実行可能ファイルの呼び出しであることを示す区切り文字のピリオド（.）を指定します。

(2)　ファイルの検索順序

パス名で指定した場合，実行されるファイルは，指定したディレクトリのファイルとなります。

ファイル名だけを指定した場合は，環境変数PATH内に登録されているディレクトリから検索され，最初に見つかったファイルが実行されます。

環境変数PATH内に登録されているディレクトリ

18.7.4　引数の受け渡し

実行可能ファイルが利用者引数（例えば，a.out AAAとして実行した場合のAAA）を必要とする場合，実行可能ファイルに引数を渡すには次の方法があります。

＜この項の構成＞

(1)　USING 一意名による方法

(1)　USING 一意名による方法

USING 一意名を指定すると，一意名に指定した値は，そのままの利用者引数となります。

（例）

      01 PARM PIC X(3) VALUE 'AAA'.
          :
      CALL 'a.out' USING PARM.

この場合，「a.out AAA」という形でa.outが起動します。

複数の引数を渡す場合は，複数の一意名に分けて指定します。

なお，BY REFERENCE／BY VALUE／BY CONTENTなどのBY～指定に関係なく，一意名に格納された値を引数として渡します。

18.7.5　実行可能ファイルの終了コードの取得

CALL文で実行可能ファイルを呼び出す場合，実行可能ファイルの終了コードは，呼び出し元のRETURN-CODE特殊レジスタ，またはCALL文のRETURNING指定で参照できます。CALL文にRETURNING指定をした場合は，RETURN-CODE特殊レジスタでは参照できません。

上記のどちらの場合でも，UNIXでは利用しているシステムの仕様に従って，1バイト（8ビット）で表現できる値が取得できます。

詳細は，「17.2　復帰コードと返却項目」を参照してください。

18.7.6　実行可能ファイルを呼び出す場合の注意事項

実行可能ファイルを呼び出す場合，次の点に注意する必要があります。

実行可能ファイルの呼び出しでエラーが発生した場合，SIGUSR1シグナルが発生します。このため，次のような処理をする場合で，SIGUSR1シグナルの変更があるときは，デフォルト状態へ変更するためにSIG_DFLの割り当てを行う必要があります。

実行可能ファイルを呼び出すCOBOLプログラムを，ほかのプログラムから呼び出す場合

ほかのプログラムから，実行可能ファイルを呼び出すCOBOLプログラムに戻る場合

19.　他言語とのプログラム間連絡

この章では，COBOLプログラムとほかの言語で作成したプログラムとを連携させる方法について説明します。

＜この章の構成＞

19.1　C言語との連携

19.1　C言語との連携

＜この節の構成＞

19.1.1　概要

19.1.2　CプログラムからCOBOLプログラムを呼び出す方法

19.1.3　COBOLプログラムからCプログラムを呼び出す方法

19.1.4　注意事項

19.1.5　外部属性を持つデータ項目の共用

19.1.6　COBOLプログラムとCプログラムのリンク方法

19.1.1　概要

＜この項の構成＞

(1)　COBOLプログラム，Cプログラム間でのプログラムの呼び出し

(2)　COBOLプログラム，Cプログラム間での引数の引き渡し方法

(3)　64bitアプリケーション作成時の注意事項（UNIX64で有効）

(4)　他言語で標準出力や標準エラー出力をする場合の注意事項

(5)　Linux(x64) COBOL2002コンパイル時の注意

(1)　COBOLプログラム，Cプログラム間でのプログラムの呼び出し

COBOLプログラムからCプログラムを呼び出したり，逆にCプログラムからCOBOLプログラムを呼び出したりできます。

ただし，COBOLプログラムを呼び出すCプログラムや，COBOLプログラムから呼び出されるCプログラムは，システムの規則に従って作成する必要があります。

(2)　COBOLプログラム，Cプログラム間での引数の引き渡し方法

COBOLプログラムとCプログラムとの間で引数を引き渡すには次の方法があります。

ポインタ型で引き渡す方法

値渡しで引き渡す方法

CALL文の引数にADDRESS OF／LENGTH OF一意名を指定する方法（ただし，COBOLからCを呼ぶ場合だけ）

(3)　64bitアプリケーション作成時の注意事項（UNIX64で有効）

Cプログラムは，64bitアプリケーションとして作成しなければならず，システムによってはCコンパイラのオプションが必要な場合があります。Cコンパイラのオプションについては，システムのマニュアルを参照してください。64bitアプリケーションでは，ポインタ型およびlong型のサイズは8バイトになります。

(4)　他言語で標準出力や標準エラー出力をする場合の注意事項

標準出力や標準エラー出力をしている他言語プログラムのあとに呼び出されるCOBOLプログラムで，DISPLAY文や実行時メッセージを標準出力や標準エラー出力に出力している場合，データの出力順が前後することがありますので，COBOLプログラムを呼び出す前に標準出力や標準エラー出力のバッファをフラッシュしてください。

(5)　Linux(x64) COBOL2002コンパイル時の注意

Linux(x64) COBOL2002は，スモールコードモデルのオブジェクトコードを生成します。したがって，COBOLプログラムと連携させるC言語プログラムはスモールコードモデルでコンパイルされている必要があります。スモールコードモデルの詳細およびC言語プログラムをスモールコードモデルでコンパイルする方法については，システムのマニュアルを参照してください。

19.1.2　CプログラムからCOBOLプログラムを呼び出す方法

CプログラムからCOBOLプログラムを呼ぶときの規則を示します。

＜この項の構成＞

(1)　CからCOBOLを呼ぶときの規則

(2)　COBOLのデータ項目とCプログラムの型の対応

(3)　引数の受け渡し

(4)　戻り値の受け渡し

(1)　CからCOBOLを呼ぶときの規則

Cプログラム内で宣言された外部変数，およびCOBOLプログラム内の外部属性を持つデータ項目は，それぞれのプログラムで参照できます。外部属性を持つデータ項目の参照方法については，「19.1.5　外部属性を持つデータ項目の共用」を参照してください。

Cプログラムは，COBOLプログラムのRETURN-CODE特殊レジスタに設定された戻り値を関数の戻り値として参照できます。COBOLプログラムが返す戻り値の有効な範囲については，「17.2　復帰コードと返却項目」を参照してください。

CプログラムからCOBOLプログラムを呼び出す場合，COBOL主プログラムとCOBOL副プログラムによってGOBACK文，EXIT PROGRAM文の動作が異なります。詳細については，「16.3　COBOL実行単位の終了」を参照してください。

CプログラムからCOBOLプログラムを呼び出して，浮動小数点型データの引数渡しをする場合，Cプログラムでプロトタイプ宣言を行い，データ型を明確にする必要があります。また，COBOLプログラムの受け取り側作用対象は，次の規則に従う必要があります。

単精度浮動小数点型データの引数渡しをする場合，受け取り側作用対象の属性はCOMP-1とする。

倍精度浮動小数点型データの引数渡しをする場合，受け取り側作用対象の属性はCOMP-2とする。

手続き部見出しにRETURNING指定がある場合，COBOLプログラムの返却項目は，そのデータ項目に対応したC言語のデータ型にしなければなりません。RETURNING指定がない場合はint型にしなければなりません。

Cプログラムでは，COBOLプログラムの手続き部見出しのRETURNINGのデータ項目（返却項目）に設定した戻り値を参照できます。RETURNING指定がない場合は，RETURN-CODE特殊レジスタを参照します。

COBOLプログラムに-MultiThreadオプションを指定した場合，システムのスレッドライブラリを指定する必要があります。詳細は，「34.　実行可能ファイルと共用ライブラリの作成」を参照してください。マルチスレッド対応COBOLプログラムについては，「26.　マルチスレッド環境での実行」を参照してください。

利用者定義関数やメソッド定義は，Cプログラムから呼び出せません。

(2)　COBOLのデータ項目とCプログラムの型の対応

COBOLとCのデータ型の対応を，次に示します。引数や戻り値などでデータを受け渡す場合は，この規則に従う必要があります。

表19-1　COBOLのデータ項目とCプログラムの型の対応

COBOL
C

char
unsigned char
short
unsigned short
int,
long
unsigned int,
unsigned long
long long※¹⁵
unsigned long long※¹⁵
float
double
ポインタ
構造体

固定長集団項目

×
×

○※1

可変長集団項目

×
×

×

英字項目
○※²
○※²

×
×

英数字項目
○※²
○※²

×
×

英数字編集項目

×
×

外部10進項目
○※³
○※³

×
×

内部10進項目

×
×

2進項目
○※⁴※¹⁶
○※⁴
○※⁵
○※⁵
○※⁶※¹¹
○※⁶※¹¹
○※¹³
○※¹³
×
×

COMP-X
○※⁷
○※⁷
○※⁸
○※⁸
○※⁹※¹²
○※⁹※¹²
○※¹⁴
○※¹⁴
×
×

数字編集項目

×
×

外部浮動小数点数字項目

×
×

単精度内部浮動小数点数字項目
×
×
×
×
×
×
×
×
○※10
×
×
×

倍精度内部浮動小数点数字項目
×
×
×
×
×
×
×
×
×
○※10
×
×

アドレスデータ項目

×
×
○

指標データ項目

×
×

日本語項目

×
×

日本語編集項目

×
×

外部ブール項目

×
×

内部ブール項目

×
×

英数字定数
○※2
○※2

×
×

数字定数

○

×
×

浮動小数点数字定数
×
×
×
×
×
×
×
×
×
○
×
×

ZERO

○

×
×

NULL

×
×
○

オブジェクト参照項目

×
×

強く型付けされた集団項目

×
×

（凡例）

○：指定できる

空白：受け渡しできるかどうかはプラットフォームに依存するため，動作保証についてはユーザ責任とする

×：指定してはならない。指定したときの結果は保証しない

注※1

COBOLの集団項目を受け渡しする場合，Cプログラムでの境界調整を考慮して引数のデータ項目を定義する必要があります。

COBOLの集団項目は，標準では各基本項目がすき間なく配置されるのに対し，Cプログラムでは計算機固有の境界に従って配置されます。このため，あらかじめ境界調整される分の未使用領域を定義しておくなど，計算機固有の境界調整を意識したデータを定義しておくことを推奨します。

なお，COBOLでは，SYNCHRONIZED句を指定することで計算機固有の境界調整に従って各基本項目を配置できます。

HP-UX(IPF)，HP-UX(IPF64)，およびLinux(IPF64)では，プラットフォームの規約とCOBOL言語仕様の差異によって，C言語モジュールとの間で次の構造体を値渡しの引数，または返却値として受け渡しした場合の動作は保証しません。

・float型のメンバだけで構成された構造体

・double型のメンバだけで構成された構造体

Linux(x64)では，プラットフォームの規約とCOBOL言語仕様の差異によって，従属項目として内部浮動小数点項目をもつ16バイト以下の集団項目を値渡し（BY VALUE）の引数および返却項目に指定した場合，C言語プログラムとの間での引数および返却項目の受け渡しは保証しません。

このような場合，次に示すどれかの方法でプログラムを修正する必要があります。

・集団項目ではなく同じサイズの文字列項目として値の受け渡しをする。

・値渡しではなく参照渡し（BY REFERENCE）または内容渡し（BY CONTENT）に変更する。

・集団項目のサイズが16バイトを超えるようにする。

なお，-Lx64ConventionCheckオプションを指定すると，次の条件を満たす場合に警告レベルのエラーメッセージが出力されます。

1.　サイズが16バイト以下の集団項目を値渡しの引数および返却項目に指定している。

2.　1.の集団項目の従属項目に内部浮動小数点項目がある。

Linux(x86)では，プラットフォームの規約とCOBOL言語仕様の差異によって，サイズが1バイトのCOBOL集団項目とサイズが1バイトのC言語構造体との間で返却項目の受け渡しはできません。

HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，およびSolaris(SPARC)では，プラットフォームの規約とCOBOL言語仕様の差異によって，サイズが1バイトのCOBOL集団項目とサイズが1バイトのC言語構造体との間で値渡し（BY VALUE）の引数および返却項目の受け渡しはできません。

注※2

標準文字集合で1文字の場合はchar型，2文字以上の場合は次の構造体と対応づけます（nは文字数，nameは任意のフィールド名とします）。

struct {

　　char name[n];

};

注※3　SEPARATE指定なしの1けたです。

注※4　-Bin1Byteオプションの指定がある場合，1～2けた（割り当てられる記憶域のサイズが1バイト）の整数です。

注※5

-Bin1Byteオプションの指定がない場合，1～4けたの整数です。

-Bin1Byteオプションの指定がある場合，3～4けた（割り当てられる記憶域のサイズが2バイト）の整数です。

注※6

UNIX32の場合，5～9けたの整数です。

UNIX64の場合，intまたはunsigned intのとき，5～9けたの整数です。

注※7　割り当てられる記憶域のサイズが1バイトの場合，指定できます。

注※8　割り当てられる記憶域のサイズが2バイトの場合，指定できます。

注※9

UNIX32の場合，割り当てられる記憶域のサイズが4バイトの場合，指定できます。

UNIX64の場合，intまたはunsigned intのとき，割り当てられる記憶域のサイズが4バイトの場合，指定できます。

注※10　CプログラムからCOBOLプログラムに引数を渡す場合，プロトタイプ宣言が必要です。

注※11　UNIX64の場合，longおよびunsigned longのとき，10～18けたの整数です。

注※12　UNIX64の場合，データ型がlongおよびunsigned longで，割り当てられる記憶域のサイズが8バイトのときに指定できます。

注※13　10～18けたの整数です。

注※14　割り当てられる記憶域のサイズが8バイトの場合，指定できます。

注※15　Solaris(SPARC)の場合，値渡し（BY VALUE）引数および返却項目のとき，C言語のlong long型またはunsigned long long型の変数と値の受け渡しはできません。

注※16　符号修飾子を省略したとき，unsigned charと解釈するCコンパイラを使用する場合，明示的にsigned charと書くか，または適切なCコンパイラのオプションを指定してsigned charと解釈されるようにする必要があります。

(3)　引数の受け渡し

CプログラムからCOBOLプログラムへ引数を渡す方法を，次に示します。

(a)　引数をポインタ型で受け取る例

Cプログラム

int SAMPLE2(int *,char *);
   :
int SAMPLE1(....)
{
int  cnt;
char  str[80];
   :
 SAMPLE2(&cnt,str);
   :
 return(0);
}

COBOLプログラム

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE2.
          :
      LINKAGE SECTION.
      01 CNT PIC S9(9) USAGE COMP.
      01 STR PIC X(80).

      PROCEDURE DIVISION USING BY REFERENCE CNT STR.
          :

CプログラムからCOBOLプログラムへ引数がアドレスによって渡された場合，COBOLプログラム内で受け取る引数にBY VALUEを指定してはいけません。

COBOLプログラムは，Cプログラムから数字項目を受け取る場合，内部・外部10進項目，内部・外部浮動小数点数字項目などの数字属性を意識する必要があります。

(b)　引数を値渡しで受け取る例

Cプログラム

int  SAMPLE2(int,char);
int  SAMPLE1(....)
{
int  cnt;
char  str;
   :
 SAMPLE2(cnt,str);
   :
 return(0);
}

COBOLプログラム

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE2.
          :
      LINKAGE SECTION.
      01 CNT PIC S9(9) USAGE COMP.
      01 STR PIC X(1).

      PROCEDURE DIVISION USING BY VALUE CNT STR.
          :

CプログラムからCOBOLプログラムへ引数が値渡しされた場合，PROCEDURE DIVISION USINGでBY VALUE指定する必要があります。

Cプログラム内で設定する引数は，すべて値渡しである必要があります。

COBOLのデータ項目とCプログラムの型の対応については，「表19-1　COBOLのデータ項目とCプログラムの型の対応」を参照してください。

(4)　戻り値の受け渡し

COBOLプログラムからCプログラムへ戻り値を返す方法を，次に示します。

(a)　整数型のデータ項目を返す例

Cプログラム

extern int SAMPLE2();
   :
int main()
   {
   int rtc;
   :
   rtc = SAMPLE2();
   :
   }

COBOLプログラム

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE2.
          :
      LINKAGE SECTION.
      01 RTC PIC S9(9) USAGE COMP.
      PROCEDURE DIVISION RETURNING RTC.
          :
          MOVE 12345 TO RTC.
          EXIT PROGRAM.

(b)　構造体型のデータ項目を返す例

Cプログラム

struct tbl{ int a; char b[10];};
extern struct tbl SAMPLE2();
int main()
   {
 struct tbl rtc;
   :
   rtc = SAMPLE2();
   :
   }

COBOLプログラム

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE2.
          :
      LINKAGE SECTION.
      01 TBL.
        02 A PIC S9(9) USAGE COMP.
        02 B PIC X(10).

      PROCEDURE DIVISION RETURNING TBL.
          :
          EXIT PROGRAM.

注意事項

C言語の構造体の場合，要素の境界調整でパディング（領域間のギャップを埋めるために挿入される暗黙のFILLER項目）が挿入されます。そのほかに，構造体のサイズを最大の基本要素サイズの倍数に切り上げるため，パディングが挿入されることがあります。この場合，パディングは構造体の末尾に挿入されます。例えば上記の例の構造体tblの場合，要素の合計のサイズはCOBOLの集団項目TBLと同じ14バイトですが，構造体のサイズを4バイト（最大の基本要素のサイズ）の倍数の16バイトにするために，2バイトのパディングが構造体の末尾に挿入されます。このため，COBOLの集団項目TBLとはサイズが不一致になります。プラットフォームによっては，このサイズの不一致が原因で，引数や戻り値の受け渡しで異常終了や結果不正となることがあるため，次のどちらかの方法でC言語の構造体のサイズとCOBOLの集団項目のサイズを一致させる必要があります。

C言語の構造体のサイズをCOBOLの集団項目のサイズに合わせる方法
構造体を詰めて配置するC言語の機能（C言語の言語仕様の#pragma packやC言語のコンパイラのコンパイラオプションで提供されている）を使って構造体tblのサイズを14バイトにします。構造体を詰めて配置するC言語の機能については，各システムのCコンパイラのリファレンスを参照してください。

COBOLの集団項目のサイズをC言語の構造体のサイズに合わせる方法
COBOLの集団項目TBLのサイズを16バイトにするために，COBOLの集団項目TBLの末尾に次の2バイト分のFILLER項目を追加してください。

　　02 FILLER PIC X(2).

19.1.3　COBOLプログラムからCプログラムを呼び出す方法

COBOLプログラムからCプログラムを呼ぶときの規則を示します。

＜この項の構成＞

(1)　COBOLからCを呼ぶときの規則

(2)　Cプログラムの型とCOBOLでの宣言

(3)　引数の受け渡し

(4)　戻り値の受け渡し

(1)　COBOLからCを呼ぶときの規則

COBOLプログラムを-DebugInf，-DebugInf,Trace，-DebugCompati，-DebugData，-TDInf，-CVInfまたは-DebugRangeオプション指定でコンパイルし，Cプログラムで例外処理をした場合，異常終了時の結果は保証しません。

Cプログラム内で宣言された外部変数，およびCOBOLプログラム内の外部属性を持つデータ項目はそれぞれのプログラムで参照できます。外部属性を持つデータ項目の参照方法については，「19.1.5　外部属性を持つデータ項目の共用」を参照してください。

COBOLプログラムは，Cプログラムのreturn文で設定された関数値をRETURN-CODE特殊レジスタとして参照できます。Cプログラムが返す関数値の有効な範囲については，「17.2　復帰コードと返却項目」を参照してください。

COBOLプログラムからCプログラムを呼び出して，内部浮動小数点項目の引数渡しをする場合，受け取りのデータ型は次の規則に従う必要があります。

単精度内部浮動小数点項目の引数渡しをする場合，受け取りのデータ型はfloatとする。

倍精度内部浮動小数点項目，または浮動小数点数字定数の引数渡しをする場合，受け取りのデータ型はdoubleとする。

CALL文にRETURNING指定がある場合，Cプログラムの戻り値は，そのデータ項目に対応したC言語のデータ型にする必要があります。RETURNING指定がない場合はint型にする必要があります。

COBOLプログラムでは，Cプログラムのreturn文で設定した戻り値を，呼び出されたCALL文に指定したRETURNINGのデータ項目として参照できます。RETURNING指定がない場合はRETURN-CODE特殊レジスタで参照します。

CALL 一意名でCプログラムを呼ぶ場合，次の点に注意する必要があります。

共用ライブラリ中のCプログラムを呼ぶ場合，共用ライブラリのエクスポート情報中にプログラム名がなければなりません。このため，リンク時にオプションの指定によってプログラムをエクスポートしなかった場合，そのプログラムはCALL 一意名では呼び出せません。

(2)　Cプログラムの型とCOBOLでの宣言

Cプログラムのデータ型と，対応するCOBOLのデータ項目の型を，次に示します。

Cプログラムのデータ型
対応するCOBOLのデータ項目の型

unsigned char
-Bin1Byte指定あり
符号なし2進項目（1～2けた）

9(1) COMP ～ 9(2) COMP

-Bin1Byte指定なし

9(1) COMP-X ～ 9(2) COMP-X

－
英数字項目（1けた）

X(1)

char
-Bin1Byte指定あり
符号付き2進項目（1～2けた）

S9(1) COMP ～ S9(2) COMP※5

－
英数字項目（1けた）

X(1)

unsigned short
－
符号なし2進項目（3～4けた）

9(3) COMP ～ 9(4) COMP
9(3) COMP-X ～ 9(4) COMP-X

short
－
符号付き2進項目（3～4けた）

S9(3) COMP ～ S9(4) COMP

unsigned int
－
符号なし2進項目（5～9けた）

9(5) COMP ～ 9(9) COMP
9(5) COMP-X ～ 9(9) COMP-X

int
－
符号付き2進項目（5～9けた）

S9(5) COMP ～ S9(9) COMP

unsigned long
－
符号なし2進項目（5～9けた）※1

9(5) COMP ～ 9(9) COMP
9(5) COMP-X ～ 9(9) COMP-X

符号なし2進項目（10～18けた）※2

9(10) COMP ～ 9(18) COMP
9(10) COMP-X ～ 9(18) COMP-X

long
－
符号付き2進項目（5～9けた）※1

S9(5) COMP ～ S9(9) COMP

符号付き2進項目（10～18けた）※2

S9(10) COMP ～ S9(18) COMP

unsigned long long※4
－
符号なし2進項目（10～18けた）

9(10) COMP ～ 9(18) COMP
9(10) COMP-X ～ 9(18) COMP-X

long long※4
－
符号付き2進項目（10～18けた）

S9(10) COMP ～ S9(18) COMP

float
－
単精度内部浮動小数点数字項目

COMP-1

double
－
倍精度内部浮動小数点数字項目

COMP-2

ポインタ型
－
アドレス名，アドレスデータ項目

ADDRESS

配列型
－
アドレスデータ項目

ADDRESS

構造体※3
－
集団項目
－

（凡例）

－：該当しない

注※1　UNIX32の場合です。

注※2　UNIX64の場合です。

注※3

COBOLの集団項目を受け渡しする場合，Cプログラムでの境界調整を考慮して引数のデータ項目を定義する必要があります。

COBOLの集団項目は，標準では各基本項目がすき間なく配置されるのに対し，Cプログラムでは計算機固有の境界に従って配置されます。このため，あらかじめ境界調整される分の未使用領域を定義しておくなど，計算機固有の境界調整を意識したデータを定義しておくことを推奨します。

なお，COBOLでは，SYNCHRONIZED句を指定することで計算機固有の境界調整に従って各基本項目を配置できます。

HP-UX(IPF)，HP-UX(IPF64)，およびLinux(IPF64)では，プラットフォームの規約とCOBOL言語仕様の差異によって，C言語モジュールとの間で次の構造体を値渡しの引数，または返却値として受け渡しした場合の動作は保証しません。

・float型のメンバだけで構成された構造体

・double型のメンバだけで構成された構造体

Linux(x64)では，プラットフォームの規約とCOBOL言語仕様の差異によって，従属項目として内部浮動小数点項目をもつ16バイト以下の集団項目を値渡し（BY VALUE）の引数および返却項目に指定した場合，C言語プログラムとの間での引数および返却項目の受け渡しは保証しません。

このような場合，次に示すどれかの方法でプログラムを修正する必要があります。

・集団項目ではなく同じサイズの文字列項目として値の受け渡しをする。

・値渡しではなく参照渡し（BY REFERENCE）または内容渡し（BY CONTENT）に変更する。

・集団項目のサイズが16バイトを超えるようにする。

なお，-Lx64ConventionCheckオプションを指定すると，次の条件を満たす場合に警告レベルのエラーメッセージが出力されます。

1.　サイズが16バイト以下の集団項目を値渡しの引数および返却項目に指定している。

2.　1.の集団項目の従属項目に内部浮動小数点項目がある。

Linux(x86)では，プラットフォームの規約とCOBOL言語仕様の差異によって，サイズが1バイトのCOBOL集団項目とサイズが1バイトのC言語構造体との間で返却項目の受け渡しはできません。

HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，およびSolaris(SPARC)では，プラットフォームの規約とCOBOL言語仕様の差異によって，サイズが1バイトのCOBOL集団項目とサイズが1バイトのC言語構造体との間で値渡し（BY VALUE）の引数および返却項目の受け渡しはできません。

注※4　Solaris(SPARC)の場合，値渡し（BY VALUE）引数および返却項目のとき，C言語のlong long型またはunsigned long long型の変数と値の受け渡しはできません。

注※5　符号修飾子を省略したとき，unsigned charと解釈するCコンパイラを使用する場合，明示的にsigned charと書くか，または適切なCコンパイラのオプションを指定してsigned charと解釈されるようにする必要がある。

(3)　引数の受け渡し

COBOLプログラムからCプログラムへ引数を渡す方法を，次に示します。

(a)　引数をポインタ型で引き渡す例

COBOLプログラム

          :
      WORKING-STORAGE SECTION.
      01 CNT PIC S9(9) USAGE COMP.
      01 STR.
        02 STRCHAR PIC X(79).
        02 FILLER  PIC X VALUE LOW-VALUE.
          :
      PROCEDURE DIVISION.
          :
        CALL 'sample2' USING BY REFERENCE CNT STR.
          :

Cプログラム

int  sample2(int *cnt, char *str)
{
   :
 return(0);
}

COBOLプログラムからCプログラムにBY VALUE指定なしで引き渡す引数は，すべてポインタ型として引き渡されます。このため，Cプログラム内で受け取る引数は，すべてポインタ型で宣言する必要があります。

Cプログラムは，COBOLプログラムから数字項目を受け取る場合，内部・外部10進項目，内部・外部浮動小数点数字項目などの数字属性を意識する必要があります。

(b)　引数を値渡しで引き渡す例

COBOLプログラム

          :
      WORKING-STORAGE SECTION.
      01 CNT PIC S9(9) USAGE COMP.
      01 STR PIC X(1).
          :
      PROCEDURE DIVISION.
          :
        CALL 'sample2' USING BY VALUE CNT STR.
          :

Cプログラム

int  sample2(int cnt, char str)
{
   :
 return(0);
}

Cプログラム内で受け取る引数は，BY VALUE指定の場合は値渡しで受け取ります。CALL文のBY VALUEで指定したCOBOLのデータ項目に対するC言語のデータ型の対応については，「表19-1　COBOLのデータ項目とCプログラムの型の対応」を参照してください。

BY VALUE指定時，引数は次のように設定されます。

単精度内部浮動小数点数字項目は4バイトで，倍精度内部浮動小数点数字項目は8バイトで設定されます。

数字定数，およびZEROは4バイトの2進形式として設定されます。

浮動小数点数字定数は倍精度浮動小数点形式として設定されます。

(c)　CALL文の引数にADDRESS OF 一意名，LENGTH OF 一意名を指定した例

COBOL主プログラム

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 WK-1.
        02 W01    PIC X(30)
           VALUE 'ABCDEFGHIJKLMNOPQRSTUVWXYZ1234'.
        02 FILLER PIC X VALUE LOW-VALUE. …5.
      PROCEDURE  DIVISION.
          CALL 'SAMPLE2'
               USING BY REFERENCE WK-1. …1.
          CALL 'SAMPLE3'
               USING BY REFERENCE ADDRESS OF WK-1. …2.
          CALL 'SAMPLE4'
               USING BY CONTENT LENGTH  OF WK-1. …3.
          CALL 'SAMPLE5'
               USING BY VALUE LENGTH  OF WK-1. …4.
          STOP RUN.
      END PROGRAM SAMPLE1.

C副プログラム

#include <stdio.h>
int SAMPLE2(char *p_ptr_r)
{
  printf("first char(r) =(%s)¥n",p_ptr_r);   … 1.
   :
}
int SAMPLE3(char **p_ptr_ra)
{
  printf("first char(ra)=(%s)¥n",*p_ptr_ra);   … 2.
   :
}
int SAMPLE4(
    int *p_ptr_cl  /* この引数の型はUNIX32の場合  */
                   /* UNIX64の場合は long long *  */
    )
{
  printf("length(p)     =(%d)¥n",*p_ptr_cl);   … 3.
   :
}
int SAMPLE5(
    int p_ptr_vl  /* この引数の型はUNIX32の場合  */
                  /* UNIX64の場合は long long    */
    )
{
  printf("length(p)     =(%d)¥n",p_ptr_vl);   … 4.
   :
}

BY REFERENCE指定のCALL文で渡される値は，指定された一意名のアドレスです。

ADDRESS OFで修飾した場合に渡される値は，一意名のアドレスではなく，一意名のアドレスが入っている領域のアドレスとなります。

LENGTH OFで修飾したCONTENT指定では，一意名の長さが入っている領域のアドレスが渡されます。

LENGTH OFで修飾したVALUE指定では，一意名の長さが値として渡されます。

Cプログラム中で文字列として参照するため，COBOLプログラム中で英数字項目の終端にNULL文字（X'00'）を設定しています。

BY REFERENCE指定で渡される引数の値

実行結果

first char(r) =(ABCDEFGHIJKLMNOPQRSTUVWXYZ1234)
   :
first char(ra)=(ABCDEFGHIJKLMNOPQRSTUVWXYZ1234)
   :
length(p)     =(31)
   :
length(p)     =(31)
   :

(4)　戻り値の受け渡し

CプログラムからCOBOLプログラムへ戻り値を返す方法を，次に示します。

(a)　整数型のデータ項目をリターンする例

COBOLプログラム

      WORKING-STORAGE SECTION.
      01 RTC PIC S9(9) USAGE COMP.
          :
      PROCEDURE DIVISION.
          :
          CALL 'sample2' RETURNING RTC.

Cプログラム

int sample2()
 {
 int rtc;
   :
 return (rtc);
 }

(b)　構造体型のデータ項目をリターンする例

構造体型のデータ項目をリターンする場合，COBOLプログラムとCプログラムでは境界調整によってデータのマッピング方法が異なることがあるので注意が必要です。

COBOLプログラム

      WORKING-STORAGE SECTION.
      01 TBL.
        02 A PIC S9(9) USAGE COMP.
        02 B PIC X(10).
          :
      PROCEDURE DIVISION.
          :
          CALL 'sample2' RETURNING TBL.

Cプログラム

struct tbl {int a; char b[10];};
struct tbl sample2()
{
   struct tbl rtn;
   :
   return (rtn);
}

19.1.4　注意事項

C言語の構造体の場合，要素の境界調整でパディング（領域間のギャップを埋めるために挿入される暗黙のFILLER項目）が挿入されます。そのほかに，構造体のサイズを最大の基本要素サイズの倍数に切り上げるため，パディングが挿入されることがあります。この場合，パディングは構造体の末尾に挿入されます。例えば上記の例の構造体tblの場合，要素の合計のサイズはCOBOLの集団項目TBLと同じ14バイトですが，構造体のサイズを4バイト（最大の基本要素のサイズ）の倍数の16バイトにするために，2バイトのパディングが構造体の末尾に挿入されます。このため，COBOLの集団項目TBLとはサイズが不一致になります。プラットフォームによっては，このサイズの不一致が原因で，引数や戻り値の受け渡しで異常終了や結果不正となることがあるため，次のどちらかの方法でC言語の構造体のサイズとCOBOLの集団項目のサイズを一致させる必要があります。

C言語の構造体のサイズをCOBOLの集団項目のサイズに合わせる方法
構造体を詰めて配置するC言語の機能（C言語の言語仕様の#pragma packやC言語のコンパイラのコンパイラオプションで提供されている）を使って構造体tblのサイズを14バイトにします。構造体を詰めて配置するC言語の機能については，各システムのCコンパイラのリファレンスを参照してください。

COBOLの集団項目のサイズをC言語の構造体のサイズに合わせる方法
COBOLの集団項目TBLのサイズを16バイトにするために，COBOLの集団項目TBLの末尾に次の2バイト分のFILLER項目を追加してください。

　　02 FILLER PIC X(2).

C言語のシステム関数は，#defineによって実際の関数名とは別の関数名で宣言され，マクロ展開後に置き換えられることがあります。COBOLではC言語のマクロは展開しないため，COBOLプログラムからC言語のシステム関数をCALL文で直接呼び出すと，COBOLからマクロ展開前の関数名を呼び出し，予期せぬ不具合が発生するおそれがあります。

COBOLプログラムからC言語のシステム関数を呼び出す場合は，直接呼び出さないで，システム関数を呼び出すCプログラムを作成し，このCプログラムを呼び出すようにしてください。

19.1.5　外部属性を持つデータ項目の共用

COBOLプログラムで定義した外部属性を持つデータ項目をCプログラムと共有する方法を，次に示します。

なお，外部属性を持つデータ項目の共有属性については，「4.2.2　外部属性（EXTERNAL句）」を参照してください。

COBOLプログラム

                     :
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 EXTREC IS EXTERNAL.        ………… EXTERNAL領域定義
        02 EXT-REC1 PIC S9(9) USAGE COMP.
        02 EXT-REC2 PIC S9(4) USAGE COMP.
        02 EXT-REC3 PIC X(14).
                     :

Cプログラム

struct extarea{
   int   ext_rec1;
   short ext_rec2;
   char  ext_rec3[14];
};
int sample2()
{
 extern struct extarea EXTREC;  ……… 外部参照宣言
 if (EXTREC.ext_rec1 == 1){
     EXTREC.ext_rec2 = 2;
 }
 return(0);
}

COBOLプログラムで外部属性を持つデータ項目を指定した場合，Cプログラムからこれを参照，更新できます。このときの注意事項を次に示します。

Cプログラムで参照する外部変数名には，COBOLプログラムで定義したデータ項目の名称を使用してください。ただし，-EquivRule,NotAnyオプションが指定されていない場合，COBOLプログラム中のデータ項目名に英小文字を用いると英大文字に変換されるので，外部変数名に英小文字は使用できません。
また，外部変数名には，2バイトコードや，ハイフン（-），下線（_），#なども使用できません。

COBOLプログラム内で定義するデータ項目の名称は，最外側のプログラム名と異なる名称にしてください。

Cプログラムとの間では，EXTERNAL句による属性チェックはされません。このため，Cプログラムで外部属性を持つデータ項目の参照，および更新する場合，各データ項目の属性，位置，サイズを同じにする必要があります。

EXTERNAL句にINDEXED BY指定をした場合，Cプログラムからの参照や更新はできません。

EXTERNAL句にDYNAMICを指定した場合，Cプログラムからの参照や更新はできません。

外部属性を持つデータ項目が日本語の場合，Cプログラムからの参照や更新はできません。

19.1.6　COBOLプログラムとCプログラムのリンク方法

COBOLプログラムとCプログラムをリンクする方法については，「34.　実行可能ファイルと共用ライブラリの作成」を参照してください。

20.　オブジェクト指向機能

オブジェクト指向機能は，メッセージのやり取りによる処理，カプセル化，継承など，オブジェクト指向技術を導入したCOBOL言語仕様です。

この章では，オブジェクト指向の考え方やオブジェクト指向機能の特徴について説明します。また，オブジェクト指向機能の基本概念や用語についても説明します。

＜この章の構成＞

20.1　オブジェクト指向の紹介

20.2　COBOL2002でのオブジェクト指向機能

20.1　オブジェクト指向の紹介

ここでは，オブジェクト指向について説明します。

＜この節の構成＞

20.1.1　ソフトウェア開発の現状

20.1.2　オブジェクト指向

20.1.1　ソフトウェア開発の現状

ソフトウェア開発の技術は，今日まで目覚ましい発展を遂げてきました。次々に新しい技術が生まれ，ソフトウェアの規模は拡張されてきました。しかし，ソフトウェアの拡張に伴い，さまざまな問題が出てきました。

＜この項の構成＞

(1)　生産面での問題点

(2)　信頼面での問題点

(3)　保守面での問題点

(1)　生産面での問題点

従来のプログラムは，ある特定の業務を処理するために開発される，機能中心のものでした。このようにして設計されるプログラムは，適用される業務が限定され，それ以外の業務には対応できない柔軟性に欠けたものでした。そのため，プログラマは業務ごとに新しいプログラムを設計しなければならず，作業に多くの時間を必要としていました。

(2)　信頼面での問題点

従来のプログラミング言語によるプログラムでは，処理形式などの標準化が徹底されていないため，既存のプログラムを再利用するのが難しく，新しいプログラムのほとんどは最初から設計されていました。また，従来のプログラム設計では最後まで設計が終了し，実際に実行させないと期待どおりの動きをするかどうかがわかりませんでした。そのため，設計に必要な時間の割に信頼性の低いプログラムしか作成できませんでした。

(3)　保守面での問題点

従来のプログラミング言語によるプログラムを変更または修正するのには，大変な手間と時間が掛かりました。変更，修正がうまくできずに性能が劣化したり，使えなくなる場合もありました。これは，データ間またはプログラム間の依存度が高いため，一つの変更が，予想外の結果まで引き起こすことが頻発したからです。

これらの問題点に対応するための手段として，オブジェクト指向によるシステム開発技法があります。オブジェクト指向とは，どのようなものかを次に示します。

20.1.2　オブジェクト指向

オブジェクトとは，英語で「もの」という意味です。この言葉からもわかるように，オブジェクト指向とは，現実にある「もの」や，「もの」同士が作用し合うことによって作り出される「現象」を，そのままコンピュータの世界に反映しようという考えです。

＜この項の構成＞

(1)　データ中心の考え方（生産面での問題点の解決）

(2)　オブジェクトの構造

(3)　カプセル化（保守面での問題点の解決）

(4)　クラス

(5)　メソッドの呼び起こし（メッセージパッシング）

(6)　継承（信頼面での問題点の解決）

(7)　インタフェース

(8)　ポリモルフィズム

(1)　データ中心の考え方（生産面での問題点の解決）

従来のCOBOLプログラミングでは，実現したいシステムの処理（機能）を分析し，機能ごとのモジュールを段階的に，細かく分割する手法がとられます。こうした分割手法では，あるモジュールはその上位のモジュールの機能を実現するために必要な機能の一つとして存在します。このため，あるモジュールをまったく別のモジュール機能として，部分的に再利用するのは困難です。また，プログラムを変更したり拡張したりする際には，機能を実現するために使用されるデータが，どこで，何の目的で参照・設定されているのかを把握しなければなりませんでした。

オブジェクト指向では，実現したいシステムで使用されるデータを中心に考えます。システムの中で何らかの役割を担うデータをオブジェクトとして抽出し，データとそのデータに対して与えられる機能を一まとまりにしてモジュールを構成します。つまり，データを基にモジュールを分割する手法です。

このようにモジュールを分割すれば，同じデータを使用するシステムには，モジュールを再利用できます。また，データを直接参照・設定する部分がそのモジュールに限られるため，プログラムの修正や拡張も容易になります。

(2)　オブジェクトの構造

オブジェクトとは，処理対象のデータとそのデータを操作する手続き（属性とサービス）をカプセル化したものです。次に例を挙げて説明します。

（例）　Aさんの銀行口座のオブジェクト

Aさんは，ある銀行に普通預金の口座を開設しています。ここでは，普通預金の口座を例にして，オブジェクトを説明します。

Aさんの普通預金口座での処理をオブジェクト指向で実現させるために，必要な情報を抽出します。まず，この口座がAさんのものであるという情報が必要です。これらは，次に示す情報で表されます。

名前

口座番号

次に，Aさんの口座の状態を知るための情報を示します。

残高

利率

これらが，Aさんの口座であるということと，その口座の状態を認識するのに必要な情報です。これらの情報に対し，銀行の普通預金口座として機能を果たすために必要な動作として，次の三つを挙げてみます。

預け入れ

引き出し

振り込み

Aさんの口座は，「名前」や「口座番号」で認識され，「残高」に対し「預け入れ」や「引き出し」の処理を行うことができます。オブジェクト指向では，これらの情報をデータ，処理をメソッド（英語で手段を表す言葉）と表現します。

このような，Aさんの普通預金口座のオブジェクトは，次のような概念図で表せます。以後，このマニュアルではオブジェクトの概念図をこのように表します。

(3)　カプセル化（保守面での問題点の解決）

オブジェクトを表す概念図は，オブジェクトのデータおよびメソッドの実装が隠ぺいされている状態を示しています。オブジェクト内のデータは，原則としてそのオブジェクトのメソッドによってだけ操作されます。また，オブジェクト内で変化したデータの値が，そのオブジェクトの外部のデータ値に，暗黙的に影響を与えることもありません。

このように，データもメソッドの実装もオブジェクト内に閉じ込め，外部から隠ぺいすることを，カプセル化といいます。

このカプセル化は，従来のプログラミング言語によるシステム開発で課題となっていた，データ間またはデータとプログラムの依存度の高さによって発生する変更時の障害を解消します。

(4)　クラス

クラスとは，オブジェクトを生成するときの型のことです。オブジェクト指向では，クラスを使用してオブジェクトのデータ属性やメソッドを定義し，オブジェクトをカプセル化します。

クラスとオブジェクトの関係を銀行口座を例にして説明します。

銀行口座に必要なデータ（名前，口座番号など）と，それらのデータを操作するメソッド（預け入れ，引き出しなど）は，銀行口座クラスとして定義します。こうして定義されたクラスは，オブジェクトを生成するための型であり，だれの口座でもありません。実際の口座は，銀行口座クラスを基にオブジェクトとして生成します。各人の口座のデータの定義は同じですが，名前，口座番号などのデータには，それぞれ異なる値が設定されます。

(a)　インスタンスオブジェクト

クラスから生成されるオブジェクトの実体のことを，インスタンスオブジェクトといいます。

一つのクラス定義から，複数のインスタンスオブジェクトを生成できます。生成されたインスタンスオブジェクトは，定義されたデータを個別に持っています。そのため，同じクラスから生成されても，それぞれのインスタンスオブジェクトは，固有のデータ値を持っています。

(b)　ファクトリオブジェクト

同じクラスから生成されたインスタンスオブジェクトは，それぞれ固有のデータ値を持っています。しかし，中には口座オブジェクトの「利率」のように，各オブジェクトに共通するデータ値もあります。このようなデータをすべてのオブジェクトが持っていてもかまいませんが，まとめて1か所に保持しておく方が，保守しやすいオブジェクトになります。

ファクトリオブジェクトは，このように全オブジェクトに共通するデータを，1か所で管理するためのオブジェクトです。

例えば，「利率」を変更する場合，各インスタンスオブジェクトがそれぞれ「利率」を持っていると，それらをすべて変更しなければなりません。しかし，「利率」がファクトリオブジェクトに保持されていれば，ファクトリオブジェクトの「利率」だけを変更すればよいのです。

ファクトリオブジェクトは，一つのクラスに対して一つだけ存在します。

(5)　メソッドの呼び起こし（メッセージパッシング）

オブジェクト指向では，データと処理は，それぞれにカプセル化されます。カプセル化されたデータは，他オブジェクトからの影響を受けてはなりません。このカプセル化という概念を守りながら，処理プログラムを実行させるために，オブジェクト指向ではメッセージを使用します。

メッセージとは，クラスからオブジェクトを生成させたり，またはあるオブジェクトが自分では処理できない問題の解決を，その処理ができるほかのオブジェクトに依頼するときに使用されるものです。次に例を示します。

（例）AさんがBさんの口座に現金を振り込む場合

AさんがBさんの口座に1万円を振り込もうとしています。しかし，Aさんの口座オブジェクトのメソッドは，Bさんの口座オブジェクトのデータを操作できません。そこで，Bさんの口座オブジェクトに次のようなメッセージを送ります。

このようにして，メッセージを介してオブジェクトのメソッドを操作することをメソッドの呼び起こし（メッセージパッシング）といいます。

(6)　継承（信頼面での問題点の解決）

継承とは，あるクラスが持つ性質をほかのクラスが受け継ぐことです。例えば，銀行が従来のサービスに新たなサービスを加えて，新しいサービスを提供する制度を設けようとした場合，継承を利用します。次に例を示します。

注

継承の矢印は，あるクラスがどのクラスを継承しているのかを示します。例えば，クラスBがクラスAを継承しているとき，矢印の向きもクラスBがクラスAを指します。

従来のサービスを持つクラスを継承したクラスでは，新しく追加するサービスだけを定義します。継承によって，従来のサービスが受け継がれ，使用できるようになっているので，これらのサービスについては定義する必要はありません。また，受け継いだ性質の再定義もできます。

このように，継承によって既存のクラスを利用して新しいクラスを作成すると，原始プログラム中のコーディングの重複が避けられるので保守資産の増加を抑えられ，システム開発にかかる労力を短縮できます。また，既存のクラスを利用することで，最初から品質が保証されている，信頼性の高いクラスを作成できます。

なお，このマニュアルでは継承されるクラスを「スーパクラス」，継承するクラスを「サブクラス」といいます。

(7)　インタフェース

インタフェースは，このあとに説明する適合やポリモルフィズムに深くかかわっている重要な概念です。インタフェースは，オブジェクトがどのようなサービスを提供するのかを表します。具体的には，オブジェクトが持つメソッドの名前とパラメタの並び（これらをまとめて，メソッド原型といいます）の集まりから成ります。インタフェースは，オブジェクトが持つすべてのメソッド原型を表現することも，一部を表現することもできます。

(a)　メソッド名

メソッドには，それぞれ名前が付いています。メソッド名を，メソッドが提供するサービス，つまり実装を簡潔に表すものにすると，プログラムが理解しやすくなります。メソッド名は，一つのクラス中で一意でなければなりません。ただし，クラスが違えば，異なるサービスを提供するメソッドに対し，同じメソッド名を付けてかまいません。

(b)　パラメタ

パラメタには，処理するデータと，その処理の結果を返すデータを指定します。

注

メソッド実装とは，メソッド内の実処理を示します。

(8)　ポリモルフィズム

ポリモルフィズムとは，同じメッセージを送っても，メッセージを受け取るオブジェクトの生成元のクラスが異なれば，そのオブジェクトごとに異なる処理が行われる仕組みです。この仕組みを使用すると，複数の処理を一つのメッセージで実現できます。

次に例を示します。

（例）普通預金口座および当座預金口座からの引き出し

普通預金口座および当座預金口座は，それぞれ別のクラスから生成されたオブジェクトです。クラスが異なるので，それぞれのオブジェクトのメソッドに同じ名前を付けることができます。

これらのオブジェクトは，「引き出してください。」というメッセージを受け取ることができます。普通預金口座クラスのオブジェクトのメソッドは普通預金から現金を引き出します。当座預金口座クラスのオブジェクトのメソッドは，当座預金からの引き出しを要求する小切手をチェックして，現金を引き出します。つまり，同じメッセージであってもそれを受け取るオブジェクトのクラスが異なっていれば，異なる動作をするわけです。

ポリモルフィズムの仕組みは，メッセージのやり取りの単純化に役立ちます。また，新規に受け手のクラスを定義しても，メッセージの送り手側を修正する必要がないため，再利用性や保守性を向上させることができます。

注

COBOL2002では，メソッドが適合していなければメソッドに同じ名前を付けること（オーバライド）は，できません。

メソッドが適合しているかどうかは，マニュアル「COBOL2002　言語　標準仕様編　5.2.7(1) オブジェクト指向での「適合」」の規則に従ってチェックされます。

20.2　COBOL2002でのオブジェクト指向機能

「20.1　オブジェクト指向の紹介」で紹介したオブジェクト指向を実現する言語仕様として，COBOL2002ではオブジェクト指向機能があります。ここでは，オブジェクト指向機能について簡単に説明します。

＜この節の構成＞

20.2.1　オブジェクト指向機能による定義

20.2.2　インスタンスオブジェクトの生成と消滅

20.2.3　メソッドの呼び起こし（メッセージパッシング）

20.2.4　オブジェクトプロパティ

20.2.5　オブジェクト指向による継承

20.2.6　オブジェクト指向でのインタフェース

20.2.7　オブジェクト指向による適合

20.2.8　オブジェクト指向によるポリモルフィズム

20.2.9　オブジェクト指向機能でのマルチスレッド対応

20.2.1　オブジェクト指向機能による定義

＜この項の構成＞

(1)　クラスの定義

(1)　クラスの定義

オブジェクト指向を取り入れたプログラム開発を，COBOL2002で実現するためには，プログラム定義とクラス定義が必要です。

(a)　プログラム定義

プログラム定義では，リポジトリ段落に使用するクラス名を指定します。また，インスタンスオブジェクトを生成する場合，オブジェクトを識別するためのオブジェクト参照を定義します。手続き部では，メソッドを呼び起こすための手続き文であるINVOKE文を記述します。

リポジトリ段落の言語仕様については，マニュアル「COBOL2002　言語　標準仕様編　8.2.7 リポジトリ段落（REPOSITORY）」を参照してください。

(b)　クラス定義

クラス定義は，インスタンス定義とファクトリ定義という二つの定義部分で構成されます。また，インスタンス定義，ファクトリ定義にはそれぞれメソッド定義を定義できます。ファクトリ定義から生成されるオブジェクトがファクトリオブジェクト，インスタンス定義から生成されるオブジェクトがインスタンスオブジェクトとなります。

それぞれのオブジェクトをどのように定義しているのかを，オブジェクトの概念図との対応で示します。

このクラス定義から，オブジェクトを生成します。

ファクトリオブジェクトは，クラス定義に対して一つだけ存在します。インスタンスオブジェクトは，クラス定義に対して複数生成できます。

ファクトリ定義，インスタンス定義，およびクラス定義の言語仕様については，マニュアル「COBOL2002　言語　標準仕様編　7. 見出し部（IDENTIFICATION DIVISION）」を参照してください。

20.2.2　インスタンスオブジェクトの生成と消滅

＜この項の構成＞

(1)　インスタンスオブジェクトの生成

(2)　インスタンスオブジェクトの消滅

(1)　インスタンスオブジェクトの生成

定義したインスタンスオブジェクトは型であり，生成することで使用できるようになります。インスタンスオブジェクトの生成とは，処理対象であるデータ値を格納するための記憶領域を確保することです。

インスタンスオブジェクトを生成するためには，NEWメソッドという特別なメソッドを使用します。NEWメソッドは，COBOL2002が提供する「BASEクラス」というクラスのファクトリオブジェクトのメソッドです。NEWメソッドおよびBASEクラスについては，マニュアル「COBOL2002　言語　標準仕様編　12. 標準クラス」を参照してください。なお，NEWメソッドを指定する場合は，'NEW'と大文字で指定する必要があります。

次に，インスタンスオブジェクトの生成例を示します。

ここでは，NEWメソッドを呼び起こして普通預金口座クラスのインスタンスオブジェクトを生成しています。インスタンスオブジェクトが生成されると，そのオブジェクト参照が返却項目に設定されます。
オブジェクト参照とは，生成されたオブジェクトを参照するデータ項目です。オブジェクト参照に関する言語仕様については，マニュアル「COBOL2002　言語　標準仕様編　5.2.2 オブジェクト参照」を参照してください。

ここでは，生成したインスタンスオブジェクトのオブジェクト参照を使用して，「預け入れ」メソッドを呼び起こしています。

(2)　インスタンスオブジェクトの消滅

生成されたインスタンスオブジェクトが消滅させられるのは，実行単位の終了時か，COBOL2002が提供するガーベジコレクション（メモリ管理機能）によって不要と判断されたときです。

ガーベジコレクションとは，COBOL2002実行時ライブラリのメモリ管理機能です。ガーベジコレクションが実行されると，どこからも参照されていないインスタンスオブジェクト※が整理され，そのメモリ領域が再利用されます。この処理は，COBOL2002が自動的に実行し，ユーザが意識する必要はありません。

注※

オブジェクト参照データ項目は，SET文でNULLが設定されるか，別のオブジェクト参照データ項目を転記された場合，インスタンスオブジェクトを参照しなくなります。

ガーベジコレクションは，NEWメソッドが実行されたとき，次の条件を満たすと発生します。

インスタンスオブジェクトのメモリ使用の累積が，512キロバイトを超えたとき。
なお，環境変数CBLGCSTARTによって，上記の値を変更できます。

直前のガーベジコレクション完了時点からのメモリ追加量が，64キロバイトを超えたとき。
なお，環境変数CBLGCINTERVALによって，上記の値を変更できます。

環境変数CBLGCSTARTおよび環境変数CBLGCINTERVALについては，「35.3　プログラムの実行環境の設定」を参照してください。

20.2.3　メソッドの呼び起こし（メッセージパッシング）

COBOL2002でのメソッドの呼び起こし（メッセージパッシング）には，「INVOKE文」を使用します。次に例を示します。

INVOKE CLASS-A 'HIKIDASHI' USING H-1 RETURNING H-2
         1         2             3             4

呼び起こすメソッドを参照するためのクラス名またはオブジェクト参照

呼び起こしたいメソッド名

メソッドに渡すデータ項目

メソッドから返される結果を受け取る項目の名称

＜この項の構成＞

(1)　メソッドの呼び起こし

(2)　メソッドの検索

(3)　メソッドに渡す引数

(4)　メソッドから返される結果を受け取る項目の名称

(1)　メソッドの呼び起こし

COBOL2002は，クラス名またはオブジェクト参照で指定したオブジェクトが実装しているメソッドを探します。INVOKE文によって，オブジェクトに対しメソッドの実行を要求することを「メソッドを呼び起こす」といいます。メソッドを呼び起こす場合には，INVOKE文にクラス名，オブジェクト参照データ項目名，または既定義オブジェクト参照を指定します。

INVOKE文の文法規則については，マニュアル「COBOL2002　言語　標準仕様編　10.8.26 INVOKE文」を参照してください。

(a)　ファクトリメソッドの呼び起こし

クラス名を指定すると，そのクラスに定義されているファクトリメソッドが呼び起こされます。記述例を，次に示します。

      INVOKE CLASS-A 'FACTORY-METHOD' USING ARG1
                 1                      RETURNING ARG2.

クラス名

(b)　インスタンスメソッドの呼び起こし

インスタンスメソッドを呼び起こす場合，そのメソッドを内包するインスタンスオブジェクトを指すオブジェクト参照を指定します。

オブジェクト参照とは，生成されたオブジェクトを参照するデータ項目です。オブジェクト参照は，USAGE IS OBJECT REFERENCE句を使用して宣言します。オブジェクト参照の詳細はマニュアル「COBOL2002　言語　標準仕様編　9.16.86 USAGE句」を参照してください。

記述例を，次に示します。

            ：
      01 H-1 USAGE OBJECT-REFERENCE.
            ：
          INVOKE CLASS1 'NEW' RETURNING H-1.
            ：
          INVOKE H-1 'OBJECT-METHOD' USING ARG1
                  1                  RETURNING ARG2.

オブジェクト参照

(c)　既定義オブジェクトを使用したメソッドの呼び起こし

現在実行中のメソッドの呼び起こし対象であるオブジェクトのメソッドを呼び起こす場合，既定義オブジェクト参照のSELFまたはSUPERを使用します。

記述例を，次に示します。

      INVOKE SELF 'OBJECT-METHOD' USING ARG1
               1                  RETURNING ARG2.

既定義オブジェクト参照

既定義オブジェクト参照には，ほかにNULLおよびEXCEPTION-OBJECTがあります。既定義オブジェクト参照については，マニュアル「COBOL2002　言語　標準仕様編　4.3.2 一意名のいろいろ」を参照してください。

(2)　メソッドの検索

INVOKE文を実行すると，呼び起こすメソッドが検索されます。メソッドは，INVOKE文の記述によって次のように検索されます。

INVOKE クラス名 メソッド名
指定したクラスのファクトリメソッドが検索されます。指定したクラスに該当するメソッドがなければ，指定したクラスのスーパクラスのファクトリメソッドが，継承した順に検索されます。

INVOKE SELF メソッド名
実行中のメソッドを呼び起こした際に指定したオブジェクトが属するクラスのファクトリメソッドまたはインスタンスメソッドが検索されます。指定したクラスに該当するメソッドがなければ，そのクラスのスーパクラスのメソッドが，継承した順に検索されます。

INVOKE SUPER メソッド名
実行中のメソッドを呼び起こした際に指定されたオブジェクトが属するクラスのスーパクラスのファクトリメソッドまたはインスタンスメソッドが検索されます。指定したクラスに該当するメソッドがなければ，そのクラスのスーパクラスのメソッドが，継承した順に検索されます。

INVOKE 一意名 メソッド名
オブジェクト参照が指すオブジェクトがファクトリオブジェクトの場合は，そのファクトリ定義を含むクラスのファクトリメソッドが検索されます。オブジェクト参照が指すオブジェクトがインスタンスオブジェクトの場合は，そのインスタンス定義を含むクラスのインスタンスメソッドが検索されます。指定したクラスに該当するメソッドがなければ，そのクラスのスーパクラスのメソッドが，継承した順に検索されます。

(3)　メソッドに渡す引数

メソッドに渡す引数を指定します。ここで指定した引数は，メソッド側に渡されます。詳細は，「17.　プログラム間の引数と返却項目」を参照してください。

(4)　メソッドから返される結果を受け取る項目の名称

オブジェクトのメソッドを実行させた結果の値を受け取るための，データ項目を指定します。

20.2.4　オブジェクトプロパティ

オブジェクトプロパティとは，オブジェクトが持つ属性の中で，外部からでもメソッドを呼び起こさず，直接参照または更新できると宣言されたデータ項目のことです。また，オブジェクトプロパティの参照および更新には，GETプロパティメソッド，SETプロパティメソッドを使用します。また，プロパティメソッドには，暗黙的なプロパティメソッドと明示的なプロパティメソッドとがあります。

オブジェクトプロパティの詳細についてはマニュアル「COBOL2002　言語　標準仕様編　4.3.2(8) オブジェクトプロパティ」を参照してください。

＜この項の構成＞

(1)　明示的なプロパティメソッド

(2)　暗黙的なプロパティメソッド

(1)　明示的なプロパティメソッド

GETプロパティメソッド

メソッド名段落にGET PROPERTYを指定すると，そのメソッドは，GETプロパティメソッドとなります。

GETプロパティメソッドは，オブジェクトプロパティが送り出し側作用対象として参照されたとき，自動的に呼び起こされます。このとき，GETプロパティメソッドのRETURNINGに指定された項目が返却されます。

SETプロパティメソッド

メソッド名段落にSET PROPERTYを指定すると，そのメソッドは，SETプロパティメソッドとなります。

SETプロパティメソッドは，オブジェクトプロパティが受け取り側作用対象として参照されたとき，自動的に呼び起こされます。このとき，引数としてSETプロパティメソッドに値が渡されます。

記述例を，次に示します。

プログラムMAIN-Aからオブジェクトプロパティを送り出し側作用対象として参照します。これによって，GETプロパティメソッドP-1が呼び起こされます。
P-1は，ファクトリデータGET-DATAを返却項目RET-DATAに設定し，呼び出し元へ制御を戻します。その結果，1.のW-1には，GET-DATAと同じ値が転記されます。

プログラムMAIN-Aからオブジェクトプロパティを受け取り側作用対象として参照します。これによって，SETプロパティメソッドP-1が呼び起こされます。
このとき，2.のMOVE文では，X-1の値をSETプロパティメソッドP-1の引数に指定して呼び起こします。P-1は，引数として渡されたPARA-DATAをファクトリデータSET-DATAに転記します。この結果，2.のMOVE文のX-1の値がSET-DATAに設定されます。

明示的なプロパティメソッドの詳細については，マニュアル「COBOL2002　言語　標準仕様編　7.6 メソッド名段落（METHOD-ID）」を参照してください。

(2)　暗黙的なプロパティメソッド

ファクトリ定義およびインスタンス定義のデータ記述項にPROPERTY句を指定すると，そのデータ項目は，オブジェクトプロパティとして参照できます。PROPERTY句が指定されたデータ項目には，暗黙的にGETプロパティメソッドとSETプロパティメソッドが生成されます。

記述例を，次に示します。

プログラムMAIN-Aからオブジェクトプロパティを送り出し側作用対象として参照します。これによって，暗黙的なGETプロパティメソッドが呼び起こされます。
暗黙的なGETプロパティメソッドは，ファクトリデータP-1の値を取得して返却します。その結果，1.のW-1には，P-1と同じ値が転記されます。

プログラムMAIN-Aからオブジェクトプロパティを受け取り側作用対象として参照します。これによって，暗黙的なSETプロパティメソッドが呼び起こされ，2.のMOVE文のX-1の値がファクトリデータP-1に設定されます。

暗黙的なプロパティメソッドの場合，オブジェクトプロパティの値がそのままファクトリデータおよびインスタンスデータに設定されます。これに対して，明示的なプロパティメソッドの場合，オブジェクトプロパティの値を加工してファクトリデータおよびインスタンスデータに設定できます。

暗黙的なプロパティメソッドの詳細については，マニュアル「COBOL2002　言語　標準仕様編　9.16.56 PROPERTY句」を参照してください。

20.2.5　オブジェクト指向による継承

継承を行うには，COBOL2002の「INHERITS句」を使用します。

＜この項の構成＞

(1)　INHERITS句

(2)　継承の使い方

(1)　INHERITS句

INHERITS句は，クラスの"CLASS-ID. クラス名"に続けて指定します。

（例）

CLASS-ID. クラス名 INHERITS スーパクラス名.

継承すると，スーパクラスの性質が，継承するクラスおよび継承するクラスのサブクラスにも定義されているかのように扱われます。継承の詳細については，マニュアル「COBOL2002　言語　標準仕様編　5.2.9 クラス継承」を参照してください。

(2)　継承の使い方

「預け入れ」メソッドと「引き出し」メソッドを持つ「預金口座」クラスがある場合，この「預金口座」クラスを継承する例を，次に示します。

（例1）

「預金口座」クラスの「預け入れ」メソッド，「引き出し」メソッドに加えて「残高照会」メソッドを持つ「普通預金口座」クラスを作成します。この場合，「普通預金口座」クラスは，「預金口座」クラスを継承し，「残高照会」メソッドだけを定義すれば，必要なメソッドを備えられます。

（例2）

「預金口座」クラスの「預け入れ」メソッド，「引き出し」メソッドに加えて「残高照会」メソッドを持ち，さらに「引き出し」メソッドが独自の処理をする「当座預金口座」クラスを作成します。この場合，すでに「普通預金口座」クラスが存在するときは，「当座預金口座」クラスは，「普通預金口座」クラスを継承し，「引き出し」メソッドだけを定義すれば，必要なメソッドを備えられます。

「引き出し」メソッドは，継承する「預金口座」クラスですでに定義されているため，「当座預金口座」クラスで独自の「引き出し」メソッドを定義する場合は，METHOD-ID段落にOVERRIDE句を指定します。これによって，当座預金口座クラスの引き出しメソッドが預金口座クラスの引き出しメソッドを上書きし，当座預金口座クラスの引き出しメソッドが有効となります。

20.2.6　オブジェクト指向でのインタフェース

インタフェースとは，メソッドの名称，引数，および返却項目の定義の集まりです。インタフェースは，メソッドの実装を持ちません。

ファクトリオブジェクトとインスタンスオブジェクトは，それぞれインタフェースを持ちます。このインタフェースは，それぞれのオブジェクトが持つ，すべてのメソッド定義の集まりです。

インタフェースについては「COBOL2002　言語　標準仕様編　5.2.7 適合とインタフェース」を参照してください。

＜この項の構成＞

(1)　インタフェースの利用

(2)　インタフェースの定義

(3)　インタフェースの実装

(4)　インタフェースを使ったオブジェクトの使用

(1)　インタフェースの利用

インタフェースを使用すると，クラス中の一部のメソッドだけを公開できます。例えば，プログラムAにはメソッドM1とM2だけを公開し，プログラムBにはメソッドM3とM4だけを公開することができ，誤ったメソッドの使用などを防止できます。

（インタフェースの利用例）

上記の「預金口座」クラスは，五つのメソッドを持っています。

このうち，「パスワード変更メソッド」と「利息メソッド」を，預金者用のプログラムから使用させたくない場合，「引き出しメソッド」「預け入れメソッド」「残高照会メソッド」だけを含む「預金口座預金者」インタフェースを定義し，預金者用のプログラムではこのインタフェースを使用します。

このようにすると，預金者用のプログラムからは，「パスワード変更メソッド」と「利息メソッド」を隠ぺいできるため，誤ってメソッドを使用されることがありません。

このように，インタフェースを利用すると，プログラムごとに公開するメソッドの範囲を変更できます。

インタフェースは，ファクトリメソッド，インスタンスメソッドのそれぞれに定義できます。クラスがインタフェースを持っていることを，「インタフェースを実装する」といいます。例えば，クラスAのファクトリ定義がインタフェース1を持つ場合は，「クラスAのファクトリオブジェクトは，インタフェース1を実装する」といいます。

また，クラス定義が未完成であっても，そのインタフェース部分だけが決まっていれば，-Repository,Genオプションによってリポジトリファイルを作成できます。必要なリポジトリファイルを作成しておけば，リポジトリ段落に未完成のクラスの名前を指定した原始プログラムでも，コンパイルできるようになります。詳細は「33.3.2　リポジトリファイルの単独生成」を参照してください。

(2)　インタフェースの定義

インタフェースは，INTERFACE-IDを使って定義します。INTERFACE-IDの詳細については，マニュアル「COBOL2002　言語　標準仕様編　7.5 インタフェース名段落（INTERFACE-ID）」を参照してください。

インタフェースの定義例を，次に示します。

      IDENTIFICATION DIVISION.
      INTERFACE-ID. I-INT1. *> インタフェース名定義
      PROCEDURE DIVISION.
      IDENTIFICATION DIVISION.
      METHOD-ID. METH1. *> メソッド名定義
      DATA DIVISION.
      LINKAGE SECTION.
      01 PRM1 PIC X. *> 引数定義
      01 RET1 PIC X. *> 返却項目定義
      PROCEDURE DIVISION USING PRM1 RETURNING RET1.
         ：
      END METHOD METH1. *> メソッドの処理は定義しない
      IDENTIFICATION DIVISION.
      METHOD-ID. METH2. *> 必要なメソッドをすべて定義する
          :
      END METHOD METH2.
      END INTERFACE I-INT1.

(3)　インタフェースの実装

クラス定義にインタフェースを実装する場合，ファクトリ定義またはインスタンス定義のIMPLEMENTS句にインタフェース名を指定します。IMPLEMENTS句に指定されたインタフェース名は，そのクラスから生成されるファクトリオブジェクトまたはインスタンスオブジェクトに実装されたインタフェースとなります。IMPLEMENTS句の詳細については，マニュアル「COBOL2002　言語　標準仕様編　7.7 オブジェクト段落（OBJECT）」を参照してください。

      IDENTIFICATION DIVISION.
      CLASS-ID. CLS1.
          ：
      IDENTIFICATION DIVISION.
      FACTORY. IMPLEMENTS F-INT1 F-INT2.
                    *> ファクトリオブジェクトが実装する
                    *> インタフェース名の指定
          :
      END FACTORY.

      IDENTIFICATION DIVISION.
      OBJECT. IMPLEMENTS I-INT1 I-INT2.
                    *> インスタンスオブジェクトが実装する
                    *> インタフェース名の指定
          :
      END OBJECT.
      END CLASS CLS1.

(4)　インタフェースを使ったオブジェクトの使用

インタフェースによってインスタンスオブジェクトを使用する場合，インタフェース名を指定したオブジェクト参照を使用します。

      01 OBJ-REF1 USAGE OBJECT REFERENCE I-INT1.
                                     インタフェース名

      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 I-INT-OR USAGE OBJECT REFERENCE I-INT1.
                 *> インタフェース名を指定した
                 *> オブジェクト参照
      PROCEDURE DIVISION.
          INVOKE CLS1 'NEW' RETURNING I-INT-OR.
                 *> 「CLS1」クラスのインスタンス
                 *> オブジェクトの作成
          INVOKE I-INT1-OR 'METH1'.
                 *> インタフェースによるメソッド実行（1.）

インタフェース指定のオブジェクト参照によってメソッドを実行する場合，そのメソッドは，インタフェース定義中に定義されている必要があります。インタフェース中に定義されていないメソッドを実行しようとした場合，コンパイル時にエラーとなります。

上記の例で，メソッド「METH1」がインタフェース「I-INT1」の定義中にない場合は，インスタンスオブジェクト中に「METH1」があっても，1.のINVOKE文がコンパイル時にエラーとなります。

また，クラスに実装されていないインタフェース名を指定したオブジェクト参照を使用してメソッドを呼び出した場合，コンパイル時にエラーとなります。例えば，上記の例でCLS1のインスタンス定義にインタフェース名I-INT1の実装がない（IMPLEMENTS句に指定されていない）場合，コンパイル時に適合エラーが発生します。適合については，「20.2.7　オブジェクト指向による適合」を参照してください。

20.2.7　オブジェクト指向による適合

オブジェクト参照データ項目にクラス名またはインタフェース名を指定すると，メソッドの呼び起こしやオブジェクト参照の転記の際に，適合がチェックされます。これによって，不当なメソッド呼び起こしや転記を防げます。適合するかどうかは，コンパイル時または実行時にチェックされます。

＜この項の構成＞

(1)　オブジェクト参照の適合チェック

(2)　実装インタフェースの適合チェック

(3)　オブジェクトビューによる実行時の適合チェック

(1)　オブジェクト参照の適合チェック

通常，オブジェクトを使用する場合は，オブジェクト参照を使用します。

オブジェクト参照の定義にクラス名やインタフェース名を指定した場合，そのオブジェクト参照を使用したプログラムが正しく動作するかが判定されます。

オブジェクト参照への値設定は，SET文の実行，メソッド呼び起こし時の引数への指定，または返却項目へのオブジェクト参照指定などによって発生します。オブジェクト参照へ値を設定する際，設定するデータの情報とオブジェクト参照に指定された情報との適合がチェックされ，適合するデータだけが設定できます。これによってオブジェクト参照が不適合なオブジェクトを指すことを防げます。

適合チェックの詳細については，マニュアル「COBOL2002　言語　標準仕様編　10.8.43 SET文」，および「COBOL2002　言語　標準仕様編　10.7 引数と返却項目の適合」を参照してください。

ここでは，適合チェックの概要について，説明します。

(a)　クラス同士またはインタフェース同士の適合

クラス同士，またはインタフェース同士の適合は，クラスおよびインタフェースの継承関係によって，次の規則で判定されます。

あるクラスAに適合するクラスは，そのサブクラス（クラスAを継承するクラス），またはクラスAである。

あるインタフェースBに適合するインタフェースは，インタフェースBを継承するインタフェース，またはインタフェースBである。

例えば，クラス「CLASS-A」がクラス「CLASS-B」を継承している場合，「CLASS-Aは，CLASS-Bに適合している」といえますが，「CLASS-Bは，CLASS-Aに適合していない」ことになります。これは，CLASS-BがCLASS-Aを継承していないためです。

      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 OR1 USAGE OBJECT REFERENCE CLASS-A.
      01 OR2 USAGE OBJECT REFERENCE CLASS-B.
          :
      PROCEDURE DIVISION.
          :
         SET OR2 TO OR1. *> 1.
         SET OR1 TO OR2. *> 2.

送り出し側作用対象であるOR1に指定されたCLASS-Aは，受け取り側作用対象であるOR2に指定されたCLASS-Bに適合しているので，このSET文は正しいと判定されます。

送り出し側作用対象であるOR2に指定されたCLASS-Bは，受け取り側作用対象であるOR1に指定されたCLASS-Aに適合していないので，このSET文はエラーとなります。

(b)　インタフェースとクラスの適合

クラスとインタフェースの適合は，次の規則で判定されます。

あるインタフェースAに適合するのは，それを実装するクラスである。

クラスとインタフェースが適合するのは，上記のとおり「あるクラスがあるインタフェースに適合する」場合だけです。「あるインタフェースがあるクラスに適合する」ということはありません。

例えば，クラス「CLASS-A」がインタフェース「INTERFACE-B」を実装している場合，「CLASS-AはINTERFACE-Bに適合している」といえますが，「INTERFACE-BはCLASS-Aに適合していない」ことになります。

      DATA  DIVISION.
      WORKING-STORAGE  SECTION.
      01 OR1 USAGE OBJECT REFERENCE CLASS-A.
      01 OR2 USAGE OBJECT REFERENCE INTERFACE-B.
          :
      PROCEDURE  DIVISION.
          :
          SET OR2 TO OR1. *> 1.
          SET OR1 TO OR2. *> 2.

送り出し側作用対象であるOR1に指定されたCLASS-Aは，受け取り側作用対象であるOR2に指定されたINTERFACE-Bに適合しているので，このSET文は正しいと判定されます。

送り出し側作用対象であるOR2に指定されたINTERFACE-Bは，受け取り側作用対象であるOR1に指定されたCLASS-Aに適合していないので，このSET文はエラーとなります。

(c)　メソッド呼び起こしの適合

INVOKE文によってメソッドを呼び起こす場合，そのメソッドが実行できるかどうかは，次の規則で判定されます。

INVOKE文で使用するオブジェクト参照にクラス名が指定されていれば，実行するメソッドは，そのクラスまたはそのクラスが継承するクラスのどちらかで定義されていなければならない。

INVOKE文で使用するオブジェクト参照にインタフェース名が指定されていれば，実行するメソッドは，そのインタフェースまたはそのインタフェースが継承するインタフェースのどちらかで定義されていなければならない。

クラス名またはインタフェース名指定のオブジェクト参照で，上記の規則に従っていないメソッドの呼び起こしがあると，コンパイル時にエラーとなります。

(2)　実装インタフェースの適合チェック

インタフェースを実装する場合，ファクトリ段落またはオブジェクト段落のIMPLEMENTS句にインタフェース名を指定します。このとき，インタフェースは，ファクトリオブジェクトまたはインスタンスオブジェクトが実装するインタフェースに適合しているかどうかがチェックされます。このチェックでは，次の条件が成立する場合だけ，適合しているとみなされます（適合条件の詳細については，マニュアル「COBOL2002　言語　標準仕様編　5.2.7 適合とインタフェース」を参照してください）。

インタフェースが定義する各メソッドに対して，同名のメソッドがオブジェクトにも存在する。

同名メソッドの引数と返却項目の定義が同じである。

このため，実装されるインタフェースの持つメソッド定義の集合は，それを実装するオブジェクトが持つメソッド定義と同じ集合か，またはその部分集合となります。

例として，次のようなメソッド定義集合のインスタンスオブジェクトとインタフェースがあるとします。

クラス「CL-1」のインスタンスオブジェクトのメソッド定義集合

METH1，METH2，METH3

インタフェース「INT-1」のメソッド定義集合

METH1，METH2

インタフェース「INT-2」のメソッド定義集合

METH1，METH4

インタフェースINT-1のメソッドは，すべてクラスCL-1に含まれています。このため，インタフェースINT-1は，クラスCL-1に適合しているといえます。

一方，インタフェースINT-2は，クラスCL-1が持たないメソッドMETH4を含んでいます。このため，インタフェースINT-2は，クラスCL-1に適合していないといえます。

インタフェースINT-1，INT-2にIMPLEMENTS句を指定すると，コンパイル時に次のように判定されます。

（インタフェースINT1の場合）

      IDENTIFICATION DIVISION.
      CLASS-ID. CL-1.
          ：
      OBJECT. IMPLEMENTS INT-1. …適合していると判定されます。
          ：
      END OBJECT.
      END CLASS CL-1.

（インタフェースINT2の場合）

      IDENTIFICATION DIVISION.
      CLASS-ID. CL-2.
          ：
      OBJECT. IMPLEMENTS INT-2. …INT-2が持つMETH4がオブジェクト
          ：                      にないため，適合エラーとなります。
      END OBJECT.
      END CLASS CL-2.

(3)　オブジェクトビューによる実行時の適合チェック

オブジェクトビューとは，一時的にASの指定どおりの記述を持つように，オブジェクト参照を扱うものです。オブジェクトビューの言語規則については，マニュアル「COBOL2002　言語　標準仕様編　4.3.2(4) オブジェクトビュー」を参照してください。

オブジェクトビューをオブジェクト参照に指定すると，コンパイル時にオブジェクト参照の適合がチェックされないで，プログラム実行時にオブジェクト参照が指すオブジェクトとオブジェクトビューの指定内容の適合がチェックされます。チェックは，オブジェクト参照にオブジェクトビューの情報（クラス名，インタフェース名など）が設定された場合の，オブジェクト参照の適合チェックと同等となります。

オブジェクトビューを指定して，プログラム実行時に適合をチェックする例を，次に示します。

クラス「CLASS-A」は，クラス「CLASS-B」を継承している。

CLASS-Aは，メソッド「METH-A」を，CLASS-Bは，メソッド「METH-B」を，それぞれ持っている。

      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 OR-B USAGE OBJECT REFERENCE CLASS-B.
          :
      PROCEDURE DIVISION.
          :
          INVOKE CLASS-A 'NEW' RETURNING OR-B.
              :
          INVOKE OR-B 'METH-A'. *> 1.

上記の場合，1.のINVOKE文は，OR-Bに指定されたCLASS-BがMETH-Aを持たないため，コンパイル時にエラーとなります。しかし，OR-Bが指すのはCLASS-Aから作成されたインスタンスオブジェクトなので，METH-Aを実装しています。このため，1.のINVOKE文では，METH-Aを実行できます。

このような場合，次のようにオブジェクトビューを指定すれば，コンパイルエラーとならないでプログラムを実行できます。

          INVOKE OR-B AS CLASS-A 'METH-A'.
                   オブジェクトビュー

20.2.8　オブジェクト指向によるポリモルフィズム

ポリモルフィズムとは，一つのメッセージに対して異なる処理をすることを許す機能です。オブジェクト指向機能では，メソッドの呼び起こし（INVOKE文）でポリモルフィズムができます。これは，「あるオブジェクト参照は，それに適合するオブジェクトのメソッドを呼び起こせる」というオブジェクト参照の特徴を利用したものです。

ポリモルフィズムの使用例を，次に示します。

（例）

「20.2.5　オブジェクト指向による継承」の「(2)　継承の使い方」の例の場合，クラスの継承関係は，次のようになっています。

「預金口座」クラス←「普通預金口座」クラス←「当座預金口座」クラス

（A←Bは，BがAを継承することを表します）

また，「引き出し」メソッドは，オブジェクトごとに次のようになっていて，それぞれの「引き出し」メソッドの処理内容は異なります。

普通預金口座が実装する「引き出し」メソッド
預金口座から継承したメソッド

当座預金口座が実装する「引き出し」メソッド
当座預金口座で実装したメソッド

      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 HA USAGE OBJECT REFERENCE 預金口座. *> 1.
          :
      PROCEDURE DIVISION.
              :
          IF 要求 = 普通預金処理 *> 2.
            INVOKE 普通預金口座 'NEW' RETURNING HA
          ELSE
            INVOKE 当座預金口座 'NEW' RETURNING HA
          END-IF.
              :
          INVOKE HA '引き出し'. *> 3.

継承関係による適合によって，普通預金口座と当座預金口座の両方が適合している預金口座クラスを指定したオブジェクト参照を使います。

要求によって，普通預金口座を使うか当座預金口座を使うか切り分けます。

HAが指すオブジェクトにより，異なる「引き出し」メソッド（普通預金口座のメソッドまたは当座預金口座のメソッド）を実行できます。

20.2.9　オブジェクト指向機能でのマルチスレッド対応

マルチスレッド環境下で，複数のスレッドで同時に実行できるCOBOLプログラムのことを，マルチスレッド対応COBOLプログラムといいます。

ここでは，オブジェクト指向機能を使用したマルチスレッド対応COBOLプログラムの特徴について説明します。マルチスレッド対応COBOLプログラムについては，「26.　マルチスレッド環境での実行」を参照してください。

＜この項の構成＞

(1)　マルチスレッド環境下でのメソッドの実行

(2)　マルチスレッド環境下でのファクトリデータ

(1)　マルチスレッド環境下でのメソッドの実行

オブジェクト指向機能を使用したマルチスレッド対応COBOLプログラムのスレッド呼び出しの対象は，プログラム定義および他言語のプログラムです。メソッドはスレッド呼び出しの対象とはなりません。マルチスレッド環境下でメソッドが実行されるのは，スレッド起動後に，プログラム定義から呼び出される場合だけです。

この場合，END METHODによってメソッド処理が終了すると，COBOL実行環境を終了しないで，呼び出し元に制御を返します。

また，スレッド実行中にSTOP RUN文が実行されると，実行中のスレッドを終了します。

(2)　マルチスレッド環境下でのファクトリデータ

マルチスレッド環境下のファクトリデータは，スレッド単位に存在するデータです。データの存在するスレッドだけで参照したり更新したりできます。ほかのスレッドからこのデータを参照したり更新したりすることはできません。

21.　共通例外処理

例外処理とは，手続き文の実行中に発生したエラーに対して処理する機能です。COBOL2002では，従来のCOBOLで使用できた入出力機能での例外処理に加えて，さまざまなエラーに対応する処理を記述できます。ここでは，COBOL2002で新しく追加された共通例外処理について説明します。

＜この章の構成＞

21.1　共通例外処理の概要

21.2　例外

21.3　TURN指令

21.4　共通例外の宣言手続き

21.5　例外の伝播

21.6　明示的な例外の引き起こし

21.7　例外情報の参照

21.8　例外の検出条件

21.9　共通例外処理の注意事項

21.1　共通例外処理の概要

COBOL2002では，プログラムでエラーが発生した場合に，そのエラーに対する回復処理を定義できます。これを，例外処理といいます。

COBOL2002規格では，従来のCOBOLから仕様が拡張され，より細かい例外を処理できるようになりました。

COBOL2002で例外処理を定義する方法を，次に示します。

手続き文固有の例外処理をする場合
次の手続き文には，その文固有の例外処理を定義できます。

AT END指定のあるREAD文／SEARCH文

AT EOP指定のあるWRITE文

INVALID KEY指定があるWRITE文／REWRITE文／DELETE文／START文

ON OVERFLOW／ON EXCEPTION指定があるCALL文

ON OVERFLOW指定があるSTRING文／UNSTRING文

ON SIZE ERROR指定があるADD文／SUBTRACT文／MULTIPLY文／DIVIDE文／COMPUTE文

エラーの種類または入出力ファイル別に例外処理を定義する場合
USE文の宣言手続きを使用すると，発生するエラーの種類や入出力ファイルごとに例外処理を定義できます。

＜この節の構成＞

21.1.1　共通例外の仕組みと使用する用語

21.1.2　共通例外処理の機能

21.1.3　共通例外処理の使用例

21.1.4　共通例外処理に対応している機能

21.1.1　共通例外の仕組みと使用する用語

共通例外の発生から例外処理が実行される状態になるまでには，次のような共通例外の仕組みが規定されています。

図21-1　共通例外の仕組み

注※

TURN指令については，「21.3　TURN指令」を参照してください。

この章で使用する例外に関する用語について，次に定義します。

この章で使用する用語 | 意味
例外 | 例外状態を示します。
TURN指令のチェックがON | TURN指令で，該当する例外名がCHECKING ON指定であり，指定された例外が引き起こせる状態であることを示します。
従来形式の例外処理 | 従来のCOBOLの言語仕様にある，USE手続きやINVALID KEYなどの文ごとに指定できる無条件文を示します。これに対して，COBOL2002で新たに追加された例外処理を「共通例外処理」といいます。

21.1.2　共通例外処理の機能

COBOL2002で新たに追加された例外処理を「共通例外処理」といいます。共通例外処理は，従来形式の例外処理から次の機能が拡張されています。

例外宣言手続きの実行
従来の例外処理では，入出力機能の例外が検出された場合に対してだけ，宣言手続きが定義できましたが，共通例外処理では，さまざまな機能に対する例外宣言手続きを定義できます。また，宣言手続きから指定した手続き名へ復帰できます。

呼び出し元プログラムへの例外の伝播
検出された例外の情報を，呼び出し元プログラムに伝えられます。このことを，例外の伝播といいます。呼び出し元プログラムでは，伝播によって例外を検出し，例外処理を実行できます。

例外を引き起こす文（RAISE文）を使用して，明示的に例外を引き起こせます。

引き起こした例外の情報を，プログラム中で組み込み関数などを使用して参照できます。

21.1.3　共通例外処理の使用例

プログラムに共通例外処理を追加する例を，次に示します。

この例では，ACCEPT文に内部浮動小数点項目を指定しているため，-NumAcceptコンパイラオプションの指定が必要です。

＜主プログラム：SAMPLE1.CBL（変更前）＞

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
       ：
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 PARAM USAGE COMP-1.
       ：
      PROCEDURE DIVISION.

        DISPLAY '値を入力してください '.
        ACCEPT PARAM.
        CALL 'SAMPLE2' USING PARAM.

      END PROGRAM SAMPLE1.

＜副プログラム：SAMPLE2.CBL（変更前）＞

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE2.
         ：
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 ANS USAGE COMP-1.
      LINKAGE SECTION.
      01 PARAM USAGE COMP-1.
         ：
      PROCEDURE DIVISION USING PARAM.

          COMPUTE ANS = FUNCTION ACOS ( PARAM ).
          DISPLAY 'ANSWER  =' ANS.

      END PROGRAM SAMPLE2.

（変更前のプログラムの説明）

主プログラムSAMPLE1で入力された値について，副プログラムSAMPLE2内でACOS関数を使用して逆余弦の近似値を求めるプログラムです。入力した値が不正な場合，実行時エラーメッセージが出力され，プログラムが異常終了します。

不正な値が入力された場合に共通例外処理を使用して例外を処理するために，上記のプログラムを次のように修正します。

組み込み関数の引数エラーについて，例外チェックを有効にする。
組み込み関数の引数エラーについて例外を引き起こすには，翻訳指令のTURN指令を指定して，対応する例外名EC-ARGUMENT-FUNCTIONのチェックをONにします。

>>TURN EC-ARGUMENT-FUNCTION CHECKING ON

TURN指令については，「21.3　TURN指令」を参照してください。

宣言手続きを記述する。
共通例外処理として，EC-ARGUMENT-FUNCTION例外発生時の宣言手続きを記述します。宣言手続きは，USE文を使用して次のように記述します。

DECLARATIVES.
USE-EC-ARGUMENT SECTION.
 USE AFTER EXCEPTION CONDITION EC-ARGUMENT-FUNCTION.
   DISPLAY '入力値不正!!'.
   RESUME AT ERR-RETRY.
END DECLARATIVES.

この例題では，主プログラムSAMPLE1で共通例外処理するため，SAMPLE1に宣言手続きを記述します。宣言手続きについては，「21.4　共通例外の宣言手続き」を参照してください。

自動伝播を有効にする。
呼び出し先プログラム（SAMPLE2）で引き起こした例外を，呼び出し元プログラム（SAMPLE1）に自動伝播するためには，PROPAGATE指令をONにします。

>>PROPAGATE ON

伝播については，「21.5　例外の伝播」を参照してください。

上記の例外処理を追加したサンプルプログラムを，次に示します。太字の個所が，追加部分です。

＜主プログラム：SAMPLE1.CBL（変更後）＞

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
          ：
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 PARAM USAGE COMP-1.
          ：
      PROCEDURE DIVISION.
      DECLARATIVES. *> 3.
        USE-EC-ARGUMENT SECTION.
          USE AFTER EXCEPTION CONDITION
                              EC-ARGUMENT-FUNCTION.
          DISPLAY '入力値不正!!'.
          RESUME AT ERR-RETRY. *> 4.
      END DECLARATIVES.

      ERR-RETRY.
        DISPLAY '値を入力してください '.
        ACCEPT PARAM.
      >>TURN EC-ARGUMENT-FUNCTION CHECKING ON
        CALL 'SAMPLE2' USING PARAM. *> 2.

      END PROGRAM SAMPLE1.

＜副プログラム：SAMPLE2.CBL（変更後）＞

      >>PROPAGATE ON
      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE2.
       ：
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 ANS USAGE COMP-1.
      LINKAGE SECTION.
      01 PARAM USAGE COMP-1.
       ：
      PROCEDURE DIVISION USING PARAM.

      >>TURN EC-ARGUMENT-FUNCTION CHECKING ON
          COMPUTE ANS = FUNCTION ACOS ( PARAM ). *> 1.
          DISPLAY 'ANSWER  =' ANS.

      END PROGRAM SAMPLE2.

（変更後のプログラムの説明）

このプログラムを実行すると，SAMPLE2のCOMPUTE文（1.）で組み込み関数ACOSの引数エラーが発生した場合，次のように例外宣言処理が実行されます。

SAMPLE2のCOMPUTE文で組み込み関数ACOSの引数エラーが発生します。

組み込み関数の引数エラーに対応する例外名EC-ARGUMENT-FUNCTIONのTURN指令のチェックがONのため，例外が引き起こされます。このとき，PROPAGATE指令がONになっているので，SAMPLE1のCALL文に例外が伝播します。

例外宣言手続きが実行されます。

RESUME文によって，例外宣言手続きからERR-RETRY節に制御が戻ります。

21.1.4　共通例外処理に対応している機能

COBOL2002で共通例外処理に対応している機能を，次に示します。

表21-1　共通例外が使用できる機能一覧

種類 | 機能名 | 共通例外への対応 | 備考
規格 | 基本機能 | ○ |
順編成ファイル | ○ |
相対編成ファイル | ○ |
索引編成ファイル | ○ |
整列併合 | △※1 |
プログラム間連絡 | △ | 詳細については，「21.8.2　例外検出での注意事項」の「(2)　プログラム間連絡での注意事項」を参照のこと。
組み込み関数 | ○ |
オブジェクト指向 | ○ |
再帰呼び出し | ○ |
利用者定義関数 | ○ |
局所場所節（LOCAL-STORAGE SECTION） | ○ |
X/Open | テキスト編成ファイル | ○ |
ファイル共用（ファイルシェア） | × |
コマンド行および環境変数へのアクセス | × |
画面節（SCREEN SECTION）による画面操作※7 | × |
C言語インタフェース | × |
インタナショナリゼーション | × |
拡張機能 | 日本語 | × |
ブール（ビット操作） | ○ |
アドレス操作 | ○ |
1バイト2進機能・COMP-X項目 | ○ |
浮動小数点項目 | ○ |
報告書作成機能 | × |
HiRDBによる索引編成ファイル※6 | ○ |
CSV編成ファイル | ○ |
ラージファイル入出力 | ○ |
ファイル入出力拡張機能 | ○ |
プリンタへのアクセス（入出力による書式印刷機能）※2 | ○ |
ファイルのディスク書き込み保証 | ○ |
通信節による画面操作※2 | × |
画面節（WINDOW SECTION）による画面操作※7 | × |
データコミュニケーション機能※4 | × |
データベース操作機能 | × |
XDMによるデータベースシミュレーション機能 | × |
マルチスレッド環境での実行 | ○※8 |
基本機能サービスルーチン | × |
CGIプログラム作成支援機能※2 | × |
COBOL入出力サービスルーチン | × |
バイトストリーム入出力サービスルーチン※3 | × |
Unicode機能※5 | ○ |
数字項目のけた拡張機能※9 | △※10 |
動的長基本項目機能※11 | ○ |
定数長拡張機能※11 | ○ |
デバッグ | 実行時デバッグ機能 | ○ |
テストデバッグ機能 | ○ |
カバレージ機能 | ○ |

（凡例）

○：共通例外処理を使用できる

△：共通例外処理を制限付きで使用できる

×：エラーは発生するが，共通例外処理を使用できない

注※1

整列併合処理の共通例外処理への対応を，次に示します。

処理
共通例外への対応

SORT文
使用できない

MERGE文
使用できない

SORT／MERGE文のUSING／GIVINGに指定したファイルの入出力処理
使用できない

整列併合処理の入出力手続きに指定したファイルの入出力処理
使用できる

整列処理のRELEASE文
使用できる

整列処理のRETURN文
使用できる
（ただし，併合処理に使用している整列併合ファイルに対する，整列処理のRETURN文では使用できない）

併合処理のRETURN文
使用できない

注※2

HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効です。

注※3

UNIX32，AIX(64)，Linux(x64)，HP-UX(IPF64)で有効です。

注※4

UNIX32，AIX(64)，Linux(x64)，Linux(IPF64)で有効です。

注※5

HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効です。

注※6

HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC)で有効です。

注※7

HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Solaris(SPARC)で有効です。

注※8

-MultiThreadオプションを指定したプログラムと-MultiThreadオプションを指定していないプログラムが混在して動作した場合，UNIXでは例外を検出しません。

注※9

HP-UX(IPF64)，AIX(64)，Linux(x64)で有効です。

注※10

数字項目のけた拡張機能を使用する場合，EC-SIZE例外を使用できません。詳細については，「28.　数字項目のけた拡張機能（HP-UX(IPF64)，AIX(64)，Linux(x64)で有効）」を参照してください。

注※11

AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効です。

21.2　例外

例外は，手続き文の実行中にエラーが発生した場合，または例外を伝播した場合に検出されます。検出された例外に対して共通例外処理を実行するには，例外に対応する例外名を，TURN指令でONに指定しておきます。また，RAISE文を実行した場合は，無条件に指定した例外が引き起こされます。

共通例外処理は，引き起こされた例外に基づいて処理を実行します。例外は，例外名，または例外オブジェクトとして表されます。

＜この節の構成＞

21.2.1　例外名

21.2.2　例外オブジェクト

21.2.3　例外の致命度

21.2.4　最新例外状態

21.2.1　例外名

例外名とは，おのおのの例外に関連づけられた名前のことです。例えば，「0による除算」の例外は，例外名「EC-SIZE-ZERO-DIVIDE」として識別されます。

＜この項の構成＞

(1)　例外名のレベル

(2)　例外名の一覧

(3)　利用者定義例外名

(1)　例外名のレベル

例外名には，次の三つのレベルがあります。

レベル3

最下位のレベルに位置する例外名です。

レベル3に分類される例外名は，おのおのの例外を表します。

レベル2

レベル3の上位に位置する例外名です。

レベル2に分類される例外名は，レベル3例外名を機能や分類によってまとめたものです。機能・分類単位の例外を包括して指定したい場合に使用します。

レベル1

最上位に位置する例外名です。

レベル1に分類される例外名は，「EC-ALL」だけです。「EC-ALL」を指定すると，すべての例外名を指定したのと同じように処理されます。

すべての例外を包括して指定したい場合に使用します。

図21-2　例外名のレベル構成

(2)　例外名の一覧

例外名の一覧を，次に示します。

表21-2　例外名の一覧

例外名
致命度
説明
検出される文

EC-ALL
－
すべての例外
－

EC-ARGUMENT
－
引数エラー
－

EC-ARGUMENT-FUNCTION
致命的
関数で引数エラーが発生した
組み込み関数を指定できる手続き文※1

EC-ARGUMENT-IMP
致命的
組み込み関数の処理中にメモリ不足などのエラーが発生した
組み込み関数を指定できる手続き文※1

EC-BOUND
－
区域外
－

EC-BOUND-ODO
致命的
OCCURS～DEPENDING ONデータ項目が区域外である※2
OCCURS DEPENDING ON一意名に値を設定する手続き文※1

EC-BOUND-REF-MOD
致命的
区域外の部分参照子である※3
部分参照を指定できる手続き文※1

EC-BOUND-SUBSCRIPT
致命的
区域外の添字である※4
添字を指定できる手続き文※1

EC-DATA
－
データ例外
－

EC-DATA-PTR-NULL
致命的
アドレス名によって参照されるデータ項目を参照するとき，アドレス名の設定値がNULLである
アドレス名によって参照されるデータ項目を指定した手続き文※5

EC-FLOW
－
実行制御フロー違反
－

EC-FLOW-GLOBAL-EXIT
致命的
大域的な宣言手続き中でEXIT PROGRAM文が実行された
EXIT文

EC-FLOW-GLOBAL-GOBACK
致命的
大域的な宣言手続き中でGOBACK文が実行された

GOBACK文

大域的な宣言手続き中での自動伝播の対象となる例外を引き起こした手続き文

EC-FLOW-IMP
致命的
ALTER文で行き先を指定する前に，行き先を省略したGO TO文が実行された
GO TO文

EC-FLOW-RELEASE
致命的
RELEASE文がSORT文の範囲内にない
RELEASE文

EC-FLOW-RETURN
致命的
RETURN文がMERGE文やSORT文の範囲内にない
RETURN文

EC-FLOW-USE
致命的
USE文が別のUSE手続きを実行させた
宣言手続き中で実行中の宣言手続きを実行する例外を引き起こした手続き文

EC-I-O
－
入出力例外
－

EC-I-O-AT-END
非致命的
入出力状態「1x」が発生した
READ文

EC-I-O-EOP
非致命的
ページ終了条件が発生した
WRITE文

EC-I-O-EOP-OVERFLOW
非致命的
ページあふれ条件が発生した
WRITE文

EC-I-O-IMP
致命的
入出力状態「9x」が発生した（入出力状態の詳細は，「付録F　入出力状態の値」を参照）

OPEN文

CLOSE文

READ文

WRITE文

REWRITE文

DELETE文

START文

EC-I-O-INVALID-KEY
非致命的
入出力状態「2x」が発生した

READ文

REWRITE文

START文

WRITE文

DELETE文

EC-I-O-LINAGE
致命的
LINAGE句に指定したデータ名の値が要求範囲外である

WRITE文

OPEN文

EC-I-O-LOGIC-ERROR
致命的
入出力状態「4x」が発生した

READ文

CLOSE文

REWRITE文

DELETE文

START文

OPEN文

WRITE文

EC-I-O-PERMANENT-ERROR
致命的
入出力状態「3x」が発生した

READ文

OPEN文

WRITE文

REWRITE文

DELETE文

EC-OO
－
オブジェクト指向に関連するすべての既定義例外
－

EC-OO-CONFORMANCE
致命的
オブジェクトビューに対する不成功が発生した
オブジェクトビューを指定できる手続き文

EC-OO-EXCEPTION
致命的
例外オブジェクトが処理されなかった

EXIT文

GOBACK文

EC-OO-IMP
致命的
INVOKE文の一意名1に指定されたハンドルの値が正しくない
INVOKE文

EC-OO-METHOD
致命的
要求されるメソッドが使用できない
INVOKE文

EC-OO-NULL
致命的
NULLオブジェクト参照を使用してメソッドを呼び起こそうとした
INVOKE文

EC-OO-RESOURCE
致命的
オブジェクトの作成や拡張に必要なシステム資源が不十分である
INVOKE文

EC-OO-UNIVERSAL
致命的
実行時の型チェックが失敗した
INVOKE文

EC-OVERFLOW
－
けたあふれ条件
－

EC-OVERFLOW-STRING
非致命的
STRING文のけたあふれ条件が発生した
STRING文

EC-OVERFLOW-UNSTRING
非致命的
UNSTRING文のけたあふれ条件が発生した
UNSTRING文

EC-PROGRAM
－
プログラム間連絡例外
－

EC-PROGRAM-ARG-MISMATCH
致命的
引数が不一致である
CALL文

EC-PROGRAM-CANCEL-ACTIVE
致命的
取り消されるプログラムが活性状態である
CANCEL文

EC-PROGRAM-IMP
致命的

共用ライブラリをロード中にエラーが発生した

CALL文で実行可能ファイルの処理中にエラーが発生した

EXTERNAL句を指定したデータ項目やファイル定義を処理中にエラーが発生した

CALL文

利用者定義関数を指定できる手続き文

EC-PROGRAM-NOT-FOUND
致命的
呼び出し先プログラムが見つからない
CALL文

EC-PROGRAM-RECURSIVE-CALL
致命的
呼び出し先プログラムが活性状態である
CALL文

EC-PROGRAM-RESOURCES
致命的
呼び出し先プログラムで資源が使用できない

CALL文

利用者定義関数を指定できる手続き文

EC-RAISING
－
EXIT文RAISING指定かGOBACK文RAISING指定で発生する例外
－

EC-RAISING-NOT-SPECIFIED
致命的
EXIT文RAISING指定かGOBACK文RAISING指定のEC-USER例外条件が手続き部見出しのRAISING指定にない

EXIT文

GOBACK文

EC-RANGE
－
範囲例外
－

EC-RANGE-INSPECT-SIZE
致命的
INSPECT文での置き換え項目のサイズが異なる
INSPECT文

EC-RANGE-INVALID
非致命的
THROUGH範囲の開始値が終了値よりも大きい

EVALUATE文

条件名指定のIF文

EC-RANGE-PERFORM-VARYING
致命的
PERFORM文で変更項目の設定が負値である
PERFORM文

EC-RANGE-SEARCH-INDEX
非致命的
指標の初期値が範囲外のため，SEARCH文で表要素が見つからない
SEARCH文

EC-RANGE-SEARCH-NO-MATCH
非致命的
探索基準に合致する要素がないため，SEARCH文で表要素が見つからない
SEARCH文

EC-SIZE
－
けたあふれ例外
－

EC-SIZE-EXPONENTIATION
致命的
べき乗演算規則の違反が発生した
COMPUTE文

EC-SIZE-OVERFLOW
致命的
計算でのけたあふれが発生した

ADD文

COMPUTE文

MULTIPLY文

DIVIDE文

SUBTRACT文

EC-SIZE-TRUNCATION
致命的
格納での有効けた切り捨てが発生した

MOVE文

COMPUTE文

ADD文

SUBTRACT文

DIVIDE文

MULTIPLY文

EC-SIZE-UNDERFLOW
致命的
浮動小数点での下位けたあふれが発生した

ADD文

COMPUTE文

MULTIPLY文

DIVIDE文

SUBTRACT文

EC-SIZE-ZERO-DIVIDE
致命的
ゼロによる除算が発生した

COMPUTE文

DIVIDE文

EC-SORT-MERGE
－
整列併合機能の例外
－

EC-SORT-MERGE-IMP
致命的
整列併合用ファイル記述項のRECORD句で指定したDEPENDING ONデータ名の値が数字ではない

RELEASE文

RETURN文

EC-SORT-MERGE-RELEASE
致命的
RELEASE文のレコードが長過ぎるまたは短過ぎる
RELEASE文

EC-SORT-MERGE-RETURN
致命的
RETURN文がファイル終了条件発生中に実行された
RETURN文

EC-USER
－
利用者定義の例外
－

EC-USER-（ユーザ定義例外名）
非致命的
レベル3の利用者定義の例外条件

RAISE文

EXIT文

GOBACK文

（凡例）

－：発生したレベル3の例外名の動作に従う

注※1

詳細は「21.8.1　例外が検出される文の詳細」を参照してください。

注※2

表操作で，DEPENDING ON指定のデータ名に格納されている繰り返し回数が，表の最小から最大の範囲にないことを示します。

注※3

部分参照の指定が，一意名の範囲内にないことを示します。

注※4

表操作で使用する添字または指標名が指す表要素が，表の範囲内にないことを示します。

注※5

ただし，連絡節中のデータ項目に対するポインタ変数がNULLである場合，例外が検出されません。

（例）

連絡節中のデータ項目に対してSET文のADDRESS OFによってNULLを設定したあと，そのデータ項目を参照した場合は，例外が検出されません。

(3)　利用者定義例外名

利用者定義例外名とは，ユーザが独自の例外を定義して使用できる機能です。

利用者定義例外名は，「EC-USER-」で始まる任意の例外名を記述して定義します。利用者定義例外名の命名規則については，マニュアル「COBOL2002　言語　標準仕様編　10.5.11(1) 例外」を参照してください。

利用者定義例外名として，「EC-USER-EXCEPTION」という例外名を使用する場合のコーディング例を，次に示します。

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE.

      PROCEDURE DIVISION.
      DECLARATIVES.
        EXCEPTIONHANDLER SECTION.
          USE AFTER EXCEPTION CONDITION EC-USER-EXCEPTION. *> 1.
            DISPLAY  'EC-USER-EXCEPTION発生'.
      END DECLARATIVES.

          RAISE EXCEPTION EC-USER-EXCEPTION. *> 2.

      END PROGRAM SAMPLE.

例外宣言手続き部に利用者定義例外名「EC-USER-EXCEPTION」を定義します。

RAISE文にEC-USER-EXCEPTIONを指定して，利用者定義の例外を引き起こします。
RAISE文で例外を引き起こす場合，TURN指令のチェックをONにして例外チェックを有効にする必要はありません。
RAISE文については，「21.6　明示的な例外の引き起こし」を参照してください。

21.2.2　例外オブジェクト

例外オブジェクトは，オブジェクト指向機能を使用したCOBOLプログラムで例外を取得するときに，例外名に関連づけられた例外と同じように使用します。例外オブジェクトは，例外名に関連づけられた例外と比べて，多様な例外状況を取得できます。例外オブジェクトの詳細については，「21.7.2　EXCEPTION-OBJECT」を参照してください。また，オブジェクト指向機能については，「20.　オブジェクト指向機能」を参照してください。

21.2.3　例外の致命度

例外には致命的例外と非致命的例外の2種類があります。

例外の致命度と例外名／例外オブジェクトとの対応を，次に示します。

図21-3　例外の致命度と例外名／例外オブジェクトとの対応

例外が発生した場合の動作，および共通例外処理での例外処理は，例外の致命度によってそれぞれ次のように異なります。

致命的例外の場合

実行単位が異常終了します。

非致命的例外の場合

実行が継続されます。

ただし，例外宣言手続きを実行して，宣言手続きから復帰した場合は，致命度に関係なく実行が継続されます。宣言手続きからの復帰については，「21.4.2　宣言手続きからの復帰」を参照してください。

例外の種類と致命度の対応については，「21.2.1　例外名」の「(2)　例外名の一覧」を参照してください。

なお，利用者定義例外名は，すべて非致命的な例外となります。

21.2.4　最新例外状態

実行単位で最後に引き起こされた例外は，最新例外状態として保持されます。最新例外状態は，例外が検出されていない状態か，検出されていれば例外に対応する例外名，例外オブジェクトのどちらかを示します。

最新例外状態は，例外が引き起こされた場合に更新され，例外が引き起こされないで実行が完了したか，SET LAST EXCEPTION TO OFFによって最新状態がクリアされるまで保持されます。最新例外状態は，次の場合に更新されます。

手続き文の実行中にエラーが発生し，例外が引き起こされた場合

RAISE文を実行した場合

EXIT，GOBACK文のRAISING指定に例外名または一意名を指定して，例外を伝播し，伝播先のプログラムで例外が引き起こされた場合。

最新例外状態は，組み込み関数を使用して参照できます。詳細は，「21.7.1　組み込み関数を使用した例外情報の参照」を参照してください。

また，最新例外状態のクリアについては，「21.7.3　最新例外状態のクリア」を参照してください。

21.3　TURN指令

特定の例外に対する共通例外処理は，TURN指令によって対応する例外名のチェックをONにすることで，指定します。ただし，RAISE文や例外オブジェクトで引き起こされる例外だけを扱う場合は，TURN指令のチェックをONにする必要はありません。

＜この節の構成＞

21.3.1　TURN指令によるチェック

21.3.2　TURN指令の有効範囲

21.3.3　例外チェックが無効な場合の動作

21.3.1　TURN指令によるチェック

TURN指令に例外名を指定してチェックをONにすると，例外名に対する例外を引き起こせます。

TURN指令には，例外を表すレベル3例外名以外にも，レベル2またはレベル1の例外名を指定できます。また，EC-I-O例外名については，ファイル名を指定して，そのファイル名に対してだけチェックをON，またはOFFにできます。

TURN指令については，マニュアル「COBOL2002　言語　標準仕様編　3.3.15 TURN指令」を参照してください。

TURN指令に指定する例外名のレベルと，そのTURN指令の対象となる例外名の対応を，次に示します。

表21-3　TURN指令と対象の例外名

TURN指令に指定する
例外名のレベル
対象となる例外名

レベル1
すべてのレベル3例外名

レベル2
指定した機能，分類に対応するレベル3例外名

レベル3
指定したレベル3例外名

表21-4　TURN指令と対象の例外名（EC-I-O例外名）

TURN指令に指定する
例外名のレベル
ファイル名の
指定
対象となるEC-I-O例外名

レベル2
あり
指定したファイル名に対応するすべてのレベル3例外名

なし
すべてのファイルに対応するすべてのレベル3例外名

レベル3
あり
指定したファイル名に対応するレベル3例外名

なし
すべてのファイルに対応する指定したレベル3例外名

21.3.2　TURN指令の有効範囲

TURN指令は，そのTURN指令を記述した行以降で開始される文に対して有効となります。TURN指令を文の途中に記述した場合，TURN指令はその文には適用されないで，次の文から適用されます。このため，一つの文の中でTURN指令のチェックのON／OFFを切り替えられません。

TURN指令を文の途中に記述した場合の例を，次に示します。

文の範囲は，先頭の語である文の名前から，明示的または暗黙的に文が終了するまでとなります。文の開始から終了までの間の構文に現れたすべての手続き文も，文の範囲に含まれます。このとき，入れ子構造になっている文の一部を共通例外処理の対象としたい場合は，対象の文の直前でTURN指令のチェックをONにします。

次の例では，PERFORM文，READ文，SET文，COMPUTE文は，それぞれ文です。このとき，READ文は，SET文およびCOMPUTE文を含み，PERFORM文はそのREAD文全体を含みます。

図21-4　文の範囲

上記の例で，COMPUTE文のEC-SIZEチェックを有効にしたい場合，次のように記述します。

（COMPUTE文のEC-SIZEチェックを有効にする例）

          READ RECORD1
          AT END
            SET EOF TO TRUE
          NOT AT END
            >>TURN EC-SIZE CHECKING ON
            COMPUTE C = A + B
          END-READ

READ文から見た場合，TURN指令が文の途中に記述されています。そのため，READ文に対しては，TURN指令が適用されません。

COMPUTE文から見た場合，TURN指令が文の外に記述されています。そのため，COMPUTE文に対しては，TURN指令が適用されます。

また，SET文およびCOMPUTE文のEC-SIZEチェックを有効にしたい場合，次のように記述します。

（SET文およびCOMPUTE文のEC-SIZEチェックを有効にする例）

          READ RECORD1
          >>TURN EC-SIZE CHECKING ON
          AT END
            SET EOF TO TRUE
          NOT AT END
            COMPUTE C = A + B
          END-READ

READ文から見た場合，TURN指令が文の途中に記述されています。そのため，READ文に対しては，TURN指令が適用されません。

SET文およびCOMPUTE文から見た場合，TURN指令が文の外に記述されています。そのため，SET文およびCOMPUTE文に対しては，TURN指令が適用されます。

21.3.3　例外チェックが無効な場合の動作

＜この項の構成＞

(1)　手続き文の実行中にエラーが発生し，例外を検出した場合

(2)　伝播によって例外を検出した場合

(1)　手続き文の実行中にエラーが発生し，例外を検出した場合

手続き文でエラーが発生して例外を検出した際に，該当する例外チェックが無効な場合は，検出された例外，コンパイラオプションの指定，および例外が検出された文に対する無条件文の指定によって，動作が異なります。

共通例外処理で取り扱える例外名について，例外チェックが無効な場合の動作を，次に示します。

表21-5　エラー発生後に検出した例外に対して例外チェックが無効な場合の動作

例外名
例外チェックが無効な場合の動作

EC-ALL
以下のレベル3の例外が発生した場合，おのおのに対応する動作となる。

EC-ARGUMENT
EC-ARGUMENTに関連するレベル3の例外が発生した場合，おのおのに対応する動作となる。

EC-ARGUMENT-FUNCTION
実行時エラーで異常終了。

EC-ARGUMENT-IMP
実行時エラーで異常終了。

EC-BOUND
EC-BOUNDに関連するレベル3の例外が発生した場合，おのおのに対応する動作となる。

EC-BOUND-ODO
エラーとならないが，実行結果は保証しない。※1

EC-BOUND-REF-MOD

-DebugCompatiオプションなしの場合
エラーとならないが，実行結果は保証しない。※1

-DebugCompatiオプションありの場合
実行時エラーで異常終了。

EC-BOUND-SUBSCRIPT

-DebugCompatiまたは-DebugRangeオプションなしの場合
エラーとならないが，実行結果は保証しない。※1

-DebugCompatiまたは-DebugRangeオプションありの場合
実行時エラーで異常終了。

EC-DATA
EC-DATAに関連するレベル3の例外が発生した場合，おのおのに対応する動作となる。

EC-DATA-PTR-NULL
シグナル発生による異常終了。

EC-FLOW
EC-FLOWに関連するレベル3の例外が発生した場合，おのおのに対応する動作となる。

EC-FLOW-GLOBAL-EXIT
エラーとならない。

EC-FLOW-GLOBAL-GOBACK
エラーとならない。

EC-FLOW-IMP
実行時エラーで異常終了。

EC-FLOW-RELEASE
実行時エラーで異常終了。

EC-FLOW-RETURN
実行時エラーで異常終了。

EC-FLOW-USE
実行時エラーで異常終了。

EC-I-O
EC-I-Oに関連するレベル3の例外が発生した場合，おのおのに対応する動作となる。

EC-I-O-AT-END

-Compati85,IoStatusオプションなしの場合
エラーとならない。

-Compati85,IoStatusオプションありの場合
AT END指定がない場合は実行時エラーで異常終了。

EC-I-O-EOP
エラーとならない。

EC-I-O-EOP-OVERFLOW
エラーとならない。

EC-I-O-IMP
実行時エラーで異常終了。

EC-I-O-INVALID-KEY

-Compati85,IoStatusオプションなしの場合
エラーとならない。

-Compati85,IoStatusオプションありの場合
INVALID KEY指定がない場合は実行時エラーで異常終了。

EC-I-O-LINAGE

-Compati85,Linageオプションなしの場合
実行時エラーで異常終了。

-Compati85,Linageオプションありの場合
エラーとならない。

EC-I-O-LOGIC-ERROR
実行時エラーで異常終了。

EC-I-O-PERMANENT-ERROR
実行時エラーで異常終了。

EC-OO
EC-OOに関連するレベル3の例外が発生した場合，おのおのに対応する動作となる。

EC-OO-CONFORMANCE
実行時エラーで異常終了。

EC-OO-EXCEPTION
実行時エラーで異常終了。

EC-OO-IMP
実行時エラーで異常終了。

EC-OO-METHOD
実行時エラーで異常終了。

EC-OO-NULL
実行時エラーで異常終了。

EC-OO-RESOURCE
実行時エラーで異常終了。

EC-OO-UNIVERSAL
実行時エラーで異常終了。

EC-OVERFLOW
EC-OVERFLOWに関連するレベル3の例外が発生した場合，おのおのに対応する動作となる。

EC-OVERFLOW-STRING
ON OVERFLOW指定がない場合でもエラーとはならない。例外が検出される時点までの処理は実行されており，その時点までの実行結果は保証する。

EC-OVERFLOW-UNSTRING
ON OVERFLOW指定がない場合でもエラーとはならない。例外が検出される時点までの処理は実行されており，その時点までの実行結果は保証する。

EC-PROGRAM
EC-PROGRAMに関連するレベル3の例外が発生した場合，おのおのに対応する動作となる。

EC-PROGRAM-ARG-MISMATCH
コンパイラオプションの指定状況やCALL文の書き方によって動作が異なる。※2

EC-PROGRAM-CANCEL-ACTIVE
実行時エラーで異常終了。

EC-PROGRAM-IMP
コンパイラオプションの指定状況やCALL文の書き方によって動作が異なる。※2

EC-PROGRAM-NOT-FOUND
コンパイラオプションの指定状況やCALL文の書き方によって動作が異なる。※2

EC-PROGRAM-RECURSIVE-CALL
コンパイラオプションの指定状況やCALL文の書き方によって動作が異なる。※2

EC-PROGRAM-RESOURCES
コンパイラオプションの指定状況やCALL文の書き方によって動作が異なる。※2

EC-RAISING
EC-RAISINGに関連するレベル3の例外が発生した場合，おのおのに対応する動作となる。

EC-RAISING-NOT-SPECIFIED
実行時エラーで異常終了。

EC-RANGE
EC-RANGEに関連するレベル3の例外が発生した場合，おのおのに対応する動作となる。

EC-RANGE-INSPECT-SIZE
実行時エラーで異常終了。

EC-RANGE-INVALID
エラーとならないが，実行結果は保証しない。

EC-RANGE-PERFORM-VARYING
エラーとならないが，実行結果は保証しない。

EC-RANGE-SEARCH-INDEX
エラーとならないが，実行結果は保証しない。

EC-RANGE-SEARCH-NO-MATCH
エラーとならないが，実行結果は保証しない。

EC-SIZE
EC-SIZEに関連するレベル3の例外が発生した場合，おのおのに対応する動作となる。

EC-SIZE-EXPONENTIATION
コンパイラオプションの指定状況やCOMPUTE文の書き方によって動作が異なる。※3

EC-SIZE-OVERFLOW
エラーとならないが，ON SIZE ERROR, NOT ON SIZE ERROR指定がない場合の実行結果はけたあふれが発生している。なお，べき乗演算についてはコンパイラオプションの指定状況やCOMPUTE文の書き方によって動作が異なる。※3

EC-SIZE-TRUNCATION
エラーとならないが，ON SIZE ERROR, NOT ON SIZE ERROR指定がない場合の実行結果はけたあふれが発生している。

EC-SIZE-UNDERFLOW
エラーとならないが，ON SIZE ERROR, NOT ON SIZE ERROR指定がない場合の実行結果はけたあふれが発生している。なお，べき乗演算についてはコンパイラオプションの指定状況やCOMPUTE文の書き方によって動作が異なる。※3

EC-SIZE-ZERO-DIVIDE
ON SIZE ERROR，またはNOT ON SIZE ERROR指定がない場合は実行時エラーで異常終了。

EC-SORT-MERGE
EC-SORT-MERGEに関連するレベル3の例外が発生した場合，おのおのに対応する動作となる。

EC-SORT-MERGE-IMP
実行時エラーで異常終了。

EC-SORT-MERGE-RELEASE
実行時エラーで異常終了。

EC-SORT-MERGE-RETURN
実行時エラーで異常終了。

EC-USER
EC-USERに関連するレベル3の例外が発生した場合，おのおのに対応する動作となる。

EC-USER-（ユーザ定義例外名）
エラーとならない。

注※1

メモリの状態によっては，シグナル発生による異常終了となる場合があります。

注※2

動作の詳細については，「表21-6　EC-PROGRAMとコンパイラオプションの組み合わせによる動作の相違」を参照してください。

注※3

動作の詳細については，「表21-7　べき乗演算とコンパイラオプションの組み合わせによる動作の相違」を参照してください。

表21-6　EC-PROGRAMとコンパイラオプションの組み合わせによる動作の相違

例外名
-Compati85,Call
指定の有無
CALL文のON EXCEPTION または ON OVERFLOWの指定

あり
なし

EC-PROGRAM-ARG-MISMATCH
あり

-DebugCompatiありの場合
実行時エラーで異常終了。

-DebugCompatiなしの場合
エラーとはならないが，実行結果を保証しない場合がある（引数や返却項目の参照／設定の状態によっては，シグナル発生による異常終了や実行結果不正となる場合がある）。

なし

-DebugCompatiありの場合
指定された無条件文を実行。

-DebugCompatiなしの場合
エラーとはならないが，実行結果を保証しない場合がある（引数や返却項目の参照／設定の状態によっては，シグナル発生による異常終了や実行結果不正となる場合がある）。

-DebugCompatiありの場合
実行時エラーで異常終了。

-DebugCompatiなしの場合
エラーとはならないが，実行結果を保証しない場合がある（引数や返却項目の参照／設定の状態によっては，シグナル発生による異常終了や実行結果不正となる場合がある）。

EC-PROGRAM-IMP
あり

実行可能ファイル呼び出し，または共用ライブラリロード時に例外を検出した場合，指定された無条件文を実行。

上記以外の場合，実行時エラーで異常終了。

実行時エラーで異常終了。

なし
指定された無条件文を実行。

EC-PROGRAM-NOT-FOUND
あり
指定された無条件文を実行。
実行時エラーで異常終了。

なし

EC-PROGRAM-RECURSIVE-CALL
あり
実行時エラーで異常終了。

なし
指定された無条件文を実行。
実行時エラーで異常終了。

EC-PROGRAM-RESOURCES
あり
実行時エラーで異常終了。

なし
指定された無条件文を実行。
実行時エラーで異常終了。

表21-7　べき乗演算とコンパイラオプションの組み合わせによる動作の相違

種別※1
例外名
-Compati85,Power指定の有無
COMPUTE文のON SIZE ERRORの指定

あり
なし

NOT ON SIZE ERROR
NOT ON SIZE ERROR

あり
なし
あり
なし

整数べき乗
EC-SIZE-EXPONENTIATION
底 ：0
指数：0
あり
NOT ON SIZEを実行。
エラーとならない。
NOT ON SIZEを実行。
エラーとならない。

なし
ON SIZEを実行。
エラーとならない。

底 ：0
指数：負
あり
ON SIZEを実行。
エラーとならない。
実行時エラーで異常終了。

なし

浮動小数点べき乗
EC-SIZE-EXPONENTIATION
底 ：0
指数：0
あり
NOT ON SIZEを実行。
エラーとならない。
NOT ON SIZEを実行。
エラーとならない。

なし
ON SIZEを実行。
エラーとならない。

底 ：0
指数：負
あり※2
NOT ON SIZEを実行。
エラーとならない。
NOT ON SIZEを実行。
エラーとならない。

あり※3
ON SIZEを実行。
エラーとならない。
実行時エラーで異常終了。

なし
ON SIZEを実行。
エラーとならない
実行時エラーで異常終了。

底 ：負
指数：小数
あり
ON SIZEを実行。
エラーとならない。
実行時エラーで異常終了。

なし

EC-SIZE-OVERFLOW
あり
NOT ON SIZEを実行。
エラーとならない。
NOT ON SIZEを実行。
エラーとならない。

なし
ON SIZEを実行。
エラーとならない。

EC-SIZE-UNDERFLOW
あり
NOT ON SIZEを実行。
エラーとならない。
NOT ON SIZEを実行。
エラーとならない。

なし
ON SIZEを実行。
エラーとならない。

注※1

被べき数（底）が浮動小数点項目であるか，またはべき数（指数）が整数でない場合に演算の中間結果が浮動小数点形式となり，上表の浮動小数点べき乗演算となります。

これ以外は，演算の中間結果が整数形式となり，整数べき乗演算となります。

演算の中間結果の詳細については，「5.2.4　演算の中間結果」を参照してください。

注※2　AIX(32)，AIX(64)の場合。

注※3　HP-UX(IPF)，HP-UX(IPF64)，Linux(x86)，Linux(x64)，Linux(IPF64)，Solaris(SPARC)の場合。

(2)　伝播によって例外を検出した場合

伝播によって例外を検出した場合，CALL文，INVOKE文，および利用者定義関数の呼び出しで検出された例外名の例外チェックが無効なときは，例外の致命度によって，次に示す処理が実行されます。

表21-8　伝播によって検出した例外に対して例外チェックが無効な場合の動作

致命度
動作

致命的な例外
「図21-5　プログラム「CHILDPROGRAM」から致命的な例外の伝播を実行するが，プログラム「PARENTPROGRAM」の例外チェックが無効な場合の動作例」のように，制御遷移した文（CALL文，INVOKE文，および利用者定義関数の呼び出し）で，実行時エラーメッセージ（KCCC0402R-S）を出力し，実行単位が異常終了となる。
なお，例外を受け取れないプログラム※の場合は，「図21-6　プログラム「CHILDPROGRAM」から致命的な例外の伝播を実行しようとするが，プログラム「PARENTPROGRAM」が例外を受け取れない場合の動作例」のように，呼び出し先プログラム中の例外を検出した文で，実行時エラーメッセージ（KCCC0403R-S）を出力し，実行単位が異常終了となる。

非致命的な例外
「図21-7　非致命的な例外のときは，例外の伝播は無視され，実行が継続される場合の動作例」のように，例外の伝播は無視され，実行が継続される。

注※

例外を受け取れないプログラムの詳細については，「21.5.3　例外を受け取れないプログラムに例外を伝播させた場合の動作」を参照してください。

例外の伝播によって検出された例外の詳細については，「表21-15　例外の伝播によって検出された例外」を参照してください。

図21-5　プログラム「CHILDPROGRAM」から致命的な例外の伝播を実行するが，プログラム「PARENTPROGRAM」の例外チェックが無効な場合の動作例

プログラム「PARENTPROGRAM」中のCALL文で，プログラム「CHILDPROGRAM」を呼び出します。

プログラム「CHILDPROGRAM」のDIVIDE文で，ゼロによる除算の例外が検出されます（例外名：EC-SIZE-ZERO-DIVIDE）。

PROPAGATE指令がONなので，プログラム「PARENTPROGRAM」のCALL文に致命的な例外が伝播します。

プログラム「PARENTPROGRAM」中で，伝播された致命的な例外（例外名：EC-SIZE-ZERO-DIVIDE）に対する例外チェックが無効なので，CALL文で実行時エラーメッセージ（KCCC0402R-S：「伝播により例外が検出されました。」）を出力し，プログラムが異常終了します。

図21-6　プログラム「CHILDPROGRAM」から致命的な例外の伝播を実行しようとするが，プログラム「PARENTPROGRAM」が例外を受け取れない場合の動作例

プログラム「PARENTPROGRAM」中のCALL文で，プログラム「CHILDPROGRAM」を呼び出します。

プログラム「CHILDPROGRAM」中のDIVIDE文で，ゼロによる除算の例外が検出されます（例外名：EC-SIZE-ZERO-DIVIDE）。

PROPAGATE指令がONになっていますが，プログラム「PARENTPROGRAM」が例外を受け取れないプログラム※なので，致命的な例外が伝播できません。そのため，プログラム「CHILDPROGRAM」の例外を検出した文（DIVIDE文）で実行時エラーメッセージ（KCCC0403R-S：「例外を伝播できません。」）を出力し，プログラムが異常終了します。

注※

この場合の例外を受け取れないプログラムとは，次の条件がすべて重なった場合を指します。

プログラム中にON指定のあるPROPAGATE指令が書かれていない。

プログラム中にTURN指令が一つも書かれていない。

宣言節中のUSE文にEXCEPTION OBJECT指定が一つもない。

CALL文にON OVERFLOW指定，ON EXCEPTION指定，NOT ON EXCEPTION指定がない。

例外を受け取れないプログラムの詳細については，「21.5.3　例外を受け取れないプログラムに例外を伝播させた場合の動作」を参照してください。

図21-7　非致命的な例外のときは，例外の伝播は無視され，実行が継続される場合の動作例

プログラム「PARENTPROGRAM」中のCALL文で，プログラム「CHILDPROGRAM」を呼び出します。

プログラム「CHILDPROGRAM」中のSEARCH文で，指標名の範囲外による例外が検出されます（例外名：EC-RANGE-SEARCH-INDEX）。

PROPAGATE指令がONになっていますが，非致命的な例外のときは，例外の伝播は無視され，実行が継続されます。

21.4　共通例外の宣言手続き

USE文に，引き起こされた例外に対する例外名，または例外オブジェクトを指定している場合，共通例外の宣言手続きが実行されます。

共通例外の宣言手続きは，USE文に例外名，例外オブジェクトのクラス名，インタフェース名を指定して記述します。さらに，例外名EC-I-Oについては，ファイル名を指定すると，特定のファイルに対するUSE文を記述できます。USE文については，マニュアル「COBOL2002　言語　標準仕様編　10.8.53 USE文」を参照してください。

＜この節の構成＞

21.4.1　実行される宣言手続き

21.4.2　宣言手続きからの復帰

21.4.1　実行される宣言手続き

実行される宣言手続きは，引き起こされた例外と，USE文に指定した例外によって決定します。実行される宣言手続きの詳細については，マニュアル「COBOL2002　言語　標準仕様編　10.8.53 USE文」を参照してください。

＜この項の構成＞

(1)　例外によって実行される宣言手続き

(2)　実行される宣言手続きの優先順位

(3)　宣言手続き実行後の処理

(4)　注意事項

(1)　例外によって実行される宣言手続き

例外名に関連する場合

引き起こされた例外が例外名に関連する場合は，例外に対応する例外名，または上位レベルの例外名が指定されたUSE文の宣言手続きが実行されます。

例外オブジェクトの場合

引き起こされた例外オブジェクトに適合するクラス名またはインタフェース名が指定されたUSE文の宣言手続きが実行されます。

(2)　実行される宣言手続きの優先順位

引き起こされた例外に対して宣言手続きを複数記述した場合，レベル3，レベル2，レベル1の順に検索され，宣言手続きが一つだけ実行されます。

次の例では，引き起こされた例外の例外名EC-SIZE-ZERO-DIVIDEに対して，実行される宣言手続きがEXCEPTIONHANDLER1（例外名EC-SIZEに該当）とEXCEPTIONHANDLER2（例外名EC-SIZE-ZERO-DIVIDEに該当）の2種類があります。この場合，レベル2の例外よりもレベル3の例外が優先されるため，EXCEPTIONHANDLER1は実行されないで，EXCEPTIONHANDLER2が実行されます。

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE.
      >>TURN EC-SIZE CHECKING ON
      DATA DIVISION.
      WORKING-STORAGE  SECTION.
      01 A PIC 9.
      01 B PIC 9 VALUE 0.
      01 C PIC 9.

      PROCEDURE DIVISION.
      DECLARATIVES.
      EXCEPTION-HANDLER1 SECTION.
        USE AFTER EXCEPTION CONDITION EC-SIZE. *> 2.
          DISPLAY 'EC-SIZE'.
      EXCEPTION-HANDLER2 SECTION.
        USE AFTER EXCEPTION CONDITION EC-SIZE-ZERO-DIVIDE. *> 3.
          DISPLAY FUNCTION EXCEPTION-STATUS.
      END DECLARATIVES.

          DIVIDE A BY B GIVING C. *> 1.

      END PROGRAM SAMPLE.

DIVIDE文で例外EC-SIZE-ZERO-DIVIDEが引き起こされます。

EXCEPTION-HANDLER1は，例外名EC-SIZEに対応するため，1.の例外に該当します。しかし，EXCEPTION-HANDLER1は実行されないで，より下位のレベルEC-SIZE-ZERO-DIVIDEの例外宣言手続きが優先されます。

EXCEPTION-HANDLER2は，例外名EC-SIZE-DIVIDEに対応するため，1.の例外に該当します。さらに，EXCEPTION-HANDLER1の例外名EC-SIZEより下位のレベルのため，EXCEPTION-HANDLER2が優先となります。EXCEPTIONHANDLER2が実行され，DISPLAY文で「EC-SIZE-ZERO-DIVIDE」と表示されます。

なお，例外名が「EC-I-O-」ではじまる入出力例外は，ファイル名を指定する形式とファイル名を指定しない形式の2種類が指定できますが，両方の形式の例外宣言手続きを指定した場合，ファイル名を指定する形式の方が優先されます。

次の例では，FILE1のREAD文で例外が引き起こされると，IO-EXCEPTION-HANDLER2の方が実行されます。

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE.

      >>TURN EC-I-O CHECKING ON
      ENVIRONMENT DIVISION.
      INPUT-OUTPUT SECTION.
      FILE-CONTROL.
      SELECT FILE1 ASSIGN TO 'FILENAME.TXT'.

      DATA DIVISION.
      FILE SECTION.
      FD FILE1.
      01 REC PIC X.
      WORKING-STORAGE SECTION.
      77 FILESTATUS PIC X(2).
      77 LOOP-EXIT-FLAG PIC 9 VALUE 0.

      PROCEDURE DIVISION.
      DECLARATIVES.
      IO-EXCEPTION-HANDLER1 SECTION.
          USE AFTER EXCEPTION CONDITION EC-I-O-AT-END. *> 2.
          DISPLAY 'GENERAL HANDLER'
          RESUME AT TERMINATION.
      IO-EXCEPTION-HANDLER2 SECTION.
          USE AFTER EXCEPTION CONDITION
                              EC-I-O-AT-END FILE FILE1. *> 3.
          DISPLAY 'SPECIAL HANDLER FOR FILE1'
          CLOSE FILE1
          RESUME AT TERMINATION.
      END DECLARATIVES.
          OPEN INPUT FILE1
          PERFORM UNTIL LOOP-EXIT-FLAG = 1
            READ FILE1 *> 1.
            IF  FILESTATUS NOT = '00' AND '10' THEN
              MOVE 1 TO LOOP-EXIT-FLAG
              DISPLAY 'READ FILESTATUS = ' FILESTATUS
            END-IF
          END-PERFORM.
      TERMINATION.
          STOP RUN.

      END PROGRAM SAMPLE.

READ文で例外EC-I-O-AT-ENDが引き起こされます。

IO-EXCEPTION-HANDLER1は，例外名EC-I-O-AT-ENDに対応するため，1.の例外に該当します。しかし，IO-EXCEPTION-HANDLER1は実行されないで，ファイル名を指定した例外宣言手続きが優先されます。

EXCEPTION-HANDLER2は，例外名EC-I-O-AT-ENDに対応するため，1.の例外に該当します。さらに，ファイル名が指定されているため，IO-EXCEPTION-HANDLER1よりIO-EXCEPTION-HANDLER2の方が優先となります。
IO-EXCEPTION-HANDLER2が実行され，DISPLAY文で「SPECIAL HANDLER FOR FILE1」と表示したあと，FILE1を閉じて手続き名TERMINATIONに復帰し，プログラムが終了します。

(3)　宣言手続き実行後の処理

宣言手続きからの復帰が行われない場合，例外の致命度によって，次の処理が実行されます。宣言手続きからの復帰については，「21.4.2　宣言手続きからの復帰」を参照してください。

致命的な例外の場合

宣言手続きの実行後，実行単位が終了します。ただし，例外名EC-I-Oに関連する例外の場合は，各文の一般規則に従って，実行が継続されます。

非致命的な例外の場合

宣言手続きを実行後，各文の一般規則に従って実行が継続されます。

(4)　注意事項

例外名EC-FLOW-USEに対して実行される宣言手続きを，再帰的に実行するような処理にしないでください。このような処理にすると，無限ループが発生します。

21.4.2　宣言手続きからの復帰

宣言手続きの実行中に次の文を使用すると，宣言手続きの実行を中断して，制御を復帰できます。

＜この項の構成＞

(1)　RESUME文

(2)　GOBACK文，EXIT文

(1)　RESUME文

RESUME文は，宣言手続きから復帰するときに使用します。RESUME文では，例外が引き起こされた次の文に復帰させる方法と，指定した手続き名へ復帰させる方法があります。

RESUME文については，マニュアル「COBOL2002　言語　標準仕様編　10.8.37 RESUME文」を参照してください。

RESUME文を使用した宣言手続きからの復帰の例を，次に示します。

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE.
      >>TURN EC-SIZE CHECKING ON

      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 A PIC 9 VALUE 9.
      01 B PIC 9 VALUE 0.
      01 C PIC 9.

      PROCEDURE DIVISION.
      DECLARATIVES.
        USE-1 SECTION.
          USE AFTER EXCEPTION CONDITION EC-SIZE-ZERO-DIVIDE. *> 2.
            DISPLAY 'RESUME NEXT実行'.
            RESUME NEXT STATEMENT. *> 3.
        USE-2 SECTION.
          USE AFTER EXCEPTION CONDITION EC-SIZE-TRUNCATION. *> 5.
            DISPLAY 'RESUME 手続き名実行'.
            RESUME 復帰手続き. *> 6.
      END DECLARATIVES.

          DIVIDE A BY B GIVING C. *> 1.

          COMPUTE C = A * 2. *> 4.
          STOP RUN.

      復帰手続き. *> 7.
          DISPLAY '宣言手続きからの復帰'.
               ：
      END PROGRAM SAMPLE.

DIVIDE文で，ゼロによる除算の例外EC-SIZE-ZERO-DIVIDEが検出されます。

例外名EC-SIZE-ZERO-DIVIDEを指定した例外宣言手続きが実行されます。

RESUME文によって宣言手続きから復帰します。RESUME文にNEXT STATEMENTが指定されているため，例外が引き起こされた次の行（COMPUTE文）に制御が移ります。

COMPUTE文で，算術けたあふれの例外EC-SIZE-TRUNCATIONが検出されます。

例外名EC-SIZE-TRUNCATIONを指定した例外宣言手続きが実行されます。

RESUME文によって宣言手続きから復帰します。RESUME文に手続き名が指定されているため，「復帰手続き」に制御が移ります。

手続きが実行され，DISPLAY文で「宣言手続きからの復帰」と表示されます。

(2)　GOBACK文，EXIT文

宣言手続きの実行中に，GOBACK文，またはEXIT文を実行すると，暗黙的に宣言手続きからの復帰が行われます。

GOBACK文については，マニュアル「COBOL2002　言語　標準仕様編　10.8.22 GOBACK文」を参照してください。

EXIT文については，マニュアル「COBOL2002　言語　標準仕様編　10.8.20 EXIT文」を参照してください。

GOBACK文を使用した宣言手続きからの復帰の例を，次に示します。

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.

      PROCEDURE DIVISION.
          CALL 'SAMPLE2'. *> 1.
      END PROGRAM SAMPLE1.

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE2.

      >>TURN EC-SIZE CHECKING ON
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 A PIC 9 VALUE 9.
      01 B PIC 9 VALUE 0.
      01 C PIC 9.
      PROCEDURE DIVISION.
      DECLARATIVES.
        USE-1 SECTION.
          USE AFTER EXCEPTION CONDITION EC-ALL. *> 3.
            DISPLAY 'GOBACK実行'.
            GOBACK. *> 4.
      END DECLARATIVES.
               ：
          DIVIDE A BY B GIVING C. *> 2.
          EXIT PROGRAM.
      END PROGRAM SAMPLE2.

プログラム「SAMPLE1」中のCALL文で，プログラム「SAMPLE2」を呼び出します。

プログラム「SAMPLE2」中のDIVIDE文で，例外が検出されます。

例外宣言手続きが実行されます。

GOBACK文によって，宣言手続きから呼び出し元のプログラム「SAMPLE1」のCALL文の次の行へ復帰します。

21.5　例外の伝播

呼び出し先プログラムで検出された例外情報を，呼び出し元プログラムに伝える（以下，伝播という）ことができます。

あるプログラムで例外が引き起こされ，該当する宣言手続きがない場合，呼び出し元プログラムに例外を伝播できます。

例外の伝播の例を，次に示します。

プログラム「PARENTPROGRAM」中のCALL文で，プログラム「CHILDPROGRAM」を呼び出します。

プログラム「CHILDPROGRAM」中のDIVIDE文で，ゼロによる除算の例外が検出されます（例外名：EC-SIZE-ZERO-DIVIDE）。

PROPAGATE指令がONなので，呼び出し元のCALL文に例外が伝播します。

例外の伝播によってCALL文で例外が検出され（例外名：EC-SIZE-ZERO-DIVIDE），例外が引き起こされます。これによって，例外名EC-SIZEを指定したUSE手続きへ制御が移ります。

EC-SIZE-ZERO-DIVIDEは致命的な例外のため，例外宣言節の実行後，プログラムが異常終了します。

例外を伝播させる方法には，次の2種類があります。

PROPAGATE指令によって，例外を自動伝播させる

GOBACK文またはEXIT文のRAISING指定を使用して，明示的に呼び出し元へ例外を伝播させる

＜この節の構成＞

21.5.1　PROPAGATE指令による例外の自動伝播

21.5.2　EXIT文，GOBACK文のRAISING指定による例外の伝播

21.5.3　例外を受け取れないプログラムに例外を伝播させた場合の動作

21.5.1　PROPAGATE指令による例外の自動伝播

PROPAGATE指令をONにすると，引き起こされた例外を自動的に呼び出し元プログラムへ伝播させられます。

PROPAGATE指令については，マニュアル「COBOL2002　言語　標準仕様編　3.3.13 PROPAGATE指令」を参照してください。

PROPAGATE指令を使用した例外の伝播の例を，次に示します。

＜主プログラム：SAMPLE1.CBL＞

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
        ：
      PROCEDURE DIVISION.
      DECLARATIVES.
      ERROR-HANDLER SECTION.
        USE  AFTER EXCEPTION CONDITION EC-BOUND-SUBSCRIPT. *> 4.
          ：
      END DECLARATIVES.
      >>TURN EC-BOUND-SUBSCRIPT CHECKING ON

          CALL 'SAMPLE2'. *> 1.

      END PROGRAM SAMPLE1.

＜副プログラム：SAMPLE2.CBL＞

      >>PROPAGATE ON *> 3.
      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE2.
        ：
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 A.
        02 AA PIC 9 OCCURS 10 INDEXED BY B.
      01 C PIC 9.
        ：
      PROCEDURE DIVISION.
          SET B DOWN BY 1.
      >>TURN EC-BOUND-SUBSCRIPT CHECKING ON
          MOVE AA ( B ) TO C. *> 2.
      END PROGRAM SAMPLE2.

プログラム「SAMPLE1」中のCALL文で，プログラム「SAMPLE2」を呼び出します。

プログラム「SAMPLE2」中のMOVE文で，例外が検出されます（例外名：EC-BOUND-SUBSCRIPT）。

PROPAGATE指令がONなので，呼び出し元のCALL文に例外が伝播します。

例外の伝播によってCALL文で例外が検出され，例外が引き起こされます。これによって，例外名EC-BOUND-SUBSCRIPTを指定したUSE手続きへ制御が移ります。

注意事項

PROPAGATE ONが指定されたプログラムをCOBOL主プログラムとした場合，例外が引き起こされても例外は伝播されないで，COBOLプログラムが正常終了します。

自動伝播される例外は，例外の致命度が致命的なものだけです。致命度が非致命的な例外の場合，自動伝播されないで例外を引き起こした文の次の文が実行されます。

21.5.2　EXIT文，GOBACK文のRAISING指定による例外の伝播

宣言手続き内で，GOBACK文またはEXIT文のRAISING指定に伝播する例外を指定すると，指定した例外を呼び出し元のプログラムに伝播できます。RAISING指定には，例外名，オブジェクト参照一意名，またはLAST指定します。

RAISING指定については，「COBOL2002　言語　標準仕様編　10.8.20 EXIT文」を参照してください。

EXIT PROGRAM文のRAISING指定を使用した例外の伝播の例を，次に示します。

＜主プログラム：SAMPLE1.CBL＞

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
         ：
      PROCEDURE DIVISION.
      DECLARATIVES.
      ERROR-HANDLER SECTION.
        USE AFTER EXCEPTION CONDITION EC-BOUND-SUBSCRIPT. *> 3.
          ：
      END DECLARATIVES.

      >>TURN EC-BOUND-SUBSCRIPT CHECKING ON
        CALL 'SAMPLE2'. *> 1.

      END PROGRAM SAMPLE1.

＜副プログラム：SAMPLE2.CBL＞

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE2.
        ：
      PROCEDURE DIVISION.

          EXIT PROGRAM RAISING EXCEPTION EC-BOUND-SUBSCRIPT. *> 2.

      END PROGRAM SAMPLE2.

プログラム「SAMPLE1」中のCALL文で，プログラム「SAMPLE2」を呼び出します。

プログラム「SAMPLE2」中のEXIT PROGRAM文のRAISING指定に，伝播させる例外名EC-BOUND-SUBSCRIPTが指定されているため，呼び出し元に例外が伝播します。

例外の伝播によってCALL文で例外が検出され，例外が引き起こされます。これによって，例外名EC-BOUND-SUBSCRIPTを指定したUSE手続きへ制御が移ります。

＜この項の構成＞

(1)　RAISING LAST指定

(2)　手続き部見出しのRAISING指定

(3)　RAISING指定による例外オブジェクトの伝播

(1)　RAISING LAST指定

EXIT文またはGOBACK文のRAISING指定にLASTを指定すると，実行単位で最後に引き起こされた例外を伝播できます。RAISING LAST指定は，宣言手続きの実行中だけで使用できます。

なお，何も例外が引き起こされていない状態では，RAISING LAST指定は無視されます。

RAISING LAST指定の例を，次に示します。

＜主プログラム：SAMPLE1.CBL＞

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.

      PROCEDURE DIVISION.
      DECLARATIVES.
      EXCEPTION-HANDLER SECTION.
          USE AFTER EXCEPTION CONDITION EC-SIZE-ZERO-DIVIDE. *> 4.
          DISPLAY FUNCTION EXCEPTION-STATUS.
      END DECLARATIVES.
      >>TURN EC-SIZE-ZERO-DIVIDE CHECKING ON
          CALL 'SAMPLE2'. *> 1.
          STOP RUN.
      END PROGRAM SAMPLE1.

＜副プログラム：SAMPLE2.CBL＞

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE2.
             ：
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 A-REC PIC S9(9) USAGE COMP VALUE 0.
      01 B-REC PIC S9(9) USAGE COMP VALUE 0.
      01 C-REC PIC S9(9) USAGE COMP VALUE 0.
             ：
      PROCEDURE DIVISION.
      DECLARATIVES.
      EXCEPTION-HANDLER SECTION.
          USE AFTER EXCEPTION CONDITION EC-SIZE-ZERO-DIVIDE.
          EXIT PROGRAM RAISING LAST EXCEPTION. *> 3.
      END DECLARATIVES.
      >>TURN EC-SIZE-ZERO-DIVIDE CHECKING ON
          COMPUTE A-REC = B-REC / C-REC. *> 2.
      END PROGRAM SAMPLE2.

プログラム「SAMPLE1」中のCALL文で，プログラム「SAMPLE2」を呼び出します。

プログラム「SAMPLE2」中のCOMPUTE文で，例外EC-SIZE-ZERO-DIVIDEが引き起こされ，例外宣言手続きが実行されます。

EXIT PROGRAM文のRAISING LAST指定によって，最後に引き起こされた例外が呼び出し元のプログラムに伝播します。

例外の伝播によってCALL文で例外が検出され，例外が引き起こされます。これによって，例外名EC-SIZE-ZERO-DIVIDEを指定したUSE手続きへ制御が移ります。

(2)　手続き部見出しのRAISING指定

EXIT文またはGOBACK文のRAISING指定を使って，利用者定義例外，または例外オブジェクトを伝播する場合，手続き部見出しのRAISING指定に，利用者定義例外名，またはオブジェクトのクラス名もしくはインタフェース名を指定する必要があります。指定していない場合，RAISINGに例外名またはオブジェクト参照データを指定したときはコンパイルエラーとなり，RAISING LAST指定のときは例外名EC-RAISING-NOT-SPECIFIEDまたはEC-OO-EXCEPTIONが伝播されます。

手続き部見出しのRAISING指定の例を，次に示します。

＜主プログラム：SAMPLE1.CBL＞

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.

      PROCEDURE DIVISION.
      DECLARATIVES.
      EXCEPTION-HANDLER SECTION.
          USE AFTER EXCEPTION CONDITION EC-USER-XXX.
          DISPLAY FUNCTION EXCEPTION-STATUS.
      END DECLARATIVES.
      >>TURN EC-USER-XXX CHECKING ON
          CALL 'SAMPLE2'.
          STOP RUN.
      END PROGRAM SAMPLE1.

＜副プログラム：SAMPLE2.CBL＞

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE2.
             ：
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 A-REC PIC S9(9) USAGE COMP VALUE 0.
      01 B-REC PIC S9(9) USAGE COMP VALUE 0.
      01 C-REC PIC S9(9) USAGE COMP VALUE 0.
             ：
      PROCEDURE DIVISION RAISING EC-USER-XXX.
      DECLARATIVES.
      ERROR-HANDLER SECTION.
        USE AFTER EXCEPTION CONDITION EC-SIZE-ZERO-DIVIDE.
          EXIT PROGRAM RAISING EXCEPTION EC-USER-XXX
      END DECLARATIVES.
      >>TURN EC-SIZE-ZERO-DIVIDE CHECKING ON
          ：
          COMPUTE A-REC = B-REC / C-REC.
          ：
      END PROGRAM SAMPLE2.

(3)　RAISING指定による例外オブジェクトの伝播

RAISING指定を使用して例外オブジェクトを伝播する場合，次の規則が適用されます。詳細は，マニュアル「COBOL2002　言語　標準仕様編　10.5.11(1) 例外」の例外オブジェクトの説明を参照してください。

EXIT文およびGOBACK文を使って例外オブジェクトを伝播する場合，呼び出し元プログラムおよび呼び出し先プログラムの状態によって，次に示す処理が実行されます。

呼び先し先のプログラムの状態 | 呼び出し元のプログラムの状態
該当するUSE宣言手続きあり | 該当するUSE宣言手続きなし
PROPAGATE指令ON | PROPAGATE指令OFF
手続き部見出しのRAISING指定あり | 手続き部見出しのRAISING指定なし
手続き部見出しのRAISING指定あり | 例外オブジェクトを伝播する。※1 | 例外オブジェクトを伝播する。※2 | 例外オブジェクトを伝播する。※3 | EC-OO-EXCEPTIONを伝播する。
手続き部見出しのRAISING指定なし | EC-OO-EXCEPTIONを伝播する。

注※1

伝播後，該当する宣言手続きを実行します。

注※2

伝播後，GOBACK RAISING LASTを実行します。

注※3

伝播後，GOBACK RAISING EXCEPTION EC-OO-EXCEPTIONを実行します。

RAISING指定による例外オブジェクトの伝播の例を，次に示します。

＜主プログラム：SAMPLE1.CBL＞

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.

      PROCEDURE DIVISION.
      DECLARATIVES.
      EXCEPTION-HANDLER SECTION.
          USE AFTER EXCEPTION CONDITION EC-OO-EXCEPTION. *> 3.
          DISPLAY FUNCTION EXCEPTION-STATUS.
      END DECLARATIVES.
      >>TURN EC-OO-EXCEPTION CHECKING ON
          CALL 'SAMPLE2'. *> 1.
          STOP RUN.

＜副プログラム：SAMPLE2.CBL＞

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE2.

      ENVIRONMENT DIVISION.
      CONFIGURATION SECTION.
      REPOSITORY.
      CLASS EXCEPT-CLASS.

      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 OBJ USAGE OBJECT REFERENCE EXCEPT-CLASS.

      PROCEDURE DIVISION RAISING EXCEPT-CLASS.
          INVOKE EXCEPT-CLASS 'NEW' RETURNING OBJ.
          GOBACK RAISING OBJ. *> 2.
      END PROGRAM SAMPLE2.

      IDENTIFICATION DIVISION.
      CLASS-ID. EXCEPT-CLASS INHERITS BASE.

      ENVIRONMENT DIVISION.
      CONFIGURATION SECTION.
      REPOSITORY.
      CLASS BASE.
            ：
      END CLASS EXCEPT-CLASS.

プログラム「SAMPLE1」中のCALL文で，プログラム「SAMPLE2」を呼び出します。

プログラム「SAMPLE2」中のGOBACK文のRAISING指定によって，例外オブジェクトの伝播が発生します。
このとき，SAMPLE2の手続き部見出しのRAISING指定には，クラス名が指定されていますが，主プログラム「SAMPLE1」に発生した例外に対応するUSE宣言手続きやPROPAGATE指令がないため，GOBACK文の処理は，GOBACK RAISING EXCEPTION EC-OO-EXCEPTIONとなります。

例外の伝播によってCALL文で例外EC-OO-EXCEPTIONが検出され，該当するUSE手続きへ制御が移ります。

21.5.3　例外を受け取れないプログラムに例外を伝播させた場合の動作

＜この項の構成＞

(1)　例外を受け取れないプログラム

(2)　呼び出し元プログラムが例外を受け取れない場合の動作

(1)　例外を受け取れないプログラム

CALL文，INVOKE文，および利用者定義関数によって呼び出されたプログラム（例外を送る側）で例外が発生し，呼び出し元プログラム（例外を受け取る側）へ例外の伝播を実行しようとしても，呼び出し元プログラムが例外を受け取れない場合，例外は伝播しません。

例外を受け取れる呼び出し元プログラム，例外を受け取れない呼び出し元プログラムの条件を次に示します。

条件
プログラム種別／指定

COBOL
85
COBOL2002
COBOL
以外の言語

-Compati85,NoPropagate指定なし※1
-Compati85,NoPropagate指定あり※1

伝播抑止条件※2
左記以外
伝播抑止条件※2
左記以外

例外を受け取る文
オブジェクト指向のINVOKE文
－
×
○
×
×
－

利用者定義関数を参照する文
－
×
○
×
×
－

CALL文
無条件指定なし※3
×
×
○
×
×
－

無条件指定あり※3
×
○※4
○
×
×
－

（凡例）

○：例外を受け取れる

×：例外を受け取れない

－：該当しない

注※1

例外の伝播を抑止するコンパイラオプションについては，「32.5.12　他システムとの移行の設定」の「(2)　-Compati85オプション」を参照してください。

注※2

次の条件が重なった場合，例外の伝播を抑止します。

プログラム中にON指定のあるPROPAGATE指令が書かれていない。

プログラム中にTURN指令が一つも書かれていない。
ただし上記の1.～2.では，入れ子のプログラムや複数の最外側のプログラムが書かれたソースで，該当するプログラムの前にON指定のあるPROPAGATE指令や有効なTURN指令がある場合，それ以降に定義されたすべてのプログラムは，例外の伝播を抑止する対象にはなりません。

宣言節中のUSE文にEXCEPTION OBJECT指定が一つもない。

注※3

ON OVERFLOW指定，ON EXCEPTION指定，NOT ON EXCEPTION指定

注※4

呼び出されたプログラム（例外を送る側）で例外が発生し，呼び出し元プログラム（例外を受け取る側）へ例外を伝播する場合，CALL文の無条件文は実行されません。詳細については，マニュアル「COBOL2002　言語　標準仕様編　10.8.4(3) 一般規則」を参照してください。

(2)　呼び出し元プログラムが例外を受け取れない場合の動作

呼び出し元プログラムが例外を受け取れない場合，呼び出し先プログラムで例外が検出されたときの動作が異なります。

例外が検出されたときの動作の詳細については，「21.8.3　例外処理の動作」を参照してください。

例外を受け取れないプログラムへ例外の伝播を実行しようとした場合の例を次に示します。

＜主プログラム：SAMPLE1.CBL（COBOL85で作成したプログラム）＞

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
          ：
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 PARAM USAGE COMP-1 VALUE +9.9E+01.
          ：
      PROCEDURE DIVISION.
          CALL 'SAMPLE2' USING PARAM. *> 1.
      END PROGRAM SAMPLE1.

＜副プログラム：SAMPLE2.CBL（COBOL2002で作成したプログラム）＞

      >>PROPAGATE ON
      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE2.
          ：
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 ANS USAGE COMP-1.
      01 DATA-A PIC X(21) VALUE '100300700800400600900'.
      01 DATA-B REDEFINES DATA-A.
         02 DATA-C PIC 9(3) OCCURS 7 TIMES
                   INDEXED BY DATA-D DATA-E.
      LINKAGE SECTION.
      01 PARAM USAGE COMP-1.
          ：
      PROCEDURE DIVISION USING PARAM.
          SET DATA-D DATA-E TO 0.
      >>TURN EC-RANGE-SEARCH-INDEX CHECKING ON
          SEARCH DATA-C VARYING DATA-E      *>2.
              WHEN  DATA-C(DATA-E) > 1500
                  CONTINUE
          END-SEARCH.
      >>TURN EC-ARGUMENT-FUNCTION CHECKING ON
          COMPUTE ANS = FUNCTION ACOS ( PARAM ). *> 3.
          DISPLAY 'ANSWER  =' ANS.
      END PROGRAM SAMPLE2.

プログラム「SAMPLE1」中のCALL文で，プログラム「SAMPLE2」を呼び出します。

PROPAGATE指令がONになっていますが，プログラム「SAMPLE2」中のSEARCH文で検出した例外が非致命的な例外のため，例外は伝播されず次の文（COMPUTE文）へ実行が継続されます。

COMPUTE文で致命的な例外が検出され，かつ，PROPAGATE指令がONになっていますが，プログラム「SAMPLE1」は例外を受け取れないため，例外は伝播しません。この場合，実行時エラーメッセージ（KCCC0403R-S:「例外を伝播できません。」）を出力し，プログラム「SAMPLE2」が異常終了します。

21.6　明示的な例外の引き起こし

COBOL2002では，明示的に例外を引き起こせます。明示的に例外を引き起こすと，ユーザプログラムが固有に定めたエラー状態を利用者定義例外として発生させたり，ある例外種別で実行される宣言手続き処理に対してユーザプログラムから明示的に例外を発生させて実行できます。これによって，宣言手続き処理を共通化できます。

共通例外処理で明示的に例外を引き起こすには，RAISE文を使用します。RAISE文にレベル3の例外名またはオブジェクト参照の一意名を指定して実行すると，指定した例外が引き起こされます。

RAISE文に指定する例外が例外名の場合，該当するTURN指令のチェックがONでなくても，例外が引き起こされます。

また，RAISE文に例外名EC-I-Oに関連する例外を指定して実行する場合，次の規則に従います。

入出力状態は，変更されません。

ファイル名指定の例外宣言手続きは，実行されません。

RAISE文については，マニュアル「COBOL2002　言語　標準仕様編　10.8.32 RAISE文」を参照してください。

RAISE文に例外名を指定して実行した場合の例を，次に示します。

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE.

      PROCEDURE DIVISION.
      DECLARATIVES.
      USE-1 SECTION.
          USE AFTER EXCEPTION CONDITION EC-USER-EXCEPTION. *> 2.
          DISPLAY 'EC-USER-EXCEPTION RAISE'.
      END DECLARATIVES.

          RAISE EXCEPTION EC-USER-EXCEPTION. *> 1.

      END PROGRAM SAMPLE.

RAISE文によって，例外EC-USER-EXCEPTIONが引き起こされます。

EC-USER-EXCEPTIONに対応する例外宣言手続きに処理が移り，DISPLAY文が実行されます。

21.7　例外情報の参照

最新例外状態を参照すると，最後に発生した例外情報を参照できます。最新例外状態の参照には，組み込み関数や，EXCEPTION-OBJECTを使用します。

＜この節の構成＞

21.7.1　組み込み関数を使用した例外情報の参照

21.7.2　EXCEPTION-OBJECT

21.7.3　最新例外状態のクリア

21.7.1　組み込み関数を使用した例外情報の参照

次の組み込み関数を使用すると，実行単位で最後に引き起こされた例外（最新例外状態）の詳細な情報を取得できます。

＜この項の構成＞

(1)　EXCEPTION-FILE関数

(2)　EXCEPTION-LOCATION関数

(3)　EXCEPTION-STATEMENT関数

(4)　EXCEPTION-STATUS関数

(5)　使用例

(6)　注意事項

(1)　EXCEPTION-FILE関数

最新例外状態に関連するファイル結合子の入出力状態の値，およびファイル名称を返します。関数の戻り値の長さは，64バイトです。

EXCEPTION-FILE関数の戻り値を，次に示します。

例外の種類 | 関数の戻り値の内容
入出力に関連する例外の場合※1 | 入出力状態とファイル名
入出力以外の例外の場合※2 | 00

注※1

入出力に関連する例外（例外名EC-I-Oに関連する例外）であっても，例外名EC-I-O-LINAGE，EC-I-O-EOP，またはEC-I-O-EOP-OVERFLOWの場合は，入出力状態が00となります。

注※2

入出力以外の例外の場合とは，次の状態を指します。

例外が検出されていない状態

RAISE文で，例外名EC-I-Oに関連する例外を指定して実行した場合

例外名EC-I-O以外の例外が引き起こされている状態

EXCEPTION-FILE関数については，マニュアル「COBOL2002　言語　標準仕様編　11.22 EXCEPTION-FILE関数」を参照してください。

(2)　EXCEPTION-LOCATION関数

最新例外状態に関連する文の位置を返します。関数の戻り値の長さは，303バイトです。

EXCEPTION-LOCATION関数の戻り値は，プログラム／利用者定義関数／メソッドの名称，手続き名，およびソース行識別子から構成され，それぞれがセミコロン（;）と空白1文字で区切られた形式となっています。

EXCEPTION-LOCATION関数の戻り値を，次に示します。

例外の有無
関数の戻り値の内容

例外あり

プログラム／利用者定義関数／メソッドの名称

手続き名

ソース行識別子

例外なし
英数字空白

例外ありの場合の形式

AAA…AA;△BB…B;△CCCCCCC/CCC

AAA…AA

プログラム／利用者定義関数／メソッドの名称

BB…B

手続き名

CCCCCCC/CCC

ソース行識別子

△

半角空白文字を示します。

それぞれの項目に返される値を，次に示します。

プログラム／利用者定義関数／メソッド

プログラム／利用者定義関数／メソッド名称として返される値について，次に示します。

例外の引き起こされた位置を
含む定義の種別
関数の戻り値の内容

プログラム
プログラム名

利用者定義関数
利用者定義関数名

メソッド
メソッド名

手続き名

手続き名として返される値について，次に示します。

手続き名は，例外が発生した文の段落名，節名の有無によって出力内容が異なります。

手続きの種別 | 関数の戻り値の内容
段落名，節名あり※ | 段落名 OF 節名
段落名だけあり | 段落名
節名だけあり※ | 節名
段落名，節名なし | 何も戻さない

注※

-Optimize,2オプションの指定によって，そとPERFORM文のインライン展開が処理された場合，インライン展開によって段落名および手続き文が移動されます。このため，インライン展開された個所で例外が発生したとき，インライン展開されていない場合に返される手続き名の値と相違があります。

そとPERFORM文のインライン展開がされなかった個所（COMPUTE文）で例外が発生した場合に返される手続き名の相違の例を，次に示します。

インライン展開前の形式
インライン展開後の形式

AAA SECTION.
   PERFORM XXX.
   STOP RUN.
BBB SECTION.
XXX.
   COMPUTE A = B + 1.
CCC SECTION.
   COMPUTE A = B + 2.

AAA SECTION.
XXX.
   COMPUTE A = B + 1.
   STOP RUN.
BBB SECTION.
CCC SECTION.
   COMPUTE A = B +  2.

返される手続き名
　XXX△OF△BBB
返される手続き名
　XXX△OF△AAA

（凡例）　△：空白（X'20'）

ソース行識別子

ソース行識別子として返される値について，次に示します。

このシステムでのソース行識別子は，例外が発生した文の行番号7けたと欄番号3けたの間に/を追加したものとなります。なお，行番号が7けたを超える場合，または欄番号が3けたを超える場合，各最大けたを超える上位けたについては，けた落ちが発生します。

EXCEPTION-LOCATION関数については，マニュアル「COBOL2002　言語　標準仕様編　11.23 EXCEPTION-LOCATION関数」を参照してください。

(3)　EXCEPTION-STATEMENT関数

例外が引き起こされた文の名前を返します。関数の戻り値の長さは，31バイトです。

EXCEPTION-STATEMENT関数の戻り値を，次に示します。

例外の有無 | 関数の戻り値の内容
例外あり | 例外の発生した文の名前
例外なし | 英数字空白31文字

EXCEPTION-STATEMENT関数については，マニュアル「COBOL2002　言語　標準仕様編　11.24 EXCEPTION-STATEMENT関数」を参照してください。

(4)　EXCEPTION-STATUS関数

最新例外状態に関連する例外名称を返します。関数の戻り値の長さは，31バイトです。

EXCEPTION-STATUS関数の戻り値を，次に示します。

引き起こされた例外の種別 | 関数の戻り値の内容
例外名 | 例外名
例外オブジェクト | EXCEPTION-OBJECT
例外なし | 英数字空白31文字

EXCEPTION-STATUS関数については，マニュアル「COBOL2002　言語　標準仕様編　11.25 EXCEPTION-STATUS関数」を参照してください。

(5)　使用例

組み込み関数を使用して最新例外状態を参照するCOBOLプログラムの例を，次に示します。

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE.
          ：
      ENVIRONMENT DIVISION.
      INPUT-OUTPUT SECTION.
      FILE-CONTROL.
      SELECT INFILE  ASSIGN 'INPUT-FILE'.
      SELECT OUTFILE ASSIGN 'OUTPUT-FILE'.
          ：
      DATA DIVISION.
      FILE SECTION.
      FD INFILE.
      01 INREC   PIC X(10).
      FD OUTFILE.
      01 OUTREC  PIC X(10).
      WORKING-STORAGE SECTION.
      01 EOF-FLG PIC 9 VALUE 0.
          ：
      PROCEDURE DIVISION.
      DECLARATIVES.
      EXCEPTION-HANDLING SECTION.
          USE AFTER EXCEPTION CONDITION EC-I-O.  *> 2.
            DISPLAY FUNCTION EXCEPTION-FILE.
            DISPLAY FUNCTION EXCEPTION-LOCATION.
            DISPLAY FUNCTION EXCEPTION-STATEMENT.
            DISPLAY FUNCTION EXCEPTION-STATUS.
            IF FUNCTION EXCEPTION-STATEMENT = 'OPEN' THEN
              IF FUNCTION EXCEPTION-FILE (3  :  ) = 'OUTFILE' THEN
                RESUME AT ERROR-HANDLE2
              END-IF
              RESUME AT ERROR-HANDLE3
            END-IF.
            RESUME AT ERROR-HANDLE1.
      END DECLARATIVES.

      >>TURN EC-I-O CHECKING ON
          OPEN INPUT  INFILE. *> 1.
          OPEN OUTPUT OUTFILE.
          PERFORM UNTIL EOF-FLG = 1
            READ INFILE
            WRITE OUTREC FROM INREC
          END-PERFORM.
      ERROR-HANDLE1.
          CLOSE OUTFILE.
      ERROR-HANDLE2.
          CLOSE INFILE.
      ERROR-HANDLE3. *> 3.
          STOP RUN.
      END PROGRAM 'SAMPLE'.

物理ファイル「INPUT-FILE」がない場合，OPEN文で永続誤りが発生し，最新例外状態が更新されます。

例外に該当する例外宣言手続きが実行されます。この手続き中で組み込み関数を使用すれば，例外の情報を参照できます。この例では，次の例外情報が組み込み関数の戻り値として取得されます。

組み込み関数名 | 関数の戻り値
EXCEPTION-FILE | 35INFILE
EXCEPTION-LOCATION | SAMPLE;△;△0000035​/011 ※
EXCEPTION-STATEMENT | OPEN
EXCEPTION-STATUS | EC-I-O-PERMANENT-ERROR

（凡例）

△：半角空白文字を示す

注※

例外が発生したOPEN文の行番号が35，欄番号が11の場合です。

例外宣言手続き中のIF文の判定によって，RESUME ERROR-HANDLE3が実行され，手続きERROR-HANDLE3に復帰します。

(6)　注意事項

EXCEPTION-STATEMENT関数，EXCEPTION-STATUS関数では，関数の戻り値の英数字は，すべて大文字となります。

関数の戻り値に補われるスラント（/），セミコロン（;），空白文字は，英数字文字として扱われます。

関数の戻り値の長さに満たない場合は，英数字空白が補われます。

EXCEPTION-FILE関数，およびEXCEPTION-LOCATION関数に含まれる利用者定義語は，-EquivRule,NotExtend，-EquivRule,NotAny，または-EquivRule,StdCodeオプションが指定されていない場合，等価規則に基づいて変換されます。

EXCEPTION-LOCATION関数でのプログラム／利用者定義関数／メソッドの名称は，プログラム名，メソッド名，および利用者定義関数名の変換規則に基づいて変換されます。

21.7.2　EXCEPTION-OBJECT

例外オブジェクトが引き起こされると，そのオブジェクト参照がEXCEPTION-OBJECTにセットされます。宣言手続き中でEXCEPTION-OBJECTを参照すると，引き起こされたオブジェクトへの参照を取得できます。

EXCEPTION-OBJECTの詳細については，マニュアル「COBOL2002　言語　標準仕様編　4.3.2(5) EXCEPTION-OBJECT」を参照してください。

EXCEPTION-OBJECTの規則

例外オブジェクトが引き起こされていない場合，または例外名による例外が引き起こされた場合，EXCEPTION-OBJECTにはNULLがセットされます。

EXCEPTION-OBJECTは，値の参照およびクリアだけができます。値の代入はできません。

EXCEPTION-OBJECTは，外部属性を持つオブジェクト参照データ項目で，実行単位に一つだけ存在します。

使用例

EXCEPTION-OBJECTの使用例を，次に示します。

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE.

      ENVIRONMENT DIVISION.
      CONFIGURATION SECTION.
      REPOSITORY.
      CLASS EXCEPT-CLASS.

      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 OBJ USAGE OBJECT REFERENCE EXCEPT-CLASS.

      PROCEDURE DIVISION.
      DECLARATIVES.
      EXCEPTION-HANDLER SECTION.
          USE AFTER EXCEPTION OBJECT EXCEPT-CLASS. *> 2.
          INVOKE EXCEPTION-OBJECT 'SAMPLEMETHOD'.
      END DECLARATIVES.

          INVOKE EXCEPT-CLASS 'NEW' RETURNING  OBJ.
          RAISE  OBJ. *> 1.

      END PROGRAM SAMPLE.

      IDENTIFICATION DIVISION.
      CLASS-ID. EXCEPT-CLASS INHERITS BASE.

      ENVIRONMENT DIVISION.
      CONFIGURATION SECTION.
      REPOSITORY.
      CLASS BASE.
      IDENTIFICATION DIVISION.
      OBJECT.

      IDENTIFICATION DIVISION.

      METHOD-ID. SAMPLEMETHOD.
      PROCEDURE DIVISION.

          DISPLAY 'EXCEPTION-OBJECTの使用例'.

      END METHOD SAMPLEMETHOD.
      END OBJECT.
      END CLASS EXCEPT-CLASS.

プログラム「SAMPLE」中のRAISE文に，オブジェクト参照一意名が指定されているため，例外オブジェクトが引き起こされます。

例外宣言手続き内で，INVOKE文にEXCEPTION-OBJECTが指定されているため，例外オブジェクト（OBJ）を参照できます。SAMPLEMETHODが実行されます。

21.7.3　最新例外状態のクリア

最新例外状態は，一度例外が発生したあとに処理を継続すると，次に例外が発生するまで，前の最新例外状態を示しています。前の最新例外状態を削除（クリア）するには，SET文を使用します。このとき，EXCEPTION-OBJECTも，同時にクリアされます。

SET文の詳細については，「COBOL2002　言語　標準仕様編　10.8.43 SET文」を参照してください。

SET文を使用して最新例外状態をクリアする例を，次に示します。

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE.
      PROCEDURE DIVISION.

          RAISE EXCEPTION EC-OVERFLOW-STRING. *> 1.
          DISPLAY '-----RAISE文実行後-----'. *> 2.
          DISPLAY 'EXCEPTION-STATEMENT = '
                  FUNCTION EXCEPTION-STATEMENT. *> 2.
          DISPLAY 'EXCEPTION-STATUS = '
                  FUNCTION EXCEPTION-STATUS. *> 2.

          SET LAST EXCEPTION TO OFF. *> 3.
          DISPLAY '-----最新例外状態のクリア後-----'. *> 4.
          DISPLAY 'EXCEPTION-STATEMENT = '
                  FUNCTION EXCEPTION-STATEMENT. *> 4.
          DISPLAY 'EXCEPTION-STATUS = '
                  FUNCTION EXCEPTION-STATUS. *> 4.

          STOP RUN.
      END PROGRAM SAMPLE.

RAISE文によって例外が引き起こされ，最新例外状態が更新されます。

1.で発生した最新例外状態の内容がDISPLAY文によって出力されます。例外が発生した文の名前として「RAISE」が，最新例外状態の例外名として「EC-OVERFLOW-STRING」が，それぞれ出力されます。

SET文によって，1.で設定された最新例外状態がクリアされます。

2.と同様，最新例外状態の内容がDISPLAY文によって出力されます。3.のSET文によって最新例外状態がクリアされているため，例外が発生した文の名前，および最新例外状態の例外名には，それぞれ空白が出力されます。

21.8　例外の検出条件

共通例外処理では，文の種類やTURN指令の有無，PROPAGATE指令の有無などによって，検出される例外が異なります。

＜この節の構成＞

21.8.1　例外が検出される文の詳細

21.8.2　例外検出での注意事項

21.8.3　例外処理の動作

21.8.1　例外が検出される文の詳細

例外が検出される手続き文および組み込み関数の詳細を，次に示します。なお，例外名の一覧については，「21.2.1　例外名」の「(2)　例外名の一覧」を参照してください。

＜この項の構成＞

(1)　例外を検出する組み込み関数

(2)　おのおのの例外が検出される文

(1)　例外を検出する組み込み関数

例外を検出する組み込み関数の一覧を，次に示します。

組み込み関数 | EC-ARGUMENT
FUNCTION | IMP
ACOS | ○ | ○
ANNUITY | ○ | －
ASIN | ○ | ○
ATAN | － | ○
CHAR | ○ | －
COS | － | ○
COUNT-CHAR※ | ○ | －
DATE-OF-INTEGER | ○ | －
DAY-OF-INTEGER | ○ | －
DISPLAY-OF※ | ○ | ○
FACTORIAL | ○ | －
INTEGER-OF-DATE | ○ | －
INTEGER-OF-DAY | ○ | －
LENGTH-OF-SUBSTRING※ | ○ | －
LOG | ○ | ○
LOG10 | ○ | ○
LOWER-CASE | ○ | －
MEDIAN | ○ | ○
MOD | ○ | －
NATIONAL-OF※ | ○ | ○
NUMVAL | ○ | －
NUMVAL-C | ○ | －
ORD | ○ | －
PRESENT-VALUE | ○ | －
RANDOM | ○ | －
REM | ○ | －
REVERSE | ○ | －
SIN | － | ○
SQRT | ○ | ○
SUBSTRING※ | ○ | －
TAN | － | ○
UPPER-CASE | ○ | －

（凡例）

○：例外が検出される

－：例外が検出されない

注※

AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効です。

上記の表に記述のない組み込み関数については，例外が検出されません。

(2)　おのおのの例外が検出される文

おのおのの例外が検出される文について，次に示します。

文
EC-BOUND
EC-PROGRAM
（利用者定義関数を指定可能な文）

ODO
REF-MOD
SUBSCRIPT

ACCEPT※
○
○
○
－

ADD
○
－
○
－

CALL
○
－
○
－

CANCEL
－
－
○
－

COMPUTE
○
－
○
○

DISPLAY
－
○
○
○

DIVIDE
○
－
○
○

EVALUATE
－
○
○
○

EXIT
－
－
－
－

GOBACK
－
－
－
－

IF
－
○
○
○

INITIALIZE
○
○
○
－

INSPECT
○
○
○
－

INVOKE
○
－
○
－

MOVE
○
○
○
○

MULTIPLY
○
－
○
－

PERFORM
○
○
○
○

RAISE
－
－
－
－

READ
○
○
○
－

RELEASE
－
○
○
○

RETURN
○
○
○
－

SEARCH
－
○
○
○

SET
－
－
－
○

STRING
○
○
○
○

SUBTRACT
○
－
○
－

UNSTRING
○
○
○
○

WRITE
－
○
○
○

（凡例）

○：例外が検出される

－：例外が検出されない

注※

HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Solaris(SPARC)の場合，画面節（WINDOW SECTION）の画面操作で使用する，FIRST FIELD指定の一意名については，例外が検出されません。

21.8.2　例外検出での注意事項

＜この項の構成＞

(1)　共通の注意事項

(2)　プログラム間連絡での注意事項

(3)　入出力での注意事項

(4)　コンパイラオプションとの関連性

(1)　共通の注意事項

Uレベルエラー（KCCCnnnnR-U）が発生した場合，発生したUレベルエラーに対しては，共通例外処理を実行できません。Uレベルエラーは，常に実行時エラーとなります。

(2)　プログラム間連絡での注意事項

CALL文で実行可能ファイルを呼び出す場合，次に示す例外に対してだけ共通例外処理を実行できます。なお，実行可能ファイル内で引き起こされた例外は，呼び出し元プログラムに伝播できません。

表21-9　実行可能ファイルの呼び出しで検出される例外と例外名

検出される例外 | 例外名
CALL文で指定した実行可能ファイルが見つからない。 | EC-PROGRAM-NOT-FOUND
実行可能ファイルを実行中にメモリが不足した。 | EC-PROGRAM-RESOURCES
実行可能ファイルの処理中にエラーが発生した。 | EC-PROGRAM-IMP

COBOL85※で作成したプログラムをCALL文に指定して呼び出す場合は，次に示す例外に対してだけ共通例外処理を実行できます。

注※

COBOL85でコンパイルしたプログラムが動作可能なシステム

表21-10　COBOL85で作成したプログラムの呼び出しで検出される共通例外と例外名

共通例外処理で検出される例外 | 例外名
CALL文で指定したプログラム名が，呼び出しできないプログラムである。 | EC-PROGRAM-NOT-FOUND
動的なリンクの処理中にメモリが不足した。 | EC-PROGRAM-RESOURCES
共用ライブラリのロード中にエラーが発生した。 | EC-PROGRAM-IMP

CALL文に，ENTRY文で定義した呼び出し先プログラムの入口点を指定し，かつその入口点に指定したプログラムがマルチスレッド対応COBOLプログラムの場合は，次に示す共通例外処理を実行できません。

表21-11　CALL文にENTRY文で定義した入口点を指定した場合に共通例外処理ができない例外

共通例外処理ができない例外 | 例外名
マルチスレッド機能の処理中にメモリが不足した。 | EC-PROGRAM-RESOURCES

(3)　入出力での注意事項

共通例外処理では，プログラムが順次処理していく過程で例外を検出するため，発生する例外は，常に1種類となります。ただし，次に示す場合は，処理の順序に関係なく，致命的な例外が優先して検出されます。

ページあふれ条件での例外が発生したあと，LINAGE句に指定したデータ名の値不正によって例外が検出された場合。

入出力文を実行する際に，SELECT句のファイル名に割り当てられた物理ファイル，または物理ファイルに対するレコードが，ほかの実行単位によって排他モードで使用されている場合，入出力文の実行は不成功となり，入出力状態が9xを示しますが，例外名EC-I-O-IMPは検出されません。

(4)　コンパイラオプションとの関連性

共通例外処理とコンパイラオプションとの関連性について，次に示します。

デバッグオプションを指定した場合に実行されるエラーチェックと，共通例外処理での例外の検出は，同時に実行できません。デバッグオプションを指定した場合に無効となる例外名を，次に示します。

表21-12　デバッグオプション指定時に無効となる例外名

デバッグオプション
デバッグオプション指定時に無効となる例外名

-DebugCompati

EC-PROGRAM-ARG-MISMATCH

EC-BOUND-REF-MOD

EC-BOUND-SUBSCRIPT

-DebugRange

EC-BOUND-REF-MOD

EC-BOUND-SUBSCRIPT

デバッグオプションによるエラーチェックは，共通例外処理の例外の検出よりも優先されます。そのため，デバッグオプションの指定の有無によって，実行結果が異なることがあります。

EC-ALLや複数の例外名を指定した場合，-DebugDataオプションの指定の有無によって，検出される例外が変わることがあります。

21.8.3　例外処理の動作

共通例外処理では，例外の検出された要因，および例外処理の指定有無によって，実行される処理が異なります。それぞれの場合の処理について，「表21-13　手続き文で検出された例外」，「表21-14　RAISE文によって引き起こされた例外」，および「表21-15　例外の伝播によって検出された例外」に示します。

なお，TURN指令のチェックがONの場合の動作は，表の左から順にチェックされ，該当するものが実行されます。

表21-13　手続き文で検出された例外

例外の
致命度
TURN指令のチェックがOFF
TURN指令のチェックがON

該当する宣言手続きがある※1
PROPAGATE指令がON
例外処理なし

呼び出し元が例外を受け取れないプログラム※2
左記以外

致命的
実行時エラー
または
実行を継続※3
該当する宣言手続きを実行したあと，エラーメッセージ（KCCC0015R-S）を出力し，実行単位が異常終了※4
エラーメッセージ（KCCC0403R-S）を出力し，実行単位が異常終了
例外を伝播
エラーメッセージ（KCCC0401R-S）を出力し，実行単位が異常終了

非致命的
実行を継続※5
該当する宣言手続きを実行し，次の文から実行を継続
実行を継続※5
実行を継続※5
実行を継続※5

注※1

宣言手続きからの復帰が実行されない場合です。

注※2

例外を受け取れないプログラムの詳細については，「21.5.3　例外を受け取れないプログラムに例外を伝播させた場合の動作」を参照してください。

注※3

致命的な例外に対するTURN指令のチェックがOFFの場合の動作については，「21.3.3　例外チェックが無効な場合の動作」の「(1)　手続き文の実行中にエラーが発生し，例外を検出した場合」を参照してください。

注※4

致命的な例外のうち，入出力に分類される例外（例外名EC-I-O）については，実行が継続されます。

注※5

実行継続の詳細については，各文の一般規則を参照してください。

表21-14　RAISE文によって引き起こされた例外

例外の
致命度
該当する宣言手続きがある※1
PROPAGATE指令がON
例外処理なし

致命的
該当する宣言手続きを実行したあと，エラーメッセージ（KCCC0015R-S）を出力し，実行単位が異常終了※2
例外を伝播
エラーメッセージ（KCCC0401R-S）を出力し，実行単位が異常終了

非致命的
該当する宣言手続きを実行し，RAISE文の次の文から実行を継続
RAISE文の次の文から実行を継続
RAISE文の次の文から実行を継続

注※1

宣言手続きからの復帰が実行されない場合です。

注※2

致命的な例外のうち，入出力に分類される例外（例外名EC-I-O）については，実行が継続されます。

表21-15　例外の伝播によって検出された例外

例外の
致命度
TURN指令のチェックがOFF
TURN指令のチェックがON

該当する宣言手続きがある※1
PROPAGATE指令がON
例外処理なし

致命的
エラーメッセージ（KCCC0402R-S）を出力し，実行単位が異常終了
該当する宣言手続きを実行したあと，エラーメッセージ（KCCC0015R-S）を出力し，実行単位が異常終了※2
例外を伝播
エラーメッセージ（KCCC0401R-S）を出力し，実行単位が異常終了

非致命的※3
次の文から実行を継続※4
該当する宣言手続きを実行し，次の文から実行を継続※4
次の文から実行を継続※4
次の文から実行を継続※4

注※1

宣言手続きからの復帰が実行されない場合です。

注※2

致命的な例外のうち，入出力に分類される例外（例外名EC-I-O）については，実行が継続されます。

注※3

EXIT文，GOBACK文のRAISING指定によって例外が伝播した場合だけが対象です。

注※4

次の文とは，CALL文，INVOKE文，および利用者定義関数を呼び出した文の次の文を指します。

21.9　共通例外処理の注意事項

＜この節の構成＞

21.9.1　共通例外処理を使用した場合の性能について

21.9.2　従来形式の例外処理と共通例外処理の関係

21.9.1　共通例外処理を使用した場合の性能について

共通例外処理を使用する場合（TURN指令のチェックをONにした場合），例外処理のためのオブジェクトが生成されるため，TURN指令のチェックをOFFにした場合と比較して，オブジェクトサイズや実行性能が劣化します。

21.9.2　従来形式の例外処理と共通例外処理の関係

＜この項の構成＞

(1)　従来形式の例外処理を実行する場合の最新例外状態の更新

(2)　従来形式の宣言手続きと共通例外処理の宣言手続きの優先順序

(3)　FILE STATUS句の指定と共通例外処理での異常終了

(1)　従来形式の例外処理を実行する場合の最新例外状態の更新

従来形式の例外処理を実行する場合，検出した例外に対する例外名のTURN指令のチェックがONであれば，最新例外状態が更新されます。ただし，従来形式の例外処理のうちON SIZE ERROR指定については，ON SIZE ERRORを実行する際に例外が検出されないため，TURN指令のチェックがONであっても最新例外状態は更新されません。従来形式の例外処理を実行する場合に，最新例外状態が更新される例外処理と，更新されない例外処理を，次に示します。

最新例外状態が更新される従来形式の例外処理

従来形式の宣言手続き

READ文，SEARCH文のAT END指定

WRITE文のAT EOP指定

WRITE文，REWRITE文，DELETE文，START文のINVALID KEY指定

CALL文のON OVERFLOW，ON EXCEPTION指定

STRING文，UNSTRING文のON OVERFLOW指定

最新例外状態が更新されない従来形式の例外処理

ADD文，SUBTRACT文，MULTIPLY文，DIVIDE文，COMPUTE文のON SIZE ERROR指定

(2)　従来形式の宣言手続きと共通例外処理の宣言手続きの優先順序

従来形式の宣言手続きと共通例外処理の宣言手続きを同時に指定した場合，従来形式の宣言手続きが優先して実行されます。ただし，例外を検出したプログラムが入れ子のプログラムで，上位プログラムにGLOBAL句を指定した従来形式の宣言手続きが定義されているときは，入れ子のプログラム中の共通例外処理の宣言手続きが優先して実行されます。

従来形式の宣言手続きが優先される例を，次に示します。

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE.

      ENVIRONMENT DIVISION.
      INPUT-OUTPUT SECTION.
      FILE-CONTROL.
      SELECT INFILE ASSIGN 'INPUT-FILE'.

      DATA DIVISION.
      FILE SECTION.
      FD INFILE.
      01 INREC    PIC X(10).
      WORKING-STORAGE SECTION.
      01 READDATA PIC X(10).

      PROCEDURE DIVISION.
      DECLARATIVES.
      EXCEPTION-HANDLE1 SECTION.
          USE AFTER STANDARD EXCEPTION PROCEDURE INFILE. *> 2.
          DISPLAY '従来形式USE実行'.
      EXCEPTION-HANDLE2 SECTION.
          USE AFTER EXCEPTION CONDITION EC-I-O. *> 3.
          DISPLAY '共通例外処理USE実行'.
      END DECLARATIVES.

      >>TURN EC-I-O CHECKING ON
        OPEN INPUT INFILE.

        READ INFILE INTO READDATA. *> 1.
        DISPLAY READDATA.

        CLOSE INFILE.

      END PROGRAM SAMPLE.

上記の例の場合，プログラム中のREAD文（1.）によって例外が引き起こされた場合，従来形式の宣言手続き（2.）が共通例外処理（3.）より優先して実行されます。

(3)　FILE STATUS句の指定と共通例外処理での異常終了

COBOL85では，入出力エラーが発生した場合にFILE STATUS句の指定があると実行を継続しますが，COBOL2002では，FILE STATUS句より共通例外処理が優先されます。そのため，入出力エラーが発生して共通例外処理が実行された場合，FILE STATUS句の指定があっても実行が継続されません。

FILE STATUS句の指定の有無と共通例外処理の関係を，次に示します。

発生した入出力エラーに対応するTURN指令の状態
入出力エラーに対応するUSE文
FILE STATUS句の有無
入出力エラー発生時の動作

ON
なし
○
実行時エラー※

×
実行時エラー※

新形式
○
新形式のUSE文を実行

×
新形式のUSE文を実行

従来形式
○
従来形式のUSE文を実行

×
従来形式のUSE文を実行

新形式
従来形式
○
従来形式のUSE文を実行

×
従来形式のUSE文を実行

OFF
なし
○
実行を継続

×
実行時エラー※

新形式
○
実行を継続

×
実行時エラー※

従来形式
○
従来形式のUSE文を実行

×
従来形式のUSE文を実行

新形式
従来形式
○
従来形式のUSE文を実行

×
従来形式のUSE文を実行

（凡例）

ON：入出力エラーに対応するTURN指令のチェックがON

OFF：入出力エラーに対応するTURN指令のチェックがOFF

なし：入出力エラーに対応するUSE文がない

新形式：入出力エラーに対応するCOBOL2002形式のUSE文がある

従来形式：入出力エラーに対応する従来のCOBOL形式のUSE文がある

○：FILE STATUS句が指定されている

×：FILE STATUS句が指定されていない

注※

発生した入出力エラーが非致命的な場合，実行時エラーとはならないで，実行が継続されます。

22.　データコミュニケーション機能（UNIX32，AIX(64)，Linux(x64)，Linux(IPF64)で有効）

データコミュニケーション機能は，さまざまな端末またはコンピュータシステムと，メッセージを受け渡しする機能です。この章では，データコミュニケーション機能の使用方法について説明します。

＜この章の構成＞

22.1　データコミュニケーション機能の概要

22.2　DCシミュレーション

22.3　データコミュニケーション機能を使用したCOBOLプログラムの例

22.1　データコミュニケーション機能の概要

データコミュニケーション機能は，オンラインコントロールプログラムを経由して，端末，ファイル，またはほかのプログラムとメッセージを受け渡しする機能です。このシステムでは，オンラインコントロールプログラムとして，OpenTP1（分散トランザクション処理機能）を使用できます。

データコミュニケーション機能の文法規則については，マニュアル「COBOL2002　言語　拡張仕様編　8. データコミュニケーション機能」を参照してください。

データコミュニケーション機能で使用する文

データコミュニケーション機能は，メインフレーム（VOS3）COBOL85のデータコミュニケーション機能と同じインタフェースのSEND文やRECEIVE文でメッセージの送受信などができます。

データコミュニケーション機能で用いる文とその機能を，次に示します。

表22-1　データコミュニケーション機能で用いる文

文 | 機能
RECEIVE | メッセージ受信
SEND | メッセージ送信
ENABLE | ファイル送信の開始
DISABLE | ファイル送信の終了
COMMIT | 同期点取得処理
ROLLBACK | 部分回復処理

なお，データコミュニケーション機能で使用する文の厳密な意味については，オンラインコントロールプログラム側で規定しています。

22.2　DCシミュレーション

テストデバッガを使用すると，OpenTP1が組み込まれていない環境であっても，COBOL2002で使用できる擬似OpenTP1用ライブラリをリンク時に指定すれば，DCシミュレーションができます。

DCシミュレーションの操作方法については，マニュアル「COBOL2002　使用の手引　操作編」のテストデバッガの説明を参照してください。

リンク方法

擬似OpenTP1用ライブラリを使用した場合の実行可能ファイル生成例を次に示します。

UNIX32，Linux(IPF64)，Linux(x64)の場合

       ccbl2002 -Main,System sample.cbl -lcbl2kdc

AIX(64)の場合

       ccbl2002 -Main,System sample.cbl -lcbl2kdc64

注意事項

DCシミュレーション機能を使用するプログラムから実行可能ファイルまたは共用ライブラリを作成する場合は，リンク時に-lcbl2kdcまたは-lcbl2kdc64オプションの指定が必要です。

擬似OpenTP1用ライブラリをリンクした実行可能ファイルで，DCシミュレーションをしない場合，擬似OpenTP1関数を実行中であることを通知するメッセージが表示されます。

OpenTP1では，標準入出力（stdin，stdout，stderr）のリダイレクションが行われる場合があるため，COBOL実行時メッセージ，およびACCEPT／DISPLAY文については，出力先に注意する必要があります。

22.3　データコミュニケーション機能を使用したCOBOLプログラムの例

データコミュニケーション機能を使用したCOBOLプログラムの例を，次に示します。

               :
      DATA DIVISION.
               :
      WORKING-STORAGE SECTION.
      01 データ名1 PIC X(100).
      01 データ名2 PIC X(100).
      01 データ名3 PIC X(100).
               :
      COMMUNICATION SECTION.
      CD 通信記述名1 FOR I-O
         STATUS KEY IS データ名4.
      CD 通信記述名2 FOR OUTPUT
         STATUS KEY IS データ名5
         SYMBOLIC TERMINAL IS データ名6
         MAP NAME IS データ名7.
               :
      PROCEDURE DIVISION.
               :
          RECEIVE 通信記述名1 MESSAGE INTO データ名1. *> メッセージ受信
               :
     *    業務処理
               :
          SEND    通信記述名2 FROM データ名2 *> 分岐メッセージ送信
                              WITH EMI.
               :
          SEND    通信記述名1 FROM データ名3 *> 応答メッセージ送信
                              WITH EMI.
               :
          IF （エラー発生か？） THEN
             ROLLBACK
          END-IF.
               :

23.　データベース操作機能（Linux(x86)，Linux(x64)で有効）

COBOL2002では，データベースインタフェース機能としてODBCインタフェース機能をサポートしています。ODBCインタフェース機能を使うことによって，SQL埋め込みCOBOLプログラムで，データベースにアクセスできます。この章では，ODBCインタフェース機能について説明します。

＜この章の構成＞

23.1　データベースアクセス機能

23.2　ODBCインタフェース機能の概要

23.1　データベースアクセス機能

この節では，データベースアクセス機能について説明します。

なお，データベースアクセス機能の文法規則については，マニュアル「COBOL2002　言語　拡張仕様編　9. データベースアクセス機能」を参照してください。

＜この節の構成＞

23.1.1　埋め込みSQL文を使ったCOBOLプログラムの作成

23.1.2　プログラムの例

23.1.1　埋め込みSQL文を使ったCOBOLプログラムの作成

埋め込みSQL文によるデータベースアクセスの方法は，SQLをCOBOLプログラム中に埋め込んで実行する方法（静的に行う方法）と，SQLを実行時に生成し，SQL文の埋め込み変数に設定して実行する方法（動的に行う方法）があります。

埋め込みSQL文のSELECT文は，表から1行分の値を取り出す文（SELECT文：単一行）です。複数行の値を取り出す場合は，カーソルを使用します。カーソルの使用には，静的に行う方法と動的に行う方法があります。また，ストアドプロシージャを呼び出して，一連の手続きを行う方法もあります。

＜この項の構成＞

(1)　COBOLプログラムで使用できるSQL文

(2)　埋め込みSQL宣言節

(3)　埋め込み例外宣言

(4)　カーソル宣言

(5)　識別子

(6)　トランザクション

(7)　SQL文の実行順序

(1)　COBOLプログラムで使用できるSQL文

COBOLプログラムで使用できる埋め込みSQL文を次に示します。

表23-1　COBOLプログラムで使用できる埋め込みSQL文

種類 | 分類 | SQL文 | 内容
宣言系 | 埋め込みSQL宣言節 | BEGIN DECLARE SECTION | 埋め込みSQL開始宣言
END DECLARE SECTION | 埋め込みSQL終了宣言
埋め込み例外宣言 | WHENEVER | 埋め込み例外宣言
カーソル | DECLARE CURSOR | カーソル宣言
制御系 | コネクション | CONNECT | コネクションを確立する
DISCONNECT | コネクションを解除する
SET CONNECTION | 現行コネクションを変更する
トランザクション | COMMIT | コミットでトランザクションを終了させる
ROLLBACK | ロールバックでトランザクションを終了させる
操作系 | 静的 | SELECT | 表の指定された行から値を取り出す
INSERT | 表に新しい行を作成する
DELETE | 表から行を削除する
UPDATE | 表の行を更新する
カーソル | OPEN | カーソルを開く
FETCH | カーソルを表の次の行に位置づけ，その行を取り出す
CLOSE | カーソルを閉じる
ストアドプロシージャ | CALL | ストアドプロシージャを呼び出す
動的 | EXECUTE IMMEDIATE | 動的SQLを準備し，実行する
PREPARE | 動的SQLを準備する
DEALLOCATE PREPARE | 準備した動的SQLを解放する
EXECUTE | 動的SQLを実行する

(2)　埋め込みSQL宣言節

埋め込みSQL開始宣言から埋め込みSQL終了宣言までを，埋め込みSQL宣言節といいます。埋め込みSQL宣言節は，データ部に定義します。

埋め込みSQL宣言節には，SQLCODE変数，埋め込み変数，および標識変数を定義します。

(3)　埋め込み例外宣言

埋め込み例外宣言は，宣言系以外のSQL文の実行後の例外処理を記述します。

(4)　カーソル宣言

カーソル宣言は，OPEN文などでカーソルを使用する場合に，手続き部に定義します。カーソル宣言に誤りがあると，そのカーソル名に対するOPEN文の実行がエラーになります。

(5)　識別子

カーソル名，表名，列名，プロシージャ名などを表す識別子は，データベースによっても規定されます。したがって，正常にコンパイルされたプログラムでも，SQL文の実行が失敗することがあります。このような場合は，DBMSのマニュアルなどを参照してください。また，-EquivRuleコンパイラオプションの指定がない場合，等価規則が適用されます。等価規則については，マニュアル「COBOL2002　言語　標準仕様編　4.1.2 COBOL文字集合」を参照してください。

使用するデータベースを意識しないで運用したい場合は，カーソル名を英字で始まる18文字以内の文字列で定義することを推奨します。

(6)　トランザクション

トランザクションは，コネクションを確立したとき，または明示的にコミットやロールバックしたときから開始され，明示的，または暗黙的にコミット，ロールバックしたときに終了されます。トランザクションは，コネクションごとに管理されます。

一つのデータベースに対して複数のプログラム（コネクション）からアクセスする場合，デッドロックが発生する可能性があります。デッドロックが発生する可能性を低くするために，プログラム作成時には次のことに注意してください。

同時にアクセスするすべてのプログラムのデータベースへのアクセス順序を同じにすると，デッドロックの発生する可能性は低くなります。例えば，データベースへの更新アクセスをストアドプロシージャで登録し，これを使用することでアクセス順序を規定できます。

応答処理を含むプログラムの場合，応答処理がトランザクション内に存在すると，応答時間分，ほかのトランザクションによるアクセスがブロックされることがあります。このようなトランザクション内での応答処理をしないようにプログラムを作成することで，ブロックする時間を最小にできます。

デッドロックは，主に，同じデータベースに対するアクセスで長時間動作する複数のトランザクションが同時に実行されている場合に起こります。トランザクションが長くなれば，排他ロックまたは更新ロックが長時間になり，ほかの処理をブロックしてしまうので，デッドロックが発生する可能性が高くなります。このことから，トランザクションを最小単位で行うことで，デッドロックが発生する可能性を低くできます。

(7)　SQL文の実行順序

SQL文は，次に示す順序で実行する必要があります。

図23-1　SQL文の実行順序

注※　動的SQL文を使用する場合については，次に示す順序を参照してください。

図23-2　動的SQL文の実行順序

23.1.2　プログラムの例

埋め込みSQL文を使って，データベースの表にアクセスする例を示します。表は，DBMSが提供するツールなどを使用して定義します。詳細は，使用するDBMSのSQLリファレンスなどを参照してください。

なお，ここに示すのは，HiRDBを使用した場合のアクセス方法の例です。

＜この項の構成＞

(1)　静的に行う方法によるプログラムの例

(2)　ストアドプロシージャの呼び出しの例

(3)　動的に行う方法によるプログラムの例

(4)　現行コネクションの変更の例

(1)　静的に行う方法によるプログラムの例

(a)　表の定義

氏名と住所にそれぞれ対応する，PERSONNAME列とPERSONADDRESS列を持つ「ADDRESSBOOK」という住所録の表を定義します。

          CREATE TABLE ADDRESSBOOK ( PERSONNAME char(20),
                                PERSONADDRESS varchar(255))

(b)　表へのアクセス

「ADDRESSBOOK」の表にアクセスします。

すでに表へ登録されている人の場合，住所を更新します。また，登録されていない人の場合，住所と氏名を新規に登録します。

     * <埋め込みSQL宣言節>
          EXEC SQL BEGIN DECLARE SECTION END-EXEC.
          01 ODBC-DSN PIC X(10) VALUE 'SAMPLE'.
          01 ODBC-UID PIC X(10) VALUE 'USER1'.
          01 ODBC-PWD PIC X(10) VALUE 'USER1'.
          01 行数     PIC S9(9) USAGE COMP VALUE ZERO.
          01 ADDRESSBOOK.
           02 PERSONNAME    PIC  X(20).
           02 PERSONADDRESS.
            03 ODBC-length PIC S9(9) USAGE COMP.
            03 ODBC-char   PIC  X(255).
          EXEC SQL END DECLARE SECTION END-EXEC.
         :
      PROCEDURE DIVISION.
         :
     * <埋め込み例外宣言>
          EXEC SQL WHENEVER SQLERROR STOP END-EXEC.
     * <コネクションの確立>
          EXEC SQL
            CONNECT  :ODBC-UID  IDENTIFIED BY :ODBC-PWD
            USING    :ODBC-DSN
          END-EXEC.
     * <埋め込み例外宣言>
          EXEC SQL WHENEVER SQLERROR
                   GO TO :ROLLBACK-PROC END-EXEC.
          EXEC SQL WHENEVER NOT FOUND
                   PERFORM :NOTFOUND-PROC END-EXEC.
     * <登録されているかを参照する>
          MOVE '日立 太郎' TO PERSONNAME.
          MOVE '福岡市博多区１丁目' TO ODBC-char OF PERSONADDRESS.
          MOVE 27 TO ODBC-length OF PERSONADDRESS.
          EXEC SQL
            SELECT COUNT(*) INTO :行数 FROM ADDRESSBOOK
            WHERE PERSONNAME = :PERSONNAME
          END-EXEC.
     * <住所録の表に登録する>
          IF 行数 = 0 THEN
            EXEC SQL
              INSERT INTO ADDRESSBOOK ( PERSONNAME, PERSONADDRESS)
              VALUES ( :PERSONNAME, :PERSONADDRESS)
            END-EXEC
     * <住所録の表の住所を更新する>
          ELSE
            EXEC SQL
              UPDATE ADDRESSBOOK SET PERSONADDRESS = :PERSONADDRESS
                            WHERE PERSONNAME = :PERSONNAME
            END-EXEC
          END-IF.
          EXEC SQL WHENEVER SQLERROR CONTINUE END-EXEC.
          EXEC SQL WHENEVER NOT FOUND CONTINUE END-EXEC.
          EXEC SQL
            COMMIT WORK
          END-EXEC.
          GO TO DISCONNECT-PROC.
      ROLLBACK-PROC.
          EXEC SQL
            ROLLBACK WORK
          END-EXEC.
      DISCONNECT-PROC.
          EXEC SQL
            DISCONNECT
          END-EXEC.
          :
          STOP RUN.
      NOTFOUND-PROC SECTION.
          :
      NOTFOUND-PROC-END.
          EXIT.
          :

(2)　ストアドプロシージャの呼び出しの例

(a)　ストアドプロシージャの定義

「(1)　静的に行う方法によるプログラムの例」に示した「ADDRESSBOOK」の表にアクセスします。

すでに表へ登録されている人の場合，住所を更新し，表に未登録の人の場合，住所と氏名を登録するようなストアドプロシージャを定義します。

          CREATE PROCEDURE
            ADDRESSUPDATE (IN @PERSONNAME char(20)
                          , IN @PERSONADDRESS varchar(255) )
          BEGIN
            DECLARE REC_CNT INTEGER;
            SELECT COUNT(*) INTO REC_CNT FROM ADDRESSBOOK
              WHERE PERSONNAME = @PERSONNAME;
            IF 0 = REC_CNT THEN
              INSERT INTO ADDRESSBOOK ( PERSONNAME,PERSONADDRESS )
                VALUES ( @PERSONNAME,@PERSONADDRESS );
            ELSE
              UPDATE ADDRESSBOOK SET PERSONADDRESS = @PERSONADDRESS
                WHERE PERSONNAME = @PERSONNAME;
            END IF;
          END

(b)　ストアドプロシージャの呼び出し

定義したストアドプロシージャを呼び出します。

     * <埋め込みSQL宣言節>
          EXEC SQL BEGIN DECLARE SECTION END-EXEC.
          :
          01 ADDRESSUPDATE.
            02 PERSONNAME PIC X(20).
            02 PERSONADDRESS.
              03 ODBC-length PIC S9(9) USAGE COMP.
              03 ODBC-char   PIC X(255).
          EXEC SQL END DECLARE SECTION END-EXEC.
          :

      PROCEDURE DIVISION.
          :
     * <住所録の表の住所を更新する>
          MOVE '日立 太郎' TO PERSONNAME.
          MOVE '福岡市博多区２丁目' TO ODBC-char OF PERSONADDRESS.
          MOVE 27 TO ODBC-length OF PERSONADDRESS.
          EXEC SQL
            CALL ADDRESSUPDATE ( :PERSONNAME, :PERSONADDRESS )
          END-EXEC.
          :

(3)　動的に行う方法によるプログラムの例

(a)　表の定義

氏名と住所にそれぞれ対応する，PERSONNAME列とPERSONADDRESS列を持つ「ADDRESSBOOK」という住所録の表を定義します。

          CREATE TABLE ADDRESSBOOK ( PERSONNAME char(20),
                                PERSONADDRESS varchar(255))

(b)　表へのアクセス

「ADDRESSBOOK」の表にアクセスします。

住所録の表に住所，氏名を登録し，住所録一覧を取得します。

     * <埋め込みSQL宣言節>
          EXEC SQL BEGIN DECLARE SECTION END-EXEC.
         :
          01 動的SQL PIC X(80).
          01 ADDRESSBOOK.
            02 PERSONNAME PIC X(20).
            02 PERSONADDRESS.
              03 ODBC-length PIC S9(9) USAGE COMP.
              03 ODBC-char   PIC X(255).
          EXEC SQL END DECLARE SECTION END-EXEC.
         :
      PROCEDURE DIVISION.
         :
     * <埋め込み例外宣言>
          EXEC SQL WHENEVER SQLERROR
            GO TO :ROLLBACK-PROC END-EXEC.
          EXEC SQL WHENEVER NOT FOUND
            PERFORM :NOTFOUND-PROC END-EXEC.
     * <住所録の表に登録する>
          MOVE 'INSERT INTO ADDRESSBOOK (PERSONNAME, PERSONADDRESS)
     -         'VALUES (?,?)' TO 動的SQL.
          EXEC SQL
            PREPARE DYNSQL1 FROM :動的SQL
          END-EXEC.
          MOVE '日立 太郎' TO PERSONNAME.
          MOVE '福岡市博多区３丁目' TO ODBC-char OF PERSONADDRESS.
          MOVE 27 TO ODBC-length OF PERSONADDRESS.
          EXEC SQL
            EXECUTE DYNSQL1 USING :PERSONNAME, :PERSONADDRESS
          END-EXEC.
          EXEC SQL
            DEALLOCATE PREPARE DYNSQL1
          END-EXEC.
          EXEC SQL
            COMMIT WORK
          END-EXEC.
     * <住所録の表を一覧表示する>
          MOVE 'SELECT PERSONNAME, PERSONADDRESS FROM ADDRESSBOOK'
            TO 動的SQL.
          EXEC SQL
            PREPARE DYNSQL1 FROM :動的SQL
          END-EXEC.      
          EXEC SQL
            DECLARE CRS00 CURSOR
              FOR DYNSQL1
          END-EXEC.
          EXEC SQL
            OPEN CRS00
          END-EXEC.
          EXEC SQL
              FETCH CRS00 INTO :PERSONNAME, :PERSONADDRESS
          END-EXEC.
          ：
          EXEC SQL
            CLOSE CRS00
          END-EXEC.
          EXEC SQL
            DEALLOCATE PREPARE DYNSQL1
          END-EXEC.
          :

(4)　現行コネクションの変更の例

testdb1の接続先データベースの「ADDRESSBOOK」の表にアクセスし，取得した住所データでtestdb2の接続先データベースの「RECIPIENTS」の表の住所を更新します。

      :
     * <CONNDB1コネクションの確立>
          MOVE 'testdb1' TO ODBC-DSN.
          EXEC SQL
           CONNECT :ODBC-UID IDENTIFIED BY :ODBC-PWD …1.
             USING :ODBC-DSN AS CONNDB1
          END-EXEC.
     * <住所を取得する>
          MOVE '日立 太郎' TO PERSONNAME.
          EXEC SQL
           SELECT PERSONADDRESS INTO :PERSONADDRESS FROM ADDRESSBOOK
                       WHERE PERSONNAME = :PERSONNAME
          END-EXEC.
           :
     * <CONNDB2コネクションの確立>
          MOVE 'testdb2' TO ODBC-DSN.
          EXEC SQL
           CONNECT :ODBC-UID IDENTIFIED BY :ODBC-PWD …2.
             USING :ODBC-DSN AS CONNDB2
          END-EXEC.
     * <取得した住所で更新する>
         MOVE '日立 太郎' TO PERSONNAME.
          EXEC SQL
            UPDATE RECIPIENTS SET PERSONADDRESS = :PERSONADDRESS
              WHERE PERSONNAME = :PERSONNAME
          END-EXEC.
           :
     * <現行コネクション(CONNDB2)を解除>
          EXEC SQL
           DISCONNECT CURRENT …3.
          END-EXEC.
     * <現行コネクションを変更する>
          EXEC SQL
           SET CONNECTION CONNDB1  …4.
          END-EXEC.
           :

例の説明

testdb1への接続を確立。
CONNDB1が現行コネクションとなる。

testdb2への接続を確立。
CONNDB2が現行コネクションとなる。

現行コネクションCONNDB2を解除。
現行コネクションは不定となる。

現行コネクションをCONNDB1に変更。
CONNDB1が現行コネクションとなる。

23.2　ODBCインタフェース機能の概要

ODBCインタフェース機能は，COBOLプログラムからデータベースアクセス用標準言語の構造化照会言語（SQL）を使って，データベース管理システム（DBMS）上のデータにアクセスする機能です。

COBOLプログラムに記述されたSQL文は，ODBC APIを使ってODBCドライバマネージャに渡され，さらに適切なODBCドライバへ渡されます。ODBCドライバは，渡されたSQL文を使ってデータベースにアクセスします。SQL埋め込みCOBOLアプリケーションがデータベースにアクセスする流れを，次に示します。

図23-3　ODBCインタフェース機能の概要

注

Linux上で動作するODBCドライバマネージャ（unixODBC）を別途インストールしてください。インストール方法およびデータソースの登録方法の詳細は，使用するデータベースのマニュアルなどを参照してください。

＜この節の構成＞

23.2.1　ODBCインタフェース機能が動作する環境

23.2.2　コンパイル

23.2.3　SQL文のエラー処理

23.2.4　埋め込み変数

23.2.5　トランザクション

23.2.6　コネクション

23.2.7　タイムアウト秒数の設定

23.2.8　カーソルオプションの設定

23.2.9　データベース固有の注意事項

23.2.10　動的SQLのODBC API関数発行の変更

23.2.1　ODBCインタフェース機能が動作する環境

＜この項の構成＞

(1)　動作に必要な環境

(2)　ODBCの合致レベル

(1)　動作に必要な環境

ODBCインタフェース機能を使用するには，次のような環境が必要です。

アクセスするデータが存在するDBMS

使用するDBMSがサーバ／クライアント形態の場合は，サーバへアクセスできるクライアント環境

使用するDBMSへアクセスできるODBCドライバ

ODBC2.0以降のODBCドライバマネージャ

(2)　ODBCの合致レベル

使用するODBCドライバが次のようなODBCの合致レベルを満たしていないと，SQL埋め込みCOBOLプログラムの実行時に，機能が制限されます。

(a)　APIの合致レベル

ODBCドライバは，コアおよびレベル1のすべての関数と，次のレベル2の関数をサポートしている必要があります。

SQLDescribeParam（PREPARE文を使用する場合）

SQLNumParams（PREPARE文を使用する場合）

SQLExtendedFetch（FETCH文を使用する場合）

SQLMoreResult（FETCH（動的）文を使用する場合）

SQLProcedureColumns（CALL文を使用する場合）

(b)　SQLの合致レベル

ODBCドライバは，そのドライバがサポートする拡張SQL文法がCOBOL2002が対応している埋め込みSQLの文法をサポートしている必要があります。COBOL2002が対応している埋め込みSQLについては，マニュアル「COBOL2002　言語　拡張仕様編　9. データベースアクセス機能」を参照してください。

23.2.2　コンパイル

SQL文を埋め込んだCOBOLプログラムをコンパイルするときは，コンパイル時に-SQL,ODBCオプションを指定します。

実行可能ファイルまたは共用ライブラリを作成する場合，リンク時にODBCドライバマネージャのライブラリが必要です。ODBCドライバマネージャのライブラリ指定については，unixODBCに関するリファレンスなどを参照してください。

23.2.3　SQL文のエラー処理

＜この項の構成＞

(1)　SQL文の実行の確認

(2)　SQL文でエラーが発生した場合の対処方法

(3)　SQLCODE変数

(4)　SQL文実行時のエラーメッセージ出力抑止

(1)　SQL文の実行の確認

SQL文が正常に実行されたかどうかを確認するには，次の二つの方法があります。

埋め込み例外宣言を記述する
埋め込み例外宣言については，「23.1.1　埋め込みSQL文を使ったCOBOLプログラムの作成」の「(3)　埋め込み例外宣言」を参照してください。

SQLCODE変数の値を参照する
SQLCODE変数については，「(3)　SQLCODE変数」を参照してください。

(2)　SQL文でエラーが発生した場合の対処方法

エラーが発生した場合，SQL文の実行によって出力された実行時メッセージを参照して，対処してください。出力される実行時メッセージのうち，次の項目はODBCドライバ，またはデータソースから返される値です。

SQLSTATE
ODBCドライバから返される，ODBCインタフェースで規定された値です。詳細は，ODBCのプログラミングに関するマニュアルを参照してください。

SQLエラーコード
データソースが固有に持つエラーコードです。詳細は，ODBCドライバ，またはDBMSのマニュアルなどを参照してください。

ODBCメッセージ
ドライバマネージャ，またはデータソースから返されるメッセージです。※

注※

実行時メッセージは，環境変数LANGの設定値に従った文字コードで出力します。このため，ODBCメッセージは，データソースまたはデータベースの設定で，環境変数LANGの設定値に従った文字コードまたは英文で返されるように設定してください。英文メッセージにする方法などは，ODBCドライバ提供元のマニュアルなどを参照してください。

(3)　SQLCODE変数

SQLCODE変数を定義しておき，その値を参照することで，制御系，および操作系のSQL文が正しく実行されたか確認できます。

SQLCODE変数の値とその意味を次に示します。

表23-2　SQLCODE変数の値と意味

SQLCODE変数の値
意味

0
正常に終了した。

100
該当行が存在しない。

100以外の正の数
（＞0 and ≠100）

SQLCODE変数の値が1で，警告メッセージが出力されていない場合
外部10進項目にデータを設定中に整数部，または小数部のけたあふれが発生した。

1.以外の場合
警告メッセージを出力した。

負の数（＜0）
実行は失敗し，エラーメッセージを出力した。

次の環境変数を指定するとSQLCODE変数に設定される値が変更されます。

(a)　実行時環境変数CBLSQLROWCOUNT

形式

CBLSQLROWCOUNT=YES

規則

この環境変数にYESを指定した場合，埋め込みSQL文のDELETE文，INSERT文，またはUPDATE文を実行して，影響を受けた行数が0行の場合にSQLCODE変数に100が設定されます。

WHENEVER（埋め込み例外宣言）文のNOT FOUND指定の有効範囲内で実行される埋め込みSQL文（DELETE文，INSERT文，またはUPDATE文）に対して，SQLCODE変数に100が設定されることで，NOT FOUND条件が実行されます。

この環境変数を指定しなかったとき，またはYES以外の値を指定したときは，埋め込みSQL文のDELETE文，またはUPDATE文の実行で，削除／更新行が0行の場合，SQLCODE変数に0が設定されます。ただし，INSERT文に関しては，注意事項を参照してください。

この環境変数を指定した場合，影響を受けた行数を取得するために，ODBCドライバがサポートするSQLRowCount関数が内部的に発行されるようになります。

注意事項

問い合わせ指定を記述したINSERT文の実行時，問い合わせ指定によって導出される表が空の場合（挿入行数が0行）は，この環境変数の指定がない場合でもSQLCODE変数に100が設定されます。

(4)　SQL文実行時のエラーメッセージ出力抑止

埋め込みSQL文実行時に出力される実行時メッセージの出力を抑止したい場合は，次の環境変数を指定します。

次の環境変数を指定すると埋め込みSQL文実行時に実行時メッセージが出力されなくなるので，CBLSQLERRORサービスルーチンを使用して，エラー情報はすべて取得することを推奨します。

(a)　実行時環境変数CBLSQLWMSG

形式

CBLSQLWMSG=YES

規則

設定値が形式に従ってない場合，この環境変数の指定は無効となります。

埋め込みSQL文実行時に出力される警告メッセージの出力を抑止したいときにYESを指定します。

この環境変数を指定しても，SQLCODE値，およびWHENEVER（埋め込み例外宣言）文の動作は変わりません。

(b)　実行時環境変数CBLSQLSUPPRESSMSG

形式

CBLSQLSUPPRESSMSG=8002

規則

設定値が形式に従ってない場合，この環境変数の指定は無効となります。設定値には，8002だけを指定できます。

ODBCインタフェースを使ってデータベースにアクセスする場合，KCCC8002R-Sメッセージの出力を抑止したいときに8002を指定します。

この環境変数を指定しても，SQLCODE値，およびWHENEVER（埋め込み例外宣言）文の動作は変わりません。

23.2.4　埋め込み変数

SQL文中で指定する埋め込み変数は，対応する列，または式で有効なODBC SQLデータ型と対応づけられたCOBOLデータ定義で，定義する必要があります。

ODBC SQLデータ型とCOBOLのデータ記述の対応を次に示します。

表23-3　ODBC SQLデータ型に対応したCOBOLのデータ記述

ODBC SQLデータ型
埋め込み変数の型
データ記述

CHAR(n)
文字列型
固定長形式

Ln データ名     PIC X(n).

VARCHAR(n)
文字列型
可変長形式

L1 データ名.
L2 ODBC-length PIC S9(9) USAGE COMP.
L2 ODBC-char   PIC  X(n).

LONG VARCHAR
文字列型
可変長形式

L1 データ名.
L2 ODBC-length PIC S9(9) USAGE COMP.
L2 ODBC-char   PIC  X(max).

DECIMAL(p,s)
数値型

Ln データ名     PIC S9(p-s)V9(s)
               SIGN IS LEADING
               SEPARATE CHARACTER.

NUMERIC(p,s)
数値型

Ln データ名     PIC S9(p-s)V9(s)
               SIGN IS LEADING
               SEPARATE CHARACTER.

SMALLINT
整数型符号付き2バイト2進項目
または，整数型符号なし2バイト2進項目

Ln データ名    PIC S9(4) USAGE COMP.

Ln データ名    PIC  9(4) USAGE COMP.

INTEGER
整数型符号付き4バイト2進項目
または，整数型符号なし4バイト2進項目

Ln データ名    PIC S9(9) USAGE COMP.

Ln データ名    PIC  9(9) USAGE COMP.

REAL
内部浮動小数点型単精度形式

Ln データ名    USAGE COMPUTATIONAL-1.

FLOAT
内部浮動小数点型倍精度形式

Ln データ名    USAGE COMPUTATIONAL-2.

DOUBLE PRECISION
内部浮動小数点型倍精度形式

Ln データ名    USAGE COMPUTATIONAL-2.

BIT
ビット列型

L1 データ名.
L2 FILLER     PIC  1(7) USAGE BIT.
L2 ODBC-bit   PIC  1(1) USAGE BIT.

TINYINT
整数型符号付き1バイト2進形式
または整数型符号なし1バイト2進形式

Ln データ名    PIC  X(1).

Ln データ名    PIC S9(2) USAGE COMP.※

Ln データ名    PIC  9(2) USAGE COMP.※

BIGINT
整数型符号付き8バイト2進形式または整数型符号なし8バイト2進形式

Ln データ名    PIC  X(20).

BINARY(n)
バイナリデータ型固定長形式

Ln データ名    PIC  X(n).

VARBINARY(n)
バイナリデータ型可変長形式

L1 データ名.
L2 ODBC-length PIC S9(9) USAGE COMP.
L2 ODBC-binary PIC  X(n).

LONG VARBINARY
バイナリデータ型可変長形式

L1 データ名.
L2 ODBC-length PIC S9(9) USAGE COMP.
L2 ODBC-binary PIC  X(max).

DATE
日時型日付形式

L1 データ名.
L2 ODBC-year   PIC S9(4) USAGE COMP.
L2 ODBC-month  PIC  9(4) USAGE COMP.
L2 ODBC-day    PIC  9(4) USAGE COMP.

TIME
日時型時刻形式

L1 データ名.
L2 ODBC-hour   PIC  9(4) USAGE COMP.
L2 ODBC-minute PIC  9(4) USAGE COMP.
L2 ODBC-second PIC  9(4) USAGE COMP.

TIMESTAMP
日時型日付／時刻形式

L1 データ名.
L2 ODBC-year   PIC S9(4) USAGE COMP.
L2 ODBC-month  PIC  9(4) USAGE COMP.
L2 ODBC-day    PIC  9(4) USAGE COMP.
L2 ODBC-hour   PIC  9(4) USAGE COMP.
L2 ODBC-minute PIC  9(4) USAGE COMP.
L2 ODBC-second PIC  9(4) USAGE COMP.
L2 ODBC-fraction PIC 9(9) USAGE COMP.

（凡例）

Ln：レベル番号01～49，または77

L1：レベル番号01～48

L2：レベル番号02～49（ただし，L1＜L2）

max：最大データ長

ODBC-xxx：任意のデータ名

データ名：SQL文中で指定する埋め込み変数名

注

上表以外のSQLデータ型には対応していません。

注※

1バイト2進項目は，COMP-X項目で定義するか，コンパイル時に-Bin1Byteオプションを指定する必要があります。1バイト2進項目の詳細については，マニュアル「COBOL2002　言語　拡張仕様編　26.5.1 1バイト2進機能」を参照してください。

23.2.5　トランザクション

＜この項の構成＞

(1)　トランザクション分離レベル

(1)　トランザクション分離レベル

あるデータベース上のデータに対して複数のユーザから同時にアクセスする場合，トランザクションはそれぞれの接続ごとにドライバによって管理され，ドライバのトランザクション分離レベルに従って，トランザクションが処理されます。

トランザクション分離レベルは，ドライバ，またはデータソースのデフォルトに従います。詳細は，ODBCドライバ提供元のマニュアルなどを参照してください。

23.2.6　コネクション

コネクションは，CONNECT文によって接続を確立します。CONNECT文で指定する接続先データベース名は，データソース名を指定します。

データソースはODBCドライバマネージャ経由でアクセスできるように登録されていなければなりません。データソース名を省略したときは，デフォルトデータソース（default）を仮定します。

CONNECT文で指定する接続文字列については，ODBCドライバ提供元のマニュアルなどを参照してください。

（例）

次のCONNECT文は，同じデータソースに対しての接続を要求します。

データソース名を使用する方法

      MOVE 'USER1' TO ODBC-UID.
      MOVE 'USER1' TO ODBC-PWD.
      MOVE 'SAMPLE' TO ODBC-DSN.
      EXEC SQL
        CONNECT :ODBC-UID
          IDENTIFIED BY :ODBC-PWD
          USING :ODBC-DSN
      END-EXEC.

接続文字列を使用する方法

      MOVE 'DSN=SAMPLE;UID=USER1;PWD=USER1;'
        TO ODBC-CONN.
      EXEC SQL
        CONNECT TO :ODBC-CONN
      END-EXEC.

23.2.7　タイムアウト秒数の設定

ODBCインタフェースを使って埋め込みSQL文実行時に，実行時環境変数に指定したタイムアウト秒数でODBCオプションを設定できます。この機能を使用しない場合，タイムアウト秒数は設定しません。

＜この項の構成＞

(1)　CONNECT文でのタイムアウト秒数の設定

(2)　埋め込みSQL文（操作系）でのタイムアウト秒数の設定

(1)　CONNECT文でのタイムアウト秒数の設定

形式

CBLSQLLOGINTIMEOUT=タイムアウト秒数

タイムアウト秒数には，0～2,147,483,647の符号なし整数を指定します。ただし，タイムアウトの最大値は，使用するODBCドライバによって規定されます。

なお，タイムアウト秒数に0を指定した場合，タイムアウトは発生しないので，永久に待ち状態となります。

規則

設定値が形式に従ってない場合，この環境変数の指定は無効となります。

ODBCインタフェースを使って埋め込みSQL文（CONNECT）実行時に，環境変数に設定されたタイムアウト秒数を，SQLSetConnectOption関数でSQL_LOGIN_TIMEOUTオプションに設定します。

(2)　埋め込みSQL文（操作系）でのタイムアウト秒数の設定

形式

CBLSQLQUERYTIMEOUT=タイムアウト秒数

タイムアウト秒数には，0～2,147,483,647の符号なし整数を指定します。ただし，タイムアウトの最大値は，使用するODBCドライバによって規定されます。

なお，タイムアウト秒数に0を指定した場合は，タイムアウトは発生しないので，永久に待ち状態となります。

規則

設定値が形式に従ってない場合，この環境変数の指定は無効となります。

ODBCインタフェースを使って埋め込みSQL文（操作系）実行時に，環境変数で設定されたタイムアウト秒数を，SQLSetStmtOption関数でSQL_QUERY_TIMEOUTオプションに設定します。

23.2.8　カーソルオプションの設定

ODBCインタフェース機能では，ODBCカーソルライブラリの静的カーソルを使用するように次のODBCのオプションを設定してSQLのカーソル処理を実現しています。

表23-4　ODBCのオプションに対応するSQLのカーソル処理

オプション名 | 設定値 | 機能
接続オプション | SQLSetConnectOption（hdbc,SQL_ODBC_CURSORS,SQL_CUR_USE_ODBC）； | ドライバマネージャは，ドライバのスクロール機能を使用します。
ステートメントオプション | SQLSetStmtOption（hstmt,SQL_CONCURRENCY,SQL_CONCUR_VALUES）； | カーソルは最適化同時実行制御を使用して値を比較します。
SQLSetStmtOption（hstmt,SQL_CURSOR_TYPE,SQL_SCROLL_STATIC）； | 結果セットのデータは静的なデータとなります。

ODBCドライバによって，ODBCカーソルライブラリの使用をサポートしていないことがあります。使用するODBCドライバが，これらの接続オプションおよびステートメントオプションをサポートしているかどうかを確認してください。

ODBCカーソルライブラリを使用しない場合は，実行時環境変数CBLSQLCURUSEを指定してください。

＜この項の構成＞

(1)　実行時環境変数CBLSQLCURUSE

(2)　注意事項

(1)　実行時環境変数CBLSQLCURUSE

形式

CBLSQLCURUSE=DYNAMIC

規則

DYNAMIC

ODBCドライバのスクロール機能の動的カーソルを使用するように設定します。この実行時環境変数の指定がない場合は，ODBCカーソルライブラリの静的カーソルを使用するようにODBCオプションを設定します。DYNAMIC以外の値を指定した場合の結果は，保証しません。

DYNAMICを指定した場合，次の太字のオプションがデフォルトから変更されます。

表23-5　DYNAMICを指定した場合の設定値と機能

オプション名 | 設定値 | 機能
接続オプション | SQLSetConnectOption（hdbc,SQL_ODBC_CURSORS,SQL_CUR_USE_DRIVER）; | ドライバマネージャは，ドライバのスクロール機能を使用します。
ステートメントオプション | SQLSetStmtOption（hstmt,SQL_CONCURRENCY,SQL_CONCUR_VALUES）； | カーソルは最適化同時実行制御を使用して値を比較します。
SQLSetStmtOption（hstmt,SQL_CURSOR_TYPE,SQL_SCROLL_DYNAMIC）； | ドライバは行セットの行に対するキーだけを保存して使用します。

(2)　注意事項

この環境変数の指定で設定する接続オプションまたはステートメントオプションをODBCドライバがサポートしていない場合，動作は保証しません。なお，使用するODBCドライバによって，暗黙的にオプションが変更されることがあります。使用するODBCドライバが，この環境変数の指定で設定する接続オプションおよびステートメントオプションをサポートしているかどうかは，ODBCドライバ提供元のマニュアルなどを参照してください。

23.2.9　データベース固有の注意事項

HiRDBのデータベースに接続する場合，COBOLプログラム実行中に環境変数PDDDLDEAPRPEXEを設定した環境で定義系トランザクションを実行しないでください。環境変数PDDDLDEAPRPEXEを設定した環境で定義系トランザクションを実行すると，先行トランザクションの前処理が無効となるため，COBOLの管理情報との不整合が発生し，予期しない実行時エラーが発生するおそれがあります。

環境変数PDDDLDEAPRPEXEの詳細は，「HiRDBのUAP開発ガイドマニュアル」を参照してください。

動的SQLで定義系のクエリを指定して実行しているトランザクションと，動的SQLで操作系のクエリ，または静的に行う方法やカーソル，ストアドプロシージャ呼び出しの埋め込みSQL文を実行しているトランザクションは，別々のトランザクションとしてください。一つのトランザクション内で混在させた場合の動作は保証しません。

表を参照，または更新している場合※に，その表の定義を定義系のクエリやほかのプログラムやツールなどを使用して変更したときの動作は保証しません。参照，または更新している表の定義を変更した場合，記述された埋め込みSQL文との不整合が発生し，予期しない実行時エラーが発生することがあります。

注※

表を参照，更新しているときとは，次の期間です。

埋め込みSQL文を実行し，COMMIT文またはROLLBACK文でトランザクションを終了するまでの間

PREPARE文で準備したSQL文を明示的にDEALLOCATE PREPARE文で解放するまでの間

埋め込みSQL文内では，変数名以外の表名や列名などは必ずASCII文字の範囲で定義してください。検索条件などで多バイト文字を含む定数と比較したいときは，定数を埋め込み変数に転記したあと，その埋め込み変数を使って比較してください。

23.2.10　動的SQLのODBC API関数発行の変更

ODBCインタフェース機能の動的SQLで内部的に発行するODBC APIを変更したい場合に，実行時環境変数CBLSQLDYNAMICを指定します。

実行時環境変数CBLSQLDYNAMICを指定すると，実行性能が改善することがあります。

形式

CBLSQLDYNAMIC=REUSEBINDINFO

規則

設定値が形式に従ってない場合，この環境変数の指定は無効です。

環境変数CBLSQLDYNAMICにREUSEBINDINFOを指定すると，埋め込みSQL文で内部的に発行するODBC APIを次のとおりに変更し，1回目の埋め込みSQL文実行時に取得した情報で2回目以降も実行します。

・次の埋め込みSQL文を連続で実行した場合

2回目以降の実行では，1回目に取得した情報をバインド処理で再利用します。※1

EXECUTE文

動的SQLをカーソルで実行する場合のOPEN文

動的SQLをカーソルで実行する場合のOPEN文に対する最初のFETCH文

・PREPARE文で準備した動的SQLが，INSERT文，DELETE文，またはUPDATE文の場合

埋め込みSQL文のEXECUTE文を連続で実行したときに，2回目以降の実行では1回目に取得したODBCハンドル情報を再利用します。※2

注※1

2回目以降の埋め込みSQL文の実行で，内部的にSQLDescribeParam，SQLDescribeCol，SQLNumResultColsを呼び出さない（パラメタ，列情報を取得しない）ようにすることで，1回目の埋め込みSQL文の実行で取得したパラメタ，列情報を再利用します。

注※2

埋め込みSQL文のEXECUTE文の実行で，内部的にSQLFreeStmtをSQL_CLOSEパラメタ指定で呼び出さない（ODBCハンドル情報をクローズしない）ようにすることで，1回目の埋め込みSQL文のEXECUTE文の実行で取得したODBCハンドル情報を再利用します。

24.　XDMによるデータベース操作シミュレーション機能

この章では，XDMによるデータベース操作シミュレーション機能について説明します。

＜この章の構成＞

24.1　データベース操作シミュレーションの概要

24.2　構造型データベース（XDM/SD）操作シミュレーション

24.3　リレーショナルデータベース（XDM/RD）操作シミュレーション

24.1　データベース操作シミュレーションの概要

データベース操作シミュレーション機能とは，メインフレーム（VOS3）COBOL85の環境で作成したXDMによるデータベース操作を行うプログラムを，UNIX COBOL2002上でシミュレーションする機能です。

データベース操作シミュレーション機能には次の二つの機能があります。

構造型データベース操作シミュレーション機能
メインフレームで構造型データベースXDM/SD（Extensible Data Manager／Structured Database）を操作するプログラムを，UNIX上でコンパイルし，実行する機能です。
詳細は，「24.2　構造型データベース（XDM/SD）操作シミュレーション」を参照してください。

リレーショナルデータベース操作シミュレーション機能
メインフレームでリレーショナルデータベースXDM/RD（Extensible Data Manager／Relational Database）を操作するプログラムを，SQL文を覚え書きとしてコンパイルし，テストデバッガのTDコマンド（ASSIGN DATAコマンドなど）を使用してテストする機能です。
詳細は，「24.3　リレーショナルデータベース（XDM/RD）操作シミュレーション」を参照してください。

これらのシミュレーション機能の使い方について説明します。

なお，データベース操作シミュレーション機能の文法規則については，マニュアル「COBOL2002　言語　拡張仕様編　19. データベース操作シミュレーション機能」を参照してください。

24.2　構造型データベース（XDM/SD）操作シミュレーション

メインフレームで構造型データベースXDM/SD（Extensible Data Manager／Structured Database）を操作するプログラムをUNIX上でコンパイル，実行できます。このプログラムのコンパイル，実行，テストの方法について説明します。

＜この節の構成＞

(1)　コンパイル方法

(2)　実行方法

(3)　内部的に展開されるCALL文の引数

(4)　XDM/SDプログラムのテスト方法の制限事項

(1)　コンパイル方法

プログラムのコンパイルまでの手順を次に示します。

データベース情報をCOBOL宣言文に展開する。
メインフレーム上でXDMのユティリティを使用し，データベース情報であるスキーマ情報，サブスキーマ情報をCOBOL宣言文に展開します。このとき，COBOL宣言文（COPY文で展開される原文）は，XDM E2系ユティリティJXBSAIDを使用して作成します。

（COBOL宣言文の展開例）

COBOL宣言文をUNIXに転送する。
作成したCOBOL宣言文を，ファイル転送プログラムを使用してUNIXに転送します。このとき，UNIX上で受け取るファイル名は"サブスキーマ名スキーマ名.cbl"（上記の例では，HSB1HSC1.cbl）とする必要があります。

プログラムをコンパイルする。
UNIXに転送されたCOBOL宣言文（COPY展開される原文）は，コンパイル時のSUBSCHEMA SECTION解析中にCOPY文と同様に展開されます。このため，COBOL宣言文の入ったファイルは，登録集原文が展開できるディレクトリ下に置く必要があります。

(2)　実行方法

手続き部に記述したFIND文，FETCH文などのデータベース操作文は，"CALL 'CBLXDMSD' USING 引数 ……"と内部的に展開されます。展開されたCALL文で呼び出されるプログラムでシミュレーションをする場合は，'CBLXDMSD'という名称の関数を作成し，コンパイル，リンクして実行可能ファイルを生成しておきます。この結果，手続き部のデータベース操作文は，'CBLXDMSD'で作成した関数を呼び出せます。

なお，'CBLXDMSD'という名称の関数を，コンパイル，リンクして実行可能ファイルを生成しないときは，コンパイラが提供する，構造型データベース（XDM/SD）操作シミュレーション機能の実行時ライブラリ用ダミールーチンCBLXDMSDが実行されます。

(3)　内部的に展開されるCALL文の引数

CALL文に展開されたデータベース操作文の引数によって，利用者はXDM/SDプログラムをテストできます。内部的に展開されるCALL文の引数の形式を次に示します。

形式

CALL 'CBLXDMSD' USING インタフェースエリア
  DML情報エリア 固有情報エリア (その他の引数) …

データベース操作文で内部的に展開されるCALL文を次に示します。

表24-1　データベース操作文で内部的に展開されるCALL文

データベース操作文
内部的に展開されるCALL文と設定される引数

データベース条件文

CALL 'CBLXDMSD' USING インタフェースエリア
                     ,DML情報エリア
                     ,固有情報エリア

CONNECT文
DISCONNECT文
ERASE文
NULLIFY文
RECONNECT文

CALL 'CBLXDMSD' USING インタフェースエリア
                     ,DML情報エリア
                     ,固有情報エリア

FETCH文※¹
FIND文
GET文※¹
MODIFY文
STORE文

CALL 'CBLXDMSD' USING インタフェースエリア
                     ,DML情報エリア
                     ,固有情報エリア
                     ,データ受け渡しエリア※²
                   〔,付加機能用情報エリア〕※³

FETCH文※⁴

CALL 'CBLXDMSD' USING インタフェースエリア
                     ,DML情報エリア
                     ,固有情報エリア
                     ,データ受け渡しエリア※⁵

GET文※⁴

CALL 'CBLXDMSD' USING インタフェースエリア
                     ,DML情報エリア
                     ,固有情報エリア
                     ,データ受け渡しエリア※²
                     ,データ受け渡しエリア※⁵

注※1　DATA AREA指定がありません。

注※2

FROM，INTOで指定したデータ名です。指定しない場合にはサブスキーマ節の先頭のレコードビュー名が使用されます。

注※3

FIND文，DATA AREA指定なしのFETCH文でUSINGを指定したときのデータ名です。〔　〕で囲まれた引数を指定しない場合，引数はBY REFERENCE指定でZERO（4バイトの0）を渡します。

注※4　DATA AREA指定があります。

注※5　DATA AREAで指定したデータ名です。

データベース操作文で内部的に展開されるCALL文の引数を「表24-2　データベース操作文で内部的に展開されるCALL文の引数」に示します。また，各項目の詳細を次の表に示します。

表24-3　インタフェースエリアの詳細

表24-4　DML情報エリアの詳細

表24-5　固有情報エリアの詳細

表24-2　データベース操作文で内部的に展開されるCALL文の引数

引数の項目
設定内容

インタフェースエリア

01 SD-IFA.
 02 FILLER    PIC X(4).
 02 SD-IFA-01 PIC X(5).  ………… 実行結果を表す状態コード
 02 SD-IFA-02 PIC X(1).  ………… データベース条件の実行結果
 02 SD-IFA-03 PIC X(30). ………… 検索したレコードビュー名
 02 FILLER    PIC X(30).
 02 SD-IFA-04 PIC X(2).  ………… 使用しない
 02 SD-IFA-05 PIC X(2).  ………… 使用しない
 02 FILLER    PIC X(26).
 02 SD-IFA-06 PIC X(20). ………… 使用しない
 02 FILLER    PIC X(12).
 02 SD-IFA-07 PIC S9(4) COMP.  … カーソルグループ番号
 02 SD-IFA-08 PIC X(4).  ………… サブ状態コード
 02 SD-IFA-09 PIC S9(4) COMP.  … レコードビュー長
 02 FILLER    PIC X(20).
 02 SD-IFA-10 PIC X(30). ………… データベース操作文種別
 02 FILLER    PIC X(66).
 02 SD-IFA-11 PIC X(30). ………… サブスキーマ名
 02 SD-IFA-12 PIC X(30). ………… スキーマ名
 02 FILLER    PIC X(196).

DML情報エリア

01 SD-DML.
 02 SD-DML-01  PIC S9(4) COMP.  … DML情報エリア長
 02 FILLER    PIC X(2).
 02 SD-DML-02 PIC X(2).  ………… DML区分
 02 SD-DML-03 PIC X(2).  ………… 要求種別
 02 SD-DML-04 PIC X(2).  ………… 一括検索範囲指定
 02 SD-DML-05 PIC X(2).  ………… 位置指示子指定
 02 SD-DML-06 PIC X(30). ………… ビュー名
 02 FILLER    PIC X(2).
 02 SD-DML-07 PIC X(30). ………… インデクス名／
                                  親子集合ビュー名
 02 FILLER    PIC X(2).
 02 SD-DML-08 PIC X(2).  ………… 探索方向
 02 SD-DML-09 PIC X(2).  ………… 位置決め目的
 02 SD-DML-10 PIC S9(9) COMP.  … 探索方向の整数値
 02 SD-DML-11 PIC X(30). ………… パス名
 02 FILLER    PIC X(14).

固有情報エリア
（手続き文の各指定情報）

01 SD-TYP.
 02 SD-TYP-01 PIC X(2).   ………… データ名指定情報
 02 FILLER PIC X(6).
 02 SD-TYP-02 PIC X(2).   ………… 条件種別
 02 FILLER PIC X(2).
 02 SD-TYP-03  PIC X(2).  ………… 左辺指定子
 02 SD-TYP-04  PIC X(30). ………… 左辺指定子ビュー名
 02 SD-TYP-05  PIC X(2).  ………… 右辺指定子
 02 SD-TYP-06  PIC X(30). ………… 右辺指定子ビュー名
 02 SD-TYP-07  PIC X(2).  ………… 検索条件の比較演算子
 02 SD-TYP-08  PIC X(30). ………… 検索条件の構成要素
                                   ビュー名
 02 FILLER      PIC X(32).
 02 SD-TYP-09   PIC X(1). ………… RETAINING種別
 02 FILLER      PIC X(1).
 02 SD-TYP-10   PIC S9(4) COMP. … 親子集合ビュー数
 02 FILLER OCCURS 2000 DEPENDING ON SD-TYP-10.
   03 SD-TYP-11 PIC X(30).  ……… 親子集合ビュー名
   03 FILLER    PIC X(2).

データ受け渡しエリアおよび付加機能用情報エリア
データ名

表24-3　インタフェースエリアの詳細

領域名
CALL文
実行前
シミュ
レータ
CALL文
実行後
内容

SD-IFA-01
－
設定
参照
実行結果を表す。
STATUS句で指定したデータ名の領域に転記される。

SD-IFA-02
－
設定
参照
データベース条件の結果を表し，データベース条件の判定に使用する。
'1'：判定結果は真
'0'：判定結果は偽

SD-IFA-03
－
設定
参照
検索したレコードビュー名を表す。
RECORD NAME句に指定したデータ名の領域に転記される。RECORD NAME句の指定がない場合は転記されない。

SD-IFA-04
－
－
－
使用しない。

SD-IFA-05
－
－
－
使用しない。

SD-IFA-06
－
－
－
使用しない。

SD-IFA-07
設定
参照
－
カーソルグループ番号を表す。
CURSOR NUMBER句に指定したデータ名の領域から転記される。
CURSOR NUMBER句の指定がない場合は0が転記される。

SD-IFA-08
－
設定
参照
サブ状態コードを表す。
DETAIL CODE句で指定したデータ名の領域に転記される。DETAIL CODE句の指定がない場合は転記されない。

SD-IFA-09
－
設定
参照
処理対象のレコードビュー長を表す。
RECORD LENGTH句で指定したデータ名の領域に転記される。
RECORD LENGTH句の指定がない場合は転記されない。

SD-IFA-10
設定
参照
－
データベース操作文の種別を表す。
'CONNECT' = CONNECT文
'DISCONNECT' = DISCONNECT文
'ERASE' = ERASE文
'FETCH' = FETCH文
'FIND' = FIND文
'GET' = GET文
'MODIFY' = MODIFY文
'NULLIFY' = NULLIFY文
'RECONNECT' = RECONNECT文
'STORE' = STORE文
'TEST' = データベース条件文

SD-IFA-11
設定
参照
－
サブスキーマを表す。
サブスキーマが転記される。

SD-IFA-12
設定
参照
－
スキーマを表す。
スキーマが転記される。

（凡例）

－：該当しない

データ受け渡しエリアおよび付加情報エリアでは，各文中に指定されたデータ名が引数になります。指定できるデータ名を次に示します。

FETCH文のDATA AREAまたはINTOに指定されたデータ名

GET文のDATA AREAまたはINTOに指定されたデータ名

MODIFY文のFROMに指定されたデータ名

STORE文のFROMに指定されたデータ名

FETCH文またはFIND文のUSINGに指定されたデータ名

表24-4　DML情報エリアの詳細

領域名
CALL文
実行前
シミュ
レータ
CALL文
実行後
内容

SD-DML-01
設定
－
－
DML情報エリア長を表す。
128の固定長が転記される。

SD-DML-02
－
－
－
使用しない。

SD-DML-03
設定
参照
－
要求種別を表す。
'P' = ERASE文でALL指定なし。
'R' = FETCH(1)文でWITHIN，INDEXEDの指定なし。
または，FIND文でCURRENT，WITHIN，INDEXEDの指定なし。
'RI'= FETCH(1)，FIND文でINDEXED指定あり。
'S' = FETCH(1)，FIND文でWITHIN指定あり。
'C' = FIND文でCURRENT指定あり。
'H' = FETCH(2)文でWITHIN，INDEXEDの指定なし。
'HI'= FETCH(2)文でINDEXED指定あり。
'M' = FETCH(2)文でWITHIN指定あり。
'N' = GET(2)文。

SD-DML-04
設定
参照
－
一括検索範囲指定を表す。
'A' = FETCH文でADVANCING指定あり。

SD-DML-05
設定
参照
－
位置指示子指定を表す。
'S' = NULLIFY文でレコードビュー名，OWNER，MEMBERの指定なし。
または，CURRENT指定ありのFIND文で，レコードビュー名，OWNER，MEMBERの指定なし。
'R' = NULLIFY文でレコードビュー名の指定あり。
または，FIND文でCURRENT　レコードビュー名の指定あり。
'O' = NULLIFY文でOWNER OF　親子集合ビュー名の指定あり。
または，FIND文でCURRENT OWNER OF　親子集合ビュー名の指定あり。
'M' = NULLIFY文でMEMBER OF　親子集合ビュー名の指定あり。
または，FIND文でCURRENT MEMBER OF　親子集合ビュー名の指定あり。

SD-DML-06
設定
参照
－
次のレコードビュー名または親子集合ビュー名を表す。

CONNECT，DISCONNECT，ERASE，FETCH，GET，MODIFY，RECONNECT，STORE文で指定されたレコードビュー名

FIND文でCURRENT指定がない場合のレコードビュー名

FIND，NULLIFY文でCURRENTに指定されたレコードビュー名または親子集合ビュー名

SD-DML-07
設定
参照
－
次のインデクス名または親子集合ビュー名を表す。

FETCH，FIND文でINDEXED指定がある場合のインデクス名

FETCH，FIND，GET文でWITHIN指定がある場合の親子集合ビュー名

CONNECT，DISCONNECT，RECONNECT文で指定された先頭の親子集合ビュー名

SD-DML-08
設定
参照
－
探索方向を表す。
'F' = FETCH，FIND文でFIRST指定あり。
'L' = 〃 LAST指定あり。
'N' = 〃 NEXT指定あり。
'P' = 〃 PRIOR指定あり。
'A' = 〃 RELATIVE指定なし。
'R' = 〃 RELATIVE指定あり。
'D' = 〃 DYNAMIC指定あり。

SD-DML-09
設定
参照
－
位置決め目的を表す。
'U' = FETCH，FIND文でUPDATE指定あり。

SD-DML-10
設定
参照
－
探索方向の整数値を表す。
RELATIVE指定時，未指定時の一意名または整数の値。

SD-DML-11
設定
参照
－
パス名を表す。
FETCH文に指定されたパス名。

（凡例）

－：該当しない

FETCH(1)文，FETCH(2)文，GET(2)文は，それぞれ次の文を指します。

FETCH(1)文：DATA AREA指定なしのFETCH文

FETCH(2)文：DATA AREA指定ありのFETCH文

GET(2)文：DATA AREA指定ありのGET文

表24-5　固有情報エリアの詳細

領域名
CALL文
実行前
シミュ
レータ
CALL文
実行後
内容

SD-TYP-01
設定
参照
－
データ名指定を表す。
'U' = USING指定あり。

SD-TYP-02
設定
参照
－
条件種別を表す。
'A' = データベース条件文のALSO指定
'NA'= 〃 NOT ALSO指定
'N' = 〃 NULL指定
'NN'= 〃 NOT NULL指定
'E' = 〃 EMPTY指定
'NE'= 〃 NOT EMPTY指定
'C' = 〃 CONTAINS指定
空白 = 上記以外

SD-TYP-03
設定
参照
－
左辺指定子を表す。
'R' = データベース条件左辺にレコードビュー名を指定
'O' = 〃 OWNER OF　親子集合ビュー名を指定
'M' = 〃 MEMBER OF　親子集合ビュー名を指定
'S' = 〃 レコードビュー名，OWNER，MEMBERのどの指定もなし
'X' = 〃 親子集合ビュー名を指定
空白 =上記以外

SD-TYP-04
設定
参照
－
データベース条件左辺のレコードビュー名または親子集合ビュー名を表す（SD-TYP-03が 'S'または空白のときは，この領域も空白となる）。

SD-TYP-05
設定
参照
－
右辺指定子を表す。
'R' = データベース条件右辺にレコードビュー名を指定
'O' = 〃 OWNER OF　親子集合ビュー名を指定
'M' = 〃 MEMBER OF　親子集合ビュー名を指定
'S' = 〃 レコードビュー名，OWNER，MEMBERのどの指定もなし
'X' = 〃 親子集合ビュー名を指定
空白 =上記以外

SD-TYP-06
設定
参照
－
データベース条件右辺のレコードビュー名または親子集合ビュー名を表す（SD-TYP-05が 'S'または空白のときは，この領域も空白となる）。

SD-TYP-07
設定
参照
－
探索条件の最初に現れた比較演算子を表す。
'>' = GREATER THAN　または > 指定
'<' = LESS THAN　または < 指定
'=' = EQUAL　または = 指定
'>='= GREATER THAN OR EQUAL または >= 指定
'<='= LESS THAN OR EQUAL　または <= 指定
空白= 上記以外

SD-TYP-08
設定
参照
－
探索条件の最初に現れた構成要素ビュー名またはKEYを表す
（SD-TYP-07が空白のときは，この領域も空白となる）。

SD-TYP-09
設定
参照
－
RETAINING種別を表す。
'A' = RETAINING指定ありのFETCH，FIND，STORE文で，RECORD，親子集合ビュー名の指定がない。
'R' = ERASE文でRETAINING指定あり。
または，RETAINING RECORD指定ありのFETCH，FIND，STORE文で，親子集合ビュー名の指定がない。
'S' = RETAINING　親子集合ビュー名指定ありのFETCH，FIND，STORE文で，RECORDの指定がない。
'B' = FETCH，FIND，STORE文に，RETAINING RECORD　親子集合ビュー名の指定がある。

SD-TYP-10
設定
参照
－
RETAININGに指定された親子集合ビューの個数を表す。親子集合ビュー名の指定があれば，その個数が入る。

SD-TYP-11
設定
参照
－
RETAININGに指定された親子集合ビュー名を表す（SD-TYP-10が0の場合，この領域はない）。

（凡例）

－：該当しない

注

SD-TYP-02～06は，データベース条件文情報です。

SD-TYP-07，08は，探索条件情報です。

SD-TYP-09～11は，RETAINING情報です。

(4)　XDM/SDプログラムのテスト方法の制限事項

COBOL原始プログラムのコンパイル時，次の部分はエラーチェックの対象となりません。

(a)　XDMシステム定義のスキーマ定義にだけ指定され，サブスキーマ節に展開されない部分

親子集合で親レコード，子レコードの対応関係があるもの
例えば，親子集合型内を検索するFETCH文で，レコードビュー名で示すレコードは，親子集合ビュー名で示す親子集合の子レコードにしなければなりません。

パスで指定したレコードの関係にあるもの
例えば，パス順に複数のレコードを検索するFETCH文で，エントリレコード名で示すレコードは，パス名で示すパスのエントリレコードにしなければなりません。

副構成要素に関するもの
例えば，条件を指定したFETCH文で，比較条件に指定した構成要素ビュー名で示す構成要素は，副構成要素以外にしなければなりません。

(b)　XDMシステム定義のサブスキーマ定義にだけ指定され，サブスキーマ節に展開されない部分

アクセス目的に関するもの
例えば，FOR UPDATE（更新）を指定したFETCH文で，レコードビュー名で示すレコードは，サブスキーマ定義でUPDATE指定をしなければなりません。

24.3　リレーショナルデータベース（XDM/RD）操作シミュレーション

＜この節の構成＞

(1)　コンパイル方法

(2)　テスト方法

(1)　コンパイル方法

リレーショナルデータベース（XDM/RD）操作シミュレーション機能を使用する場合，-SQL,XDMオプションを指定してコンパイルします。また，SQL連絡領域SQLCAは，メインフレームのXDM/RDが提供しているSQL連絡領域をSQLCA.cblという名称でUNIX上に転送して使用します。このシステムでは，リレーショナルデータベース（XDM/RD）操作シミュレーション機能の実行時ライブラリ用ダミールーチンとして，CBLXDMRDを提供します。

(2)　テスト方法

実行可能ファイルではSQL文は実行に関係しないため，SQL文のテストはできません。SQL以外の文のテストをする場合は，テストデバッガのTDコマンド（ASSIGN DATAコマンドなど）を用いて次のようにテストします。

（例）

行番号3000～3200のSQL文の擬似実行で，NAME-AREAにデータを代入し，行番号3300のIF文のTHENの処理とELSEの処理をテストする。

（原始プログラム）

001000 WORKING-STORAGE SECTION.
001100 EXEC SQL BEGIN DECLARE SECTION END-EXEC.
001200 01 NAME-AREA PIC N(20).
001300 EXEC SQL END DECLARE SECTION END-EXEC.
          :
002000 PROCEDURE DIVISION.
          :
003000     EXEC SQL
003100       SELECT NAME INTO :NAME-AREA FROM SHAIN
                              WHERE AGE = 30
003200     END-EXEC.
003300     IF NAME-AREA = N'山田　太郎'
003400       THEN
              :
004000       ELSE
              :
005000     END-IF.

（入力するTDコマンド）

SET BREAK STATEMENT(3000) COUNTER(CNT) DO
 IF CONDITION(CNT=1)
   ASSIGN DATA(NAME-AREA) VALUE(N'山田  太郎')
 ELSE
   ASSIGN DATA(NAME-AREA) VALUE(N'日立  花子')
 ENDIF
 GO
ENDDO

行番号3000の行に制御が渡るごとに実行を中断します。

最初の中断のときは"山田　太郎"を，2回目以降の中断のときは"日立　花子"をNAME-AREAに設定します。

NAME-AREAに値を設定後，実行を再開始します。

25.　CGIプログラム作成支援機能（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）

CGI（Common Gateway Interface）プログラム作成支援機能を使うと，CGIを使ったプログラムをCOBOL2002で作成できます。この章では，CGIプログラムの作成を支援する機能と，その利用方法について説明します。

＜この章の構成＞

25.1　CGIプログラム作成支援機能の概要

25.2　CGIプログラムの種類と作成方法

25.3　フォーム情報の取得とCGIリスト

25.4　CGI環境変数へのアクセス

25.5　HTMLファイルをCOBOLソースファイルに変換する方法

25.6　HTMLテンプレート機能

25.7　CGIプログラムの作成を支援するサービスルーチン

25.8　起動ファイルの作成方法

25.9　実行時エラーメッセージの取得方法

25.10　CGIプログラムのデバッグ

25.11　注意事項

25.1　CGIプログラム作成支援機能の概要

＜この節の構成＞

25.1.1　概要

25.1.2　CGIプログラムが動作するのに必要な環境

25.1.3　CGIプログラム作成支援機能が提供する機能

25.1.1　概要

CGI（Common Gateway Interface）とは，Webページで，画面対話のような複雑なサービスを使用できるようにするために用意された拡張APIのことです。

CGIプログラム作成支援機能は，COBOL2002で作成したプログラムをCGIプログラムとして利用するための機能です。

25.1.2　CGIプログラムが動作するのに必要な環境

CGIプログラムを利用するには，サーバ，クライアントがそれぞれ次の条件を満たしている必要があります。

サーバ

CGIプログラムが動作するWebサーバが必要です。

クライアント

Webページを見るためのWebブラウザが必要です。

25.1.3　CGIプログラム作成支援機能が提供する機能

CGIプログラム作成支援機能には，次のような機能があります。

＜この項の構成＞

(1)　CGIプログラムの作成を支援するサービスルーチン

(2)　HTMLトランスレータ

(3)　HTMLテンプレート機能

(4)　注意事項

(1)　CGIプログラムの作成を支援するサービスルーチン

次のような機能を，サービスルーチンを使って利用できます。

標準HTMLヘッダの出力

システム環境変数へのアクセス

フォーム情報の解析

HTMLコードの自動生成

デバッグ

詳細は「25.7　CGIプログラムの作成を支援するサービスルーチン」を参照してください。

(2)　HTMLトランスレータ

HTMLトランスレータは，HTMLファイルをCOBOL副プログラムのソースファイルに変換するツールです。HTMLトランスレータを使うと，COBOLをプログラミングすることなく，HTMLファイルからCOBOL副プログラムが作成できます。

詳細は「25.5　HTMLファイルをCOBOLソースファイルに変換する方法」を参照してください。

(3)　HTMLテンプレート機能

HTMLテンプレートとは，HTMLファイル中にHTML拡張言語と呼ばれる拡張タグを埋め込んだものです。HTMLテンプレートを利用すると，動的なWebページを出力するCOBOLプログラムを効率良く開発できます。

詳細は「25.6　HTMLテンプレート機能」を参照してください。

(4)　注意事項

COBOL2002で作成したCGIプログラムは，サーバの高速化やISAPI，NSAPIなどの拡張CGI機能を利用できません。

CGIプログラムの環境変数の設定，およびCGIプログラムを起動する起動ファイルは，セキュリティなどの理由からサーバ管理者に起動を制限されている場合があります。

CGIプログラムのコンパイル時と実行時の環境変数LANGは，同じでなければなりません。

25.2　CGIプログラムの種類と作成方法

CGIプログラムは，プログラム定義として作成します。

CGIプログラムの作成には，3種類の方法があります。ここでは，それぞれの作成方法と，作成されたプログラムの特徴について説明します。

＜この節の構成＞

25.2.1　スタティック型CGIプログラムの作成方法

25.2.2　インタプリット型CGIプログラムの作成方法

25.2.3　ダイナミック型CGIプログラムの作成方法

25.2.4　CGIプログラムのコンパイル，およびリンク方法

25.2.1　スタティック型CGIプログラムの作成方法

スタティック型CGIプログラムは，あらかじめHTMLトランスレータを使って，HTMLテンプレートからCOBOL副プログラムを生成しておく形式のプログラムです。

スタティック型CGIプログラムは，実行速度が高速です。しかし，HTMLテンプレートを変更するたびに再コンパイルする必要があります。

スタティック型CGIプログラムの作成手順

Webページに出力するHTMLテンプレート（CGISUB.htm）を作成します。

HTMLトランスレータを使用して，HTMLテンプレートからCOBOL副プログラム（CGISUB.cbl）を生成します。

2.で作成したCOBOL副プログラムを呼び出すCOBOL主プログラム（CGIMAIN.cbl）を作成します。

COBOL主プログラム，COBOL副プログラムをコンパイルし，CGIプログラム作成支援ライブラリ（CGIライブラリ）とリンクして，CGIプログラム（CGIMAIN）を生成します。

図25-1　スタティック型CGIプログラムの作成手順

25.2.2　インタプリット型CGIプログラムの作成方法

インタプリット型CGIプログラムは，COBOLプログラムが実行中にCBLFILLTEMPLATEサービスルーチンを利用して，HTMLテンプレートをインタプリット（動的変換）して出力する形式のプログラムです。

インタプリット型CGIプログラムは，HTMLテンプレートを変更しても再コンパイルする必要がありません。したがって，HTMLテンプレートを変更することで，容易にWebページの出力内容を変更できます。しかし，実行時にHTMLテンプレートをインタプリットするため，実行速度は低速です。

インタプリット型CGIプログラムの作成手順

Webページに出力するHTMLテンプレート（CGISUB.htm）を作成します。

1.のHTMLテンプレートをインタプリットするCOBOL主プログラム（CGIMAIN.cbl）を作成します。
インタプリットにはCBLFILLTEMPLATEサービスルーチンを使用します。

COBOL主プログラムだけをコンパイルし，CGIライブラリとリンクして，CGIプログラム（CGIMAIN）を生成します。
CGIプログラムの実行時に，HTMLテンプレートがインタプリットされます。

図25-2　インタプリット型CGIプログラムの作成手順

25.2.3　ダイナミック型CGIプログラムの作成方法

ダイナミック型CGIプログラムは，COBOLプログラムが実行中にCBLFILLTEMPLATEサービスルーチンを利用して，共用ライブラリを呼び出す形式のプログラムです。共用ライブラリは，あらかじめHTMLトランスレータを利用してHTMLテンプレートから生成しておきます。

ダイナミック型CGIプログラムは，テストしながらHTMLテンプレートを修正できます。また，HTMLテンプレートをテスト後に共用ライブラリ化しても，CGIプログラムを再コンパイルする必要がありません。ただし，共用ライブラリの名称を変更した場合は，CGIプログラムを再コンパイルする必要があります。また，HTMLテンプレートが複数ある場合でも，一つの共用ライブラリファイルにまとめられません。この場合，HTMLテンプレートごとに共用ライブラリファイルを作成する必要があります。

ダイナミック型CGIプログラムの作成手順

Webページに出力するHTMLテンプレート（CGISUB.htm）を作成します。

1.で作成したファイルを呼び出すCOBOL主プログラム（CGIMAIN.cbl）を作成します。
COBOL主プログラムからは，CBLFILLTEMPLATEサービスルーチンを使用してHTMLテンプレートを呼び出すようにします。このとき，CBLFILLTEMPLATEサービスルーチンに指定するHTMLテンプレートの名称には，1.のファイル名から拡張子を除いた名称（CGISUB）を指定してください。

COBOL主プログラムだけをコンパイルし，CGIライブラリとリンクしてCGIプログラム（CGIMAIN）を生成します。

CGIプログラムとHTMLテンプレートを使って，HTMLテンプレートが正しくWebページに出力されるかテストします。
正しく出力されるまで，HTMLテンプレートを修正しながらテストを繰り返します。

HTMLトランスレータを使用して，HTMLテンプレートからCOBOL副プログラムのソースファイル（CGISUB.cbl）を生成します。次に指定例を示します。
cblhtmtr CGISUB.htm

COBOL副プログラムのソースファイルをコンパイルし，共用ライブラリファイル（CGISUB）を生成します。
CGIプログラムは，実行時に共用ライブラリファイル※を呼び出します。

注※

共用ライブラリファイルを作成するldコマンドでのリンク例

HP-UX(IPF)の場合

  ld -b -o CGISUB.so CGISUB.o -a archive
     -L/opt/HILNGcbl2k/lib -lcbl2kml

AIX(32)の場合

  ld -o CGISUB.a CGISUB.o -bpT:0x10000000
     -bpD:0x20000000 -bnoentry -bM:SRE -bexpall
     -L/opt/HILNGcbl2k/lib -lcbl2kcgi -lcbl2k
      -lcbl2kml -lm -lc

Solaris(SPARC)の場合

  ld -G -o CGISUB.so CGISUB.o -Bstatic
     -L/opt/HILNGcbl2k/lib -lcbl2kml

図25-3　ダイナミック型CGIプログラムの作成手順

25.2.4　CGIプログラムのコンパイル，およびリンク方法

ここでは，CGIプログラム作成支援機能を使用したCOBOLプログラムのコンパイル，およびリンク方法について説明します。

＜この項の構成＞

(1)　ccbl2002コマンドを使用する場合

(2)　cc／ldコマンドを使用する場合

(1)　ccbl2002コマンドを使用する場合

ccbl2002コマンドを使う場合は，CGIライブラリとリンクするように指定してください。次に，形式を示します。

(a)　スタティック型CGIプログラムを作成する場合

HP-UX(IPF)

ccbl2002 -OutputFile CGIMAIN -Main,System CGIMAIN.cbl
        CGISUB.htm -lcbl2kcgi -ldld

AIX(32)，Solaris(SPARC)

ccbl2002 -OutputFile CGIMAIN -Main,System CGIMAIN.cbl
        CGISUB.htm -lcbl2kcgi

(b)　インタプリット型CGIプログラムを作成する場合

HP-UX(IPF)

ccbl2002 -OutputFile CGIMAIN -Main,System CGIMAIN.cbl
        -lcbl2kcgi -ldld

AIX(32)，Solaris(SPARC)

ccbl2002 -OutputFile CGIMAIN -Main,System CGIMAIN.cbl
        -lcbl2kcgi

(c)　ダイナミック型CGIプログラムを作成する場合

HP-UX(IPF)

ccbl2002 -OutputFile CGIMAIN -Main,System CGIMAIN.cbl
        -lcbl2kcgi -ldld -Link -Wl

AIX(32)，Solaris(SPARC)

ccbl2002 -OutputFile CGIMAIN -Main,System CGIMAIN.cbl
        -lcbl2kcgi

(2)　cc／ldコマンドを使用する場合

ccコマンド，またはldコマンドを使う場合は，CGIライブラリとリンクするように指定してください。次に，形式を示します。

(a)　スタティック型CGIプログラムを作成する場合

HP-UX(IPF)

cc CGIMAIN.o CGISUB.o -L/opt/HILNGcbl2k/lib -lcbl2kcgi -lcbl2k
  -lcbl2kml … -ldld …

AIX(32)

cc CGIMAIN.o CGISUB.o -L/opt/HILNGcbl2k/lib -lcbl2kcgi -lcbl2k
  -lcbl2kml … -ldl …

Solaris(SPARC)

cc CGIMAIN.o CGISUB.o -L/opt/HILNGcbl2k/lib -lcbl2kcgi -lcbl2k
  -lcbl2kml … -lm -ldl …

(b)　インタプリット型CGIプログラムを作成する場合

HP-UX(IPF)

cc CGIMAIN.o -L/opt/HILNGcbl2k/lib -lcbl2kcgi -lcbl2k
  -lcbl2kml … -ldld …

AIX(32)

cc CGIMAIN.o -L/opt/HILNGcbl2k/lib -lcbl2kcgi -lcbl2k
  -lcbl2kml … -ldl …

Solaris(SPARC)

cc CGIMAIN.o -L/opt/HILNGcbl2k/lib -lcbl2kcgi -lcbl2k
  -lcbl2kml … -lm -ldl …

(c)　ダイナミック型CGIプログラムを作成する場合

HP-UX(IPF)

cc -Wl,-E CGIMAIN.o -L/opt/HILNGcbl2k/lib -lcbl2kcgi -lcbl2k
  -lcbl2kml … -ldld …

AIX(32)

cc CGIMAIN.o -L/opt/HILNGcbl2k/lib -lcbl2kcgi -lcbl2k
  -lcbl2kml …

Solaris(SPARC)

cc CGIMAIN.o -L/opt/HILNGcbl2k/lib -lcbl2kcgi -lcbl2k
  -lcbl2kml … -lm -ldl …

25.3　フォーム情報の取得とCGIリスト

CGIプログラム作成支援機能では，Webページでフォームタグに入力された情報を，CGIリストという形式で扱えます。ここでは，フォームタグに入力された情報からCGIリストを作成する方法，およびCOBOLプログラムでCGIリストを扱う方法について説明します。

＜この節の構成＞

25.3.1　CGIリストの概要

25.3.2　CGIリストのデータとCOBOLのデータ記述

25.3.3　CGIリストの作成と編集

25.3.1　CGIリストの概要

クライアントのWebブラウザでフォームタグに対して入力された情報は，Webサーバを経由してCGIプログラムに渡されます。これをフォーム情報といいます。フォーム情報は，データの「名前」とデータの「値」が対になっているデータ構造をしています。

CGIプログラム作成支援機能では，フォーム情報を解析し，COBOLで扱えるリスト構造体に格納できます。このリスト構造体のことをCGIリストと呼びます。次にCGIリストの構造を示します。

図25-4　CGIリストの構造

図中のポイント位置とは，COBOLプログラムがCGIリストにアクセスする時に，任意のデータを指定するために必要なポインタのことです。詳細は，「25.7　CGIプログラムの作成を支援するサービスルーチン」を参照してください。

25.3.2　CGIリストのデータとCOBOLのデータ記述

CGIリストの「名前」と「値」の対応は，COBOLでは次に示す集団項目となります。

表25-1　CGIリストのデータとCOBOLのデータ記述の対応

CGIリストの
データ
COBOLのデータ記述

名前

01 データ名1 PIC X(28).

値

01 データ名2.
 02 データ名3 PIC S9(9) USAGE COMP.
 02 データ名4.
   03 PIC X OCCURS 1024 DEPENDING ON データ名3.

注

「名前」は，COBOLのデータ名1に対応し，28バイトの英数字項目で指定します。

「値」の長さは，COBOL集団項目のデータ名3に対応し，4バイトの2進項目で指定します。

「値」は，COBOL集団項目のデータ名4に対応し，最大1,024バイトの可変長英数字項目で指定します。

25.3.3　CGIリストの作成と編集

フォーム情報からCGIリストを作成したり，CGIリストの内容を編集したりするには，サービスルーチンを使用します。詳細は，「25.7　CGIプログラムの作成を支援するサービスルーチン」を参照してください。

25.4　CGI環境変数へのアクセス

CGIプログラム作成支援機能では，環境変数を使ってCGIプログラムに必要な情報を取得できます。CGIプログラムに必要な情報を提供する環境変数を，CGI環境変数と呼びます。

CGI環境変数から値を取得するには，CBLGETENVサービスルーチンを使用します。また，CGI環境変数の一覧と値をHTML形式で出力するには，CBLPRINTENVサービスルーチンを使用します。各サービスルーチンの詳細については，「25.7　CGIプログラムの作成を支援するサービスルーチン」を参照してください。

次に，アクセスできるCGI環境変数の一覧を示します。

表25-2　CGIプログラム作成支援機能でアクセスできるCGI環境変数

CGI環境変数名
説明

AUTH_TYPE
ユーザを認証するときに使う認証のタイプ

CONTENT_LENGTH
POST要求の場合の入力バイト数

CONTENT_TYPE
text/HTMLのようなMIMEタイプ
HTTPファイルのアップロード用にはmultipart/form-dataがセットされる。

GATEWAY_INTERFACE
サーバが使用するCGIプロトコルのバージョン

HTTP_ACCEPT
Webブラウザが受け取るMIMEタイプ

HTTP_COOKIE
クッキー情報

HTTP_USER_AGENT
クライアントが使用するWebブラウザ名，バージョン

PATH_INFO
CGIプログラムに渡される追加パス情報
（URL中のスクリプト名のあとのクエリー文字列の前にある部分）

PATH_TRANSLATED
環境変数PATH_INFOに指定された絶対パス情報
（仮想パス名がディレクトリに展開される）

QUERY_STRING
GET要求の場合，CGIプログラムに渡されるクエリー情報

REMOTE_ADDR
クライアントのIPアドレス

REMOTE_HOST
クライアントのホスト名

REMOTE_IDENT
要求を出しているクライアント

REMOTE_USER
クライアントによって与えられ，サーバに認証されたユーザ名称（AUTH_TYPEが設定されている時だけ有効）

REQUEST_METHOD
HTTP要求メソッド名（"GET"または"POST"）

SCRIPT_NAME
実行中のCGIプログラム名

SERVER_NAME
サーバのホスト名

SERVER_PORT
サーバが動いているホストのTCP/IPポート番号

SERVER_PROTOCOL
要求された情報を取り出すプロトコル名とバージョン

SERVER_SOFTWARE
クライアントの要求に答えているWebサーバ名とバージョン

25.5　HTMLファイルをCOBOLソースファイルに変換する方法

HTMLトランスレータを使うと，HTMLファイルをCOBOL副プログラムのソースファイルに変換できます。ここでは，HTMLトランスレータの使用方法について説明します。

＜この節の構成＞

25.5.1　HTMLトランスレータを使ったHTMLファイルの変換

25.5.2　ccbl2002コマンドからのHTMLファイルの変換

25.5.1　HTMLトランスレータを使ったHTMLファイルの変換

HTMLトランスレータでHTMLファイルをCOBOLソースファイルに変換するには，次のように指定します。

形式

cblhtmtr 〔-H2cbl〕 HTMLファイル名 〔…〕

-H2cbl

固定形式ソースに変換するオプションです。オプションを指定しなかった場合は，-H2cblが仮定されます。

HTMLファイル名

COBOLソースファイルに変換したいHTMLファイルの名前を指定します。複数のHTMLファイル名を指定した場合，別々のCOBOLソースファイルに変換されます。

戻り値

0：正常終了した場合

1：変換中にエラーが発生した場合

規則

HTMLファイル名に指定できるのは，拡張子が.htm，および.htmlのファイルだけです。

HTMLファイル名に指定するファイル名またはディレクトリ名に空白が含まれる場合，ファイルを引用符（ " ）で囲って指定します。

ファイル名の長さが30バイトを超える場合，HTMLファイル名に指定できません。

HTMLファイル名に指定するファイル名は，COBOLのプログラム名の構文規則に従った名称でなければなりません。プログラム名に指定した英小文字，ハイフン（－），#，¥，@はコンパイル時に別の文字に変換されるため，CBLFILLTEMPLATEサービスルーチンに指定するHTMLファイル名に使用しないでください。

絶対パス名の長さが255バイトを超えるファイル名は，HTMLファイル名に指定できません。

出力されるCOBOLソースファイルの名称は，「HTMLファイル名.cbl」となります。

出力されたCOBOLソースファイルのPROGRAM-IDは，HTMLファイル名から拡張子を除いた名称になります。

HTMLファイルの変換中にエラーが発生した場合，エラーメッセージが出力されます。出力されるエラーメッセージの形式は，コンパイラが出力するメッセージと同じです。

注意事項

次の文字列は，HTMLトランスレータの予約語になっています。

$%

%$

REPEAT

END-REPEAT

IF

ELSE

END-IF

NULL

「$」および「%」をWebページに出力したい場合，実体参照で記述する必要があります。実体参照での"$"，"%"の表記を，次に示します。

表示する文字 | 実体参照での表記
$ | &#36;
% | &#37;

HTMLトランスレータで固定形式ソースを作成すると，テキスト領域にある日本語などの多バイト文字は，環境変数LANGの値によって次のような文字コードを使用しているとみなして処理されます。

システム | 環境変数LANGの設定値によって有効となる文字コード※ | 文字コード
HP-UX(IPF)，AIX(32) | シフトJISコード | シフトJISコード
日本語EUCコード | 日本語EUCコード
上記以外 | シフトJISコード
Solaris(SPARC) | シフトJISコード | シフトJISコード
日本語EUCコード | 日本語EUCコード
上記以外 | 日本語EUCコード

注※

環境変数LANGの設定値と文字コードについては，「付録A　COBOLで使用する文字集合」を参照してください。

漢字コードによるコード一覧を次に示します。

漢字コード | 先行コード | 後続コード
シフトJISコード | 0x81～0x9F，0xE0～0xFC | 0x40～0x7E,0x80～0xFC
日本語EUCコード | 0xA1～0xFE | 0xA1～0xFE

HTMLテンプレートからCOBOLファイルを生成中にHTML拡張言語でエラーが発生した場合，エラーメッセージの行情報がずれて出力されることがあります。

25.5.2　ccbl2002コマンドからのHTMLファイルの変換

ccbl2002コマンドにHTMLファイルを指定すると，HTMLファイルのCOBOLソースファイルへの変換，COBOLプログラムへのコンパイルが連携して実行されます。次にccbl2002コマンドでHTMLファイルをコンパイルする流れを示します。

図25-5　ccbl2002コマンドでHTMLファイルをコンパイルするときの流れ

規則

ccbl2002コマンドに指定されたファイルのうち，拡張子が.htm，および.htmlのファイルだけ，HTMLトランスレータの処理対象となります。

ccbl2002コマンドに指定されたコンパイラオプションは，HTMLトランスレータが生成したCOBOLソースファイルに対しても有効になります。

ccbl2002コマンドから連携してHTMLトランスレータが起動された場合，変換されたCOBOLソースファイルは，カレントディレクトリに出力されます。

注意事項

ccbl2002コマンドにHTMLファイルと同名のCOBOLソースファイルを指定してはいけません。

例えば，「ccbl2002 CGIMAIN.cbl CGIMAIN.htm -lcbl2kcgi」と指定すると，CGIMAIN.htmがCOBOLソースファイルに変換され，CGIMAIN.cblに上書きされます。

25.6　HTMLテンプレート機能

ここでは，HTMLテンプレートと，その使用方法について説明します。

＜この節の構成＞

25.6.1　HTMLテンプレート機能の概要

25.6.2　HTML拡張言語の文法

25.6.1　HTMLテンプレート機能の概要

HTMLテンプレートとは，Webページの原形となるHTMLファイルにHTML拡張言語を埋め込んだものです。HTML拡張言語を利用すると，動的なWebページが効率良く作成できます。

HTMLテンプレートで，動的なWebページが出力される例を次に示します。

図25-6　HTMLテンプレート機能で動的なWebページが出力される例

クライアント側のWebブラウザで「COBOL」という文字列を入力すると，サーバ側のCGIプログラムに送られる。

CGIプログラムは，受け取ったCGI情報を解析する。

CGIプログラムは，Webブラウザに出力するWebページのひな形となる，HTMLテンプレートを読み込む。

CGIプログラムは，読み込んだHTMLテンプレート中のHTML拡張言語「$%ITEM1%$」と入力された文字列「COBOL」を置換してWebページに出力する。

CGIプログラムから出力されたWebページが，Webブラウザに表示される。

25.6.2　HTML拡張言語の文法

HTMLテンプレートに埋め込むHTML拡張言語の文法について説明します。

＜この項の構成＞

(1)　$%変数名%$

(2)　$%REPEAT%$文

(3)　$%IF%$文

(4)　コメント

(5)　HTML拡張言語を使用するときの注意事項

(1)　$%変数名%$

形式

$%変数名%$

機能

COBOL主プログラムから渡されたCGIリストの先頭から変数名と一致する「名前」を検索し，「名前」に対応する「値」と置換します。

構文規則

変数名は，以下の条件を満たす必要があります。

先頭の文字が英字である

2文字目以降が，英数字（A～Z，a～z，0～9），ハイフン（－），下線（＿）のどれかで構成されている

長さが28バイト以下である

使用例

CGIリストの「名前」が"ITEM"の項目の「値」を表示する例です。なお，この使用例は，HTMLトランスレータを使用するCGIプログラムの作成例です。

HTMLテンプレート（CGISUB.htm）

<HTML>
<HEAD>
<TITLE>変数名</TITLE>
</HEAD>
<BODY>
Name : $%ITEM1%$
</BODY>
</HTML>

COBOL主プログラム（CGIMAIN.cbl）

      IDENTIFICATION DIVISION.
      PROGRAM-ID. CGIMAIN.
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 NAMELIST USAGE ADDRESS VALUE NULL.
      01 NAMEX PIC X(28).
      01 VALUEX.
        02 VALUE-LEN PIC S9(9) USAGE COMP.
        02 VALUE-STRING.
          03 PIC X OCCURS 1024 DEPENDING ON VALUE-LEN.
      PROCEDURE DIVISION.
     *> CGIリスト作成
          CALL 'CBLCREATELIST' USING NAMELIST.
          MOVE 'ITEM1' TO NAMEX.
          COMPUTE VALUE-LEN = FUNCTION LENGTH('COBOL2002').
          MOVE 'COBOL2002' TO VALUE-STRING.
          CALL 'CBLADDPAIR' USING NAMELIST NAMEX VALUEX.
     *> COBOL副プログラムの呼び出し
          CALL 'CGISUB' USING NAMELIST.
     *> CGIリスト削除
          CALL 'CBLDESTROYLIST' USING NAMELIST.
          STOP RUN.

Webブラウザの出力例

Name:COBOL2002

(2)　$%REPEAT%$文

形式

書き方1（$%REPEAT%$文の間に$%変数名%$が一つだけある場合）

$%REPEAT%$
 $%変数名%$
$%END-REPEAT%$

書き方2（$%REPEAT%$文の間に$%変数名%$が複数ある場合）

$%REPEAT%$
 $%変数名1%$
 $%変数名2%$
 :
$%END-REPEAT%$

機能

書き方1の機能

COBOL主プログラムから渡されたCGIリストの先頭から変数名と一致する「名前」を検索し，次の条件が満たされるまで「名前」に対応する「値」を繰り返し出力します。

CGIリストの終端まで検索する

検索中に，CBLENDREPEATサービスルーチンでCGIリストに追加した終端インジケータ（REPEAT.TERMINATOR）が見つかる

書き方2の機能

まず，COBOL主プログラムから渡されたCGIリストの先頭から変数名1と一致する「名前」を検索し，その「値」を出力します。次に，変数名1を発見した位置以降から変数名2と一致する「名前」を検索し，その「値」を出力します。同様の作業を繰り返し，最後の変数名の検索が終わったら，また，最初の変数名1から検索を続けます。

このような作業を，次の条件が満たされるまで繰り返します。

CGIリストの終端まで検索する

検索中に，CBLENDREPEATサービスルーチンでCGIリストに追加した終端インジケータ（REPEAT.TERMINATOR）が見つかる

（例）

CGIリストの内容

名前 | 値
ITEM1 | DATA01
ITEM2 | DATA02
ITEM1 | DATA11
ITEM2 | DATA12

HTMLテンプレート

 $%REPEAT%$
 $%ITEM1%$
 $%ITEM2%$
 $%END-REPEAT%$

表示される内容

 DATA01
 DATA02
 DATA11
 DATA12

構文規則

変数名は，以下の条件を満たす必要があります。

先頭の文字が英字である

2文字目以降が，英数字（A～Z，a～z，0～9），ハイフン（－），下線（＿）のどれかで構成されている

長さが28バイト以下である

$%REPEAT%$～$%END-REPEAT%$の間には，$%IF%$文を記述できません。

$%REPEAT%$文を入れ子にした場合，2階層までしか記述できません。

$%REPEAT%$～$%END-REPEAT%$の間に$%変数名%$がない場合，$%REPEAT%$文はCOBOL副プログラムに変換されません。

使用例1

CGIリストの「名前」が"CITY"または"COLOR"である項目の「値」をすべて表示する例です。なお，この使用例は，HTMLトランスレータを使用するCGIプログラムの作成例です。

HTMLテンプレート（CGISUB.htm）

<HTML>
<HEAD>
<TITLE>REPEAT</TITLE>
</HEAD>
<BODY>
$%REPEAT%$
$%CITY%$ : $%COLOR%$ <BR>
$%END-REPEAT%$
</BODY>
</HTML>

COBOL主プログラム（CGIMAIN.cbl）

      IDENTIFICATION DIVISION.
      PROGRAM-ID. CGIMAIN.
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 NAMELIST USAGE ADDRESS VALUE NULL.
      01 NAMEX PIC X(28).
      01 VALUEX.
        02 VALUE-LEN PIC S9(9) USAGE COMP.
        02 VALUE-STRING.
          03 PIC X OCCURS 1024 DEPENDING ON VALUE-LEN.
      PROCEDURE DIVISION.
     *> CGIリスト作成
          CALL 'CBLCREATELIST' USING NAMELIST.
          MOVE 'CITY' TO NAMEX.
          MOVE 5 TO VALUE-LEN.
          MOVE 'TOKYO' TO VALUE-STRING.
          CALL 'CBLADDPAIR' USING NAMELIST NAMEX VALUEX.
          MOVE 'COLOR' TO NAMEX.
          MOVE 4 TO VALUE-LEN.
          MOVE 'GRAY' TO VALUE-STRING.
          CALL 'CBLADDPAIR' USING NAMELIST NAMEX VALUEX.
          MOVE 'CITY' TO NAMEX.
          MOVE 7 TO VALUE-LEN.
          MOVE 'FUKUOKA' TO VALUE-STRING.
          CALL 'CBLADDPAIR' USING NAMELIST NAMEX VALUEX.
          MOVE 'COLOR' TO NAMEX.
          MOVE 3 TO VALUE-LEN.
          MOVE 'RED' TO VALUE-STRING.
          CALL 'CBLADDPAIR' USING NAMELIST NAMEX VALUEX.
     *> COBOL副プログラムの呼び出し
          CALL 'CGISUB' USING NAMELIST.
     *> CGIリスト削除
          CALL 'CBLDESTROYLIST' USING NAMELIST.
          STOP RUN.

Webブラウザの出力例

TOKYO:GRAY
FUKUOKA:RED

使用例2

<TEXTAREA>のように1,024バイト以上入力できるデータを$%REPEAT%$文で繰り返して表示する場合は，入力用HTMLテンプレートにREPEAT文の終端インジケータとなる「名前」と「値」（.REPEAT.TERMINATOR,1）を，非表示のINPUTメソッドとして追加します。

また，CGIリストに分割された「名前」と「値」の終端として（.REPEAT.TERMINATOR,1）が追加できます。次に，入力用HTMLテンプレートと出力用HTMLテンプレートの例を示します。

入力用HTMLテンプレート

<FORM NAME="MAIN" METHOD="POST" ACTION=
"/scripts/cgisample">
<INPUT TYPE="text" NAME="INPUTTEXT1" VALUE="DATA1"
MAXLENGTH="20"><BR>
<TEXTAREA COLS="60" ROWS="8" NAME="TEXTAREA1">
</TEXTAREA><BR>
<INPUT TYPE="hidden" NAME=".REPEAT.TERMINATOR"
VALUE="1">
<INPUT TYPE="text" NAME="INPUTTEXT1" VALUE="DATA2"
MAXLENGTH="20"><BR>
<TEXTAREA COLS="60" ROWS="8" NAME="TEXTAREA1">
</TEXTAREA><BR>
<INPUT TYPE="hidden" NAME=".REPEAT.TERMINATOR"
VALUE="1"><INPUT TYPE="submit" NAME="submit"
VALUE="送信" ><BR></FORM>  :

出力用HTMLテンプレート

 :
$%REPEAT%$
データ名：$%INPUTTEXT1%$ <BR>
データ内容：
$%REPEAT%$
$%TEXTAREA1%$
$%END-REPEAT%$
<BR>
$%END-REPEAT%$
 :

使用例3

分割された「値」を$%REPEAT%$文で連続した「値」として出力する（$%変数名%$の間に空白文字を出力しない）HTMLテンプレートの例を示します。ただし，連続した「値」を出力する場合を除いて，HTML拡張言語を並べて記述しないでください。

:$%REPEAT%$$%NAME1%$$%END-REPEAT%$ :

(3)　$%IF%$文

形式

書き方1（変数名とリテラル文字を比較する場合）

$%IF ( 変数名 演算子 'リテラル文字' )%$
 :
 {$%ELSE%$}
 :
$%END-IF%$

書き方2（変数名と変数名を比較する場合）

$%IF ( 変数名1 演算子 変数名2 )%$
 :
 {$%ELSE%$}
 :
$%END-IF%$

書き方3（変数名の有無を確認する場合）

$%IF ( 変数名1 演算子 NULL )%$
 :
 {$%ELSE%$}
 :
$%END-IF%$

機能

書き方1の機能

COBOL主プログラムから渡されたCGIリストの先頭から変数名と一致する「名前」を検索し，「名前」に対応する「値」と'リテラル文字'を演算子の条件で評価します。

書き方2の機能

COBOL主プログラムから渡されたCGIリストの先頭から，変数名1と一致する「名前」，および変数名2と一致する「名前」を検索し，それぞれの「名前」に対応する「値」同士を演算子の条件で評価します。

書き方3の機能

COBOL主プログラムから渡されたCGIリスト中に，変数名1と一致する「名前」があるかどうかを演算子の条件で評価します。

例えば，「$%IF( 変数名1 = NULL )%$」は，変数名1に該当する名前がCGIリスト中にないことを意味します。CGIリスト中に変数名があるかどうかわからない場合は，この書き方3を使って変数名があるかどうかを確認してから，CGIリストを参照するようにしてください。NULLを比較する演算子は"="または"!="でなければなりません。

構文規則

変数名は，次の条件を満たす必要があります。

先頭の文字が英字である

2文字目以降が，英数字（A～Z，a～z，0～9），ハイフン（－），下線（＿）のどれかで構成されている

長さが28バイト以下である

演算子は，次に示すものでなければなりません。

表25-3　$%IF%$文で使用できる演算子

演算子 | 意味
= | 等しい
!= | 等しくない
> | より大きい
>= | より大きいか，または等しい
< | より小さい
<= | より小さいか，または等しい

リテラル文字は，160バイト以下の文字列で指定します。

$%IF%$文を入れ子にした場合，3階層までしか記述できません。

$%IF%$文は，条件によって次のように制御されます。

$%ELSE%$は省略できます。

変数名と一致する「名前」に対応する「値」，およびリテラル文字は，英数字項目として扱われます。

（例）'100'と'99'を比較する場合

英数字項目の比較なので'99'の末尾に空白が補われる。したがって，比較結果は，

'100' ＜ '99 '

となる。

$%IF%$文による条件比較は，コンパイラオプションの影響を受けません。

注意事項

CGIリストが不定で，変数名があるかどうかわからない場合は，書き方3で変数があることを確認してから処理を実行することを推奨します。

$%IF%$文に指定した変数名に一致する「名前」がCGIリストにない場合は，変数名の値にはNULLが仮定されます。

使用例

CGIリスト中にある「名前」が"ITEM"の項目の「値」と，リテラル文字'VALUE-X'を比較し，結果を表示する例です。なお，この使用例は，HTMLトランスレータを使用するCGIプログラムの作成例です。

HTMLテンプレート（CGISUB.htm）

Content-type: text/HTML

<HTML>
<HEAD>
<TITLE>IF ELSE END-IF</TITLE>
</HEAD>
<BODY>
$%IF ( ITEM = 'VALUE-X' )%$
 ITEM IS 'VALUE-X'. <BR>
$%ELSE%$
 NOT FOUND 'VALUE-X'. <BR>
$%END-IF%$
</BODY>
</HTML>

COBOL主プログラム（CGIMAIN.cbl）

      IDENTIFICATION DIVISION.
      PROGRAM-ID. CGIMAIN.
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 NAMELIST USAGE ADDRESS VALUE NULL.
      01 NAMEX PIC X(28).
      01 VALUEX.
        02 VALUE-LEN PIC S9(9) USAGE COMP.
        02 VALUE-STRING.
          03 PIC X OCCURS 1024 DEPENDING ON VALUE-LEN.
      PROCEDURE DIVISION.
     *> CGIリスト作成
          CALL 'CBLCREATELIST' USING NAMELIST.
          MOVE 'ITEM' TO NAMEX.
          MOVE 7 TO VALUE-LEN.
          MOVE 'VALUE-X' TO VALUE-STRING.
          CALL 'CBLADDPAIR' USING NAMELIST NAMEX VALUEX.
     *> COBOL副プログラムの呼び出し
          CALL 'CGISUB' USING NAMELIST.
     *> CGIリスト削除
          CALL 'CBLDESTROYLIST' USING NAMELIST.
          STOP RUN.

Webブラウザの出力例

ITEM IS 'VALUE-X'

(4)　コメント

形式

$%-- コメント --%$

機能

HTMLテンプレートにコメントを記述します。"$%--"，"--%$"で囲まれた部分は，HTMLトランスレータで生成されるCOBOL副プログラムに展開されません。

構文規則

$%--：コメントの始まり

--%$：コメントの終わり

使用例

コメントの使用例です。

HTMLテンプレート（CGISUB.htm）

Content-type: text/HTML
<HTML>
<HEAD>
<TITLE>COMMENT</TITLE>
</HEAD>
<BODY>
Webページに出力される
<!-- Webページに出力されるが表示されない -->
$%-- Webページに出力されないコメント --%$
</BODY>
</HTML>

COBOL主プログラム（CGIMAIN.cbl）

      IDENTIFICATION DIVISION.
      PROGRAM-ID. CGIMAIN.
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      PROCEDURE DIVISION.
     *> COBOL副プログラムの呼び出し
          CALL 'CGISUB'.
          STOP RUN.

Webブラウザの出力例

Webページに出力される

Webブラウザに表示されたWebページの内容

<HTML>
<HEAD>
<TITLE>COMMENT</TITLE>
</HEAD>
<BODY>
Webページに出力される
<!-- Webページに出力されるが表示されない -->
</BODY>
</HTML>

(5)　HTML拡張言語を使用するときの注意事項

HTML拡張言語の予約語は，英大文字で記述してください。

HTML拡張言語の変数名と文は，1行に記述する必要があります。

25.7　CGIプログラムの作成を支援するサービスルーチン

ここでは，CGIプログラム作成支援機能が提供するサービスルーチンについて説明します。

＜この節の構成＞

25.7.1　サービスルーチンの一覧

25.7.2　サービスルーチンの説明

25.7.3　サービスルーチンに関する注意事項

25.7.1　サービスルーチンの一覧

CGIプログラムの作成を支援するためにCOBOL2002が用意しているサービスルーチンの種類を，次に示します。

表25-4　サービスルーチンの種類

項番 | サービスルーチン | 機能
1 | CBLHTMLBEGIN | HTMLの先頭部分を出力する。
2 | CBLHTMLEND | HTMLの終端部分を出力する。
3 | CBLDISPLAYTEXT | テキスト文字列を出力する。
4 | CBLCONVERTTEXT | テキスト文字列を実体参照形式に変換し，出力する。
5 | CBLPRINTENV | CGI環境変数の値をHTML形式で出力する。
6 | CBLGETENV | 環境変数の値を取得する。
7 | CBLCGIINIT | 受け取ったフォーム情報からCGIリストを作成する。
8 | CBLCREATELIST | CGIリストを新たに作成する。
9 | CBLDESTROYLIST | CGIリストを削除し，領域を解放する。
10 | CBLADDPAIR | CGIリストの最後に「名前」と「値」の対を追加する。
11 | CBLDELETEPAIR | CGIリストの現在のポイント位置の「名前」と「値」の対を削除する。
12 | CBLFINDPAIR | CGIリストの先頭ポイント位置から「名前」で検索し，「値」を取得する。
13 | CBLFINDNEXTPAIR | CGIリストの，次のポイント位置から「名前」をキーにして検索し，「値」を取得する。
14 | CBLGETPAIR | CGIリストの現在のポイント位置から「名前」と「値」の対を取得する。
15 | CBLGETPAIRNEXT | CGIリストの現在のポイント位置から「名前」と「値」の対を取得し，ポイント位置を進める。
16 | CBLLISTCOUNT | CGIリストから「名前」と「値」の対の数を取得する。
17 | CBLENDREPEAT | CGIリストにHTML拡張言語で使用する終端インジケータを追加する。
18 | CBLFILLTEMPLATE | HTMLテンプレートをインタプリットし，動的なWebページを出力する。
19 | CBLPRINTLIST | CGIリストの内容をHTML形式で出力する。
20 | CBLSENDERROR | エラーメッセージをHTML形式で出力する。
21 | CBLCGITRACE | CGIプログラムの作成を支援するサービスルーチンのトレース情報をファイルに出力する。

なお，各サービスルーチンの戻り値は，ほかのサービスルーチンと同様にRETURN-CODE特殊レジスタで参照できます。詳細は，「29.2　戻り値の使い方」を参照してください。

25.7.2　サービスルーチンの説明

＜この項の構成＞

(1)　CBLHTMLBEGIN

(2)　CBLHTMLEND

(3)　CBLDISPLAYTEXT

(4)　CBLCONVERTTEXT

(5)　CBLPRINTENV

(6)　CBLGETENV

(7)　CBLCGIINIT

(8)　CBLCREATELIST

(9)　CBLDESTROYLIST

(10)　CBLADDPAIR

(11)　CBLDELETEPAIR

(12)　CBLFINDPAIR

(13)　CBLFINDNEXTPAIR

(14)　CBLGETPAIR

(15)　CBLGETPAIRNEXT

(16)　CBLLISTCOUNT

(17)　CBLENDREPEAT

(18)　CBLFILLTEMPLATE

(19)　CBLPRINTLIST

(20)　CBLSENDERROR

(21)　CBLCGITRACE

(1)　CBLHTMLBEGIN

HTMLの先頭部分を出力するサービスルーチンです。CBLHTMLBEGINサービスルーチンが出力する内容を，次に示します。

<HTML>
<HEAD>
<TITLE> 引数1 </TITLE>
</HEAD>
<BODY>

形式

CALL 'CBLHTMLBEGIN' USING 引数1

引数

引数1には，Webブラウザのタイトルバーに表示する文字列を，128バイトの英数字項目で指定します。

戻り値

0：正常終了した場合

-1：エラーが発生した場合（標準出力に出力できない場合）

規則

HTMLテンプレートを使用する場合，CBLFILLTEMPLATEサービスルーチンやHTMLトランスレータによってHTMLの先頭部分が自動生成されるので，CBLHTMLBEGINサービスルーチンは使用しないでください。

Webブラウザのタイトルバーに表示される文字数は，使用するWebブラウザの種類によって異なります。また，Webブラウザによっては，タイトルバーに表示する文字列の中に連続した空白がある場合，一つの空白に置き換えて出力するものもあります。

使用例

      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 TITLE-NAME PIC X(128).
      PROCEDURE DIVISION.
          MOVE 'This my test title' TO TITLE-NAME.
          CALL 'CBLHTMLBEGIN' USING TITLE-NAME.
          CALL 'CBLHTMLEND'.

(2)　CBLHTMLEND

HTMLの終端部分を出力するサービスルーチンです。CBLHTMLENDサービスルーチンが出力する内容を，次に示します。

</BODY>
</HTML>

形式

CALL 'CBLHTMLEND'

引数

なし。

戻り値

0：正常終了した場合

-1：エラーが発生した場合（標準出力に出力できない場合）

規則

HTMLテンプレートを使用する場合，CBLFILLTEMPLATEサービスルーチンやHTMLトランスレータによってHTMLの先頭部分が自動生成されるので，CBLHTMLENDサービスルーチンは使用しないでください。

使用例

「(1)　CBLHTMLBEGIN」の使用例を参照してください。

(3)　CBLDISPLAYTEXT

引数に指定された文字列を出力するサービスルーチンです。

形式

CALL 'CBLDISPLAYTEXT' USING 引数1

引数

引数1には，次に示すインタフェース領域の名前を指定します。

表25-5　CBLDISPLAYTEXTサービスルーチンのインタフェース領域

記述形式
内容

01 データ名1.

CALL文のUSINGで指定するインタフェース領域の名前。

 02 データ名2 PIC S9(9)
                USAGE COMP.

出力する文字列の長さを4バイトの2進項目で指定する。

 02 データ名3.
   03 PIC X OCCURS 1024
        DEPENDING ON データ名2.

出力する文字列を可変長英数字項目で指定する。最大1,024バイトまで指定できる。

戻り値

0：正常終了した場合

-1：エラーが発生した場合（標準出力に出力できない場合）

規則

CBLDISPLAYTEXTサービスルーチンが出力する文字列の終端には，改行文字("¥n")が追加されません。

使用例

      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 NAMEX.
        02 NAME-LEN PIC S9(9) USAGE COMP.
        02 NAME-STRING.
          03 PIC X OCCURS 1024 DEPENDING ON NAME-LEN.
      PROCEDURE DIVISION.
          COMPUTE NAME-LEN = FUNCTION LENGTH('COBOL').
          MOVE 'COBOL' TO NAME-STRING.
          CALL 'CBLDISPLAYTEXT' USING NAMEX.

(4)　CBLCONVERTTEXT

引数に指定した文字列を，実体参照の形式に変換して出力するサービスルーチンです。

実体参照とは，HTML言語で予約されているため表示できない文字を，別の文字列を使って表す記法です。例えば，HTML言語では「＜」「＞」の文字が予約されているため，実体参照ではこれを「&#60;」「&#62;」と表します。

形式

CALL 'CBLCONVERTTEXT' USING 引数1

引数

引数1には，次に示すインタフェース領域の名前を指定します。

表25-6　CBLCONVERTTEXTサービスルーチンのインタフェース領域

記述形式
内容

01 データ名1.

CALL文のUSINGで指定するインタフェース領域の名前。

 02 データ名2 PIC S9(9)
                USAGE COMP.

変換して出力する文字列の長さを4バイトの2進項目で指定する。

 02 データ名3.
   03 PIC X OCCURS 1024
        DEPENDING ON データ名2.

変換して出力する文字列を可変長英数字項目で指定する。
最大1,024バイトまで指定できる。

戻り値

0：正常終了した場合

-1：エラーが発生した場合（標準出力に出力できない場合）

規則

日本語などの多バイト文字は，CBLCONVERTTEXTサービスルーチンで実体参照文字に変換されません。詳細については，以降の注意事項を参照してください。

使用例

      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 NAMEX.
        02 NAME-LEN PIC S9(9) USAGE COMP.
        02 NAME-STRING.
          03 PIC X OCCURS 1024 DEPENDING ON NAME-LEN.
      01 TEXT-STR PIC X(17) VALUE 'SHOW AN <OPTION>.'.
      PROCEDURE DIVISION.
          :
          COMPUTE NAME-LEN = FUNCTION  LENGTH (TEXT-STR).

          MOVE TEXT-STR TO NAME-STRING.
          CALL 'CBLCONVERTTEXT' USING NAMEX.

HTMLの出力例

&#83;&#72;&#79;&#87;&#32;&#65;&#78;&#32;&#60;&#79;
&#80;&#84;&#73;&#79;&#78;&#62;&#46;

実体参照での表した文字の一覧

実体参照での表記の一覧を，次に示します。

注意事項

日本語などの多バイト文字は，CBLCONVERTTEXTで変換されません。また，環境変数LANGに指定した値によって次の表のようになります。

環境変数LANGの設定値によって有効となる
文字コード※
変換しない文字

シフトJISコード
シフトJISコードは変換しない。

日本語EUCコード
日本語EUCコードは変換しない。

上記以外
「実体参照での表記の一覧」に記載されている文字以外は無視する。

注※

環境変数LANGの設定値と文字コードについては，「付録A　COBOLで使用する文字集合」を参照してください。

「実体参照での表記の一覧」に記載されている文字，および環境変数LANGの指定によって変換されない文字以外の文字を使用できません。

(5)　CBLPRINTENV

CGI環境変数の名前と現在の値を，HTML形式で出力するサービスルーチンです。

出力される環境変数の種類については，「25.4　CGI環境変数へのアクセス」を参照してください。

形式

CALL 'CBLPRINTENV'

引数

なし。

戻り値

0：正常終了した場合

-1：エラーが発生した場合（標準出力に出力できない場合）

規則

環境変数に値が設定されていない場合，「（NULL）」が出力されます。

使用例

      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 INPUTLIST USAGE ADDRESS VALUE NULL.
      PROCEDURE DIVISION.
          CALL 'CBLCGIINIT' USING INPUTLIST.
          CALL 'CBLPRINTENV'.
          :
          CALL 'CBLDESTROYLIST' USING INPUTLIST.

HTMLの出力例

<HTML>
  <BODY>
<H3> Environment variable list: </H3>
AUTH_TYPE= (NULL) <BR>
CONTENT_LENGTH= 0 <BR>
CONTENT_TYPE= (NULL) <BR>
GATEWAY_INTERFACE= CGI/1.1 <BR>
:
:
  </BODY>
</HTML>

(6)　CBLGETENV

環境変数の値を取得するサービスルーチンです。

形式

CALL 'CBLGETENV' USING 引数1 引数2

引数

引数1には，環境変数名を28バイトの英数字項目で指定します。

引数2には，次に示すインタフェース領域の名前を指定します。

表25-7　CBLGETENVサービスルーチンのインタフェース領域

記述形式
内容

01 データ名1.

CALL文のUSINGで指定するインタフェース領域の名前。

 02 データ名2 PIC S9(9)
                USAGE COMP.

取得した環境変数の値（文字列）の長さを格納する領域で，4バイトの2進項目で指定する。

 02 データ名3.
   03 PIC X OCCURS 1024
        DEPENDING ON データ名2.

取得した環境変数の値を格納する領域で，最大1,024バイトの可変長集団項目を指定する。

戻り値

0：正常終了した場合

-1：エラーが発生した場合（該当する環境変数が見つからない場合）

1：環境変数の値が1,024バイトを超えている場合

規則

環境変数に値が設定されていない場合，引数2のデータ名2には0が，データ名3にはNULL文字が返されます。また，RETURN-CODE特殊レジスタの値は0になります。

指定した環境変数名の末尾が空白文字の場合，環境変数の内容は取得されません。

使用例

      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 NAMEX PIC X(28) VALUE 'REMOTE_HOST'.
      01 VALUEX.
        02 VALUE-LEN PIC S9(9) USAGE COMP.
        02 VALUE-STRING.
          03 PIC X OCCURS 1024 DEPENDING ON VALUE-LEN.
      PROCEDURE DIVISION.
          CALL 'CBLGETENV' USING NAMEX VALUEX.
          IF RETURN-CODE = 0 THEN
            DISPLAY 'THE CLIENT MACHINE IS ' VALUE-STRING
          ELSE
            DISPLAY 'ERROR'
          END-IF.

(7)　CBLCGIINIT

フォーム情報からCGIリストを作成し，リストのアドレスを取得するサービスルーチンです。フォーム情報がPOSTメソッド（標準出力経由），GETメソッド（環境変数経由）のどちらから転送されても，CGIリストを作成できます。

また，-TDInfオプションを指定してコンパイルしたCGIプログラムでCBLCGIINITサービスルーチンが呼び出されると，CGI用環境変数の値をCGI環境ファイル（実行可能ファイル名.env）として，CGIプログラムと同じディレクトリに出力します。

形式

CALL 'CBLCGIINIT' USING 引数1

引数

引数1には，作成したCGIリストのアドレスを格納する領域で，アドレスデータ項目を指定します。

戻り値

1：環境変数CBLCGIINITSIZEに不当な値を設定した場合

0：正常終了した場合

-1：エラーが発生した場合

-2：POST，GET以外をメソッドに指定した場合

-3：フォーム情報の文字列長が制限値（デフォルトは64キロバイト），または環境変数CBLCGIINITSIZEで指定した値を超えた場合

変換規則

フォーム情報から引き渡される「値」の長さが1,024バイトを超える場合，1,024バイト（または1,023バイト）で分割した「値」をCGIリストに追加します。

環境変数LANGの設定値によって有効となる
文字コード※
「値」が分割される位置

シフトJISコード
「値」の文字列は，シフトJISコードとして1,024バイトをチェックします。1,024バイトが2バイトコードの先頭バイトの場合は，1,023バイトで文字列が分割されます。それ以外の場合は，1,024バイトに文字列が分割されます。

日本語EUCコード
「値」の文字列は，日本語EUCコードとして1,024バイトをチェックします。1,024バイトが2バイトコードの先頭バイトの場合は，1,023バイトで文字列が分割されます。それ以外の場合は1,024バイトに文字列が分割されます。

上記以外
無条件に「値」を1,024バイトで分割してCGIリストに追加します。

注※

環境変数LANGの設定値と文字コードについては，「付録A　COBOLで使用する文字集合」を参照してください。

名前 = "NAME1"と値="(3,000バイト)"を受け取って，CGIリストに追加する例を示します。

名前 | 値
NAME1 | 1,024バイト
NAME1 | 1,024バイト
NAME1 | 952バイト

受け取れるフォーム情報の「名前」と「値」のデコードされていない最大の文字列長は，デフォルトで64キロバイトです。64キロバイトを超える文字列長の場合は，CBLCGIINITサービスルーチンで-3が返され，処理が中断されます。
最大文字列長を変更する場合は，環境変数CBLCGIINITSIZEを使用します。

CBLCGIINITSIZE=最大文字列長

1～2,000,000（単位：キロバイト）以外の値を指定した場合は64が仮定されます。この場合，CBLCGIINITサービスルーチンの戻り値は1となります。

フォーム情報の「名前」や「値」に日本語などの多バイト文字が含まれている場合，CGIリストの「名前」「値」に格納されるデータは，CGIクライアントのWebブラウザで入力された文字コードに依存します。

一般規則

CBLCGIINITサービスルーチンは，2回以上呼び出さないでください。

CGIプログラムでは，ほかのサービスルーチンを呼び出す前にCBLCGIINITサービスルーチンを呼び出してください。ただし，CBLCGITRACEサービスルーチンは除きます。

CBLCGIINITサービスルーチンでCGIリストを作成した場合，CGIサブルーチンの処理を終了する時に，CBLDESTROYLISTサービスルーチンを呼び出してCGIリストを削除する必要があります。

CBLCGIINITサービスルーチンでCGIリストを作成した場合，作成した直後のCGIリストのポイント位置は，不定となります。CGIリストのポイント位置は，CBLFINDPAIRサービスルーチンで位置づけてください。

マルチスレッド対応COBOLプログラムでCBLCGIINITサービスルーチンを呼び出した場合，CGI環境ファイルの出力内容は保証しません。

CBLCGIINITサービスルーチンが呼び出されたとき，CGIプログラムの実行を支援するサービスルーチンですでにCGIヘッダが出力されていなければ，"Content-type: text/HTML¥n¥n"が出力されます。

CGI環境ファイルは，REMOTE_ADDR，REMOTE_HOST環境変数の値がある場合，またはCGI環境ファイルがない場合に出力されます。

CGIリストのアドレスがNULL以外の場合，CBLCGIINITサービスルーチンの戻り値は-1となります。

使用例

      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 INPUTLIST USAGE ADDRESS VALUE NULL.
      PROCEDURE DIVISION.
          CALL 'CBLCGIINIT' USING INPUTLIST.
           :
          CALL 'CBLDESTROYLIST' USING INPUTLIST.

(8)　CBLCREATELIST

新たにCGIリストを作成し，リストのアドレスを取得するサービスルーチンです。

形式

CALL 'CBLCREATELIST' USING 引数1

引数

引数1は，作成したCGIリストのアドレスを格納する領域で，アドレスデータ項目を指定します。

戻り値

0：正常終了した場合

-1：エラーが発生した場合（領域確保に失敗した場合など）

規則

CBLCREATELISTサービスルーチンでCGIリストを作成した場合，CGIサブルーチンの処理を終了する時に，CBLDESTROYLISTサービスルーチンを呼び出してCGIリストを削除する必要があります。

CBLCREATELISTサービスルーチンでCGIリストを作成した場合，作成した直後のCGIリストのポイント位置は，不定となります。

CGIリストのアドレスがNULL以外の場合，CBLCREATELISTサービスルーチンの戻り値は-1となります。

使用例

      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 NAMELIST USAGE ADDRESS VALUE NULL.
      PROCEDURE DIVISION.
          CALL 'CBLCREATELIST' USING NAMELIST.
           :
          CALL 'CBLDESTROYLIST' USING NAMELIST.

(9)　CBLDESTROYLIST

CGIリストを削除して，領域を解放するサービスルーチンです。

形式

CALL 'CBLDESTROYLIST' USING 引数1

引数

引数1には，削除するCGIリストのアドレスを，アドレスデータ項目で指定します。

戻り値

0：正常終了した場合

-1：エラーが発生した場合（領域の解放に失敗した場合など）

規則

CGIリストを削除したあとの，CGIリストのポインタの内容は保証しません。

使用例

「(7)　CBLCGIINIT」の使用例を参照してください。

(10)　CBLADDPAIR

指定したCGIリストの最後に，「名前」と「値」の対を追加するサービスルーチンです。

形式

CALL 'CBLADDPAIR' USING 引数1 引数2 引数3

引数

引数1には，CBLCGIINITやCBLCREATELISTで作成したCGIリストのアドレスを，アドレスデータ項目で指定します。

引数2には，CGIリストに追加する「名前」を，28バイトの英数字項目で指定します。

引数3には，次に示すインタフェース領域の名前を指定します。

表25-8　CBLADDPAIRサービスルーチンのインタフェース領域

記述形式
内容

01 データ名1.

CALL文のUSINGで指定するインタフェース領域の名前。

 02 データ名2 PIC S9(9)
                USAGE COMP.

CGIリストに追加する「値」の長さを格納する領域で，4バイトの2進項目で指定する。

 02 データ名3.
   03 PIC X OCCURS 1024
        DEPENDING ON データ名2.

CGIリストに追加する「値」を格納する領域で，最大1,024バイトの可変長集団項目を指定する。

戻り値

0：正常終了した場合

-1：エラーが発生した場合（追加時，領域確保に失敗した場合など）

規則

「名前」と「値」を追加した場合，ポイント位置は変更されません。

使用例

      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 NAMELIST USAGE ADDRESS VALUE NULL.
      01 VALUEX.
        02 VALUE-LEN PIC S9(9) USAGE COMP.
        02 VALUE-STRING.
          03 PIC X OCCURS 1024 DEPENDING ON VALUE-LEN.
      01 NAMEX       PIC X(28) VALUE 'Hitachi'.
      01 NAMEX-VALUE PIC X(9) VALUE 'COBOL2002'.
      PROCEDURE DIVISION.
          CALL 'CBLCREATELIST' USING NAMELIST.
          COMPUTE VALUE-LEN = FUNCTION LENGTH(NAMEX-VALUE).
          MOVE NAMEX-VALUE TO VALUE-STRING.
          CALL 'CBLADDPAIR' USING NAMELIST NAMEX VALUEX.
          CALL 'CBLDESTROYLIST' USING NAMELIST.

(11)　CBLDELETEPAIR

指定したCGIリストの現在のポイント位置から，「名前」と「値」の対を削除するサービスルーチンです。

形式

CALL 'CBLDELETEPAIR' USING 引数1

引数

引数1には，CBLCGIINITやCBLCREATELISTで作成したCGIリストのアドレスを，アドレスデータ項目で指定します。

戻り値

0：正常終了した場合

-1：エラーが発生した場合

1：CGIリストが空の場合

使用例

      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 INPUTLIST USAGE ADDRESS VALUE NULL.
      01 NAMEX PIC X(28) VALUE 'COBOL'.
      01 VALUEX.
        02 VALUE-LEN PIC S9(9) USAGE COMP.
        02 VALUE-STRING.
          03 PIC X OCCURS 1024 DEPENDING ON VALUE-LEN.
      PROCEDURE DIVISION.
          CALL 'CBLCGIINIT' USING INPUTLIST.
          CALL 'CBLFINDPAIR' USING INPUTLIST  
                NAMEX  VALUEX.
          CALL 'CBLDELETEPAIR' USING INPUTLIST.
          CALL 'CBLDESTROYLIST' USING INPUTLIST.

規則

「名前」と「値」を削除した場合，ポイント位置を次に移動します。それ以外の場合，ポイント位置はNULLになります。

(12)　CBLFINDPAIR

指定したCGIリストの先頭のポイント位置から「名前」を検索し，「名前」に対応する「値」を取得するサービスルーチンです。また，一致した「名前」にポイント位置を移動します。

形式

CALL 'CBLFINDPAIR' USING 引数1 引数2 引数3

引数

引数1には，CBLCGIINITやCBLCREATELISTで作成したCGIリストのアドレスを，アドレスデータ項目で指定します。

引数2には，検索する「名前」を，28バイトの英数字項目で指定します。

引数3には，次に示すインタフェース領域の名前を指定します。

表25-9　CBLFINDPAIRサービスルーチンのインタフェース領域

記述形式
内容

01 データ名1.

CALL文のUSINGで指定するインタフェース領域の名前。

 02 データ名2  PIC S9(9)
                 USAGE COMP.

検索した「名前」に対応する「値」の長さが格納される領域。4バイトの2進項目を指定する。

 02 データ名3.
   03 PIC X OCCURS 1024
        DEPENDING ON データ名2.

検索した「名前」に対応する「値」が格納される領域。
最大1,024バイトの可変長集団項目を指定する。

戻り値

0：正常終了した場合

-1：エラーが発生した場合

1：検索した「名前」が見つからない場合，またはポイント位置が終端の場合

規則

検索した「名前」に対応する「値」がNULLの場合，引数3のデータ名2には0が出力されます。

検索した「名前」が見つからない場合，ポイント位置はNULLになります。

使用例

      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 INPUTLIST USAGE ADDRESS VALUE NULL.
      01 NAMEX PIC X(28) VALUE 'Hitachi'.
      01 VALUEX.
        02 VALUE-LEN PIC S9(9) USAGE COMP.
        02 VALUE-STRING.
          03 PIC X OCCURS 1024 DEPENDING ON VALUE-LEN.
      PROCEDURE DIVISION.
          CALL 'CBLCGIINIT' USING INPUTLIST.
          CALL 'CBLFINDPAIR' USING INPUTLIST NAMEX VALUEX.
          CALL 'CBLDISPLAYTEXT' USING VALUEX.
          CALL 'CBLDESTROYLIST' USING INPUTLIST.

(13)　CBLFINDNEXTPAIR

指定したCGIリストの，次のポイント位置から「名前」を検索し，「名前」に対応する「値」を取得するサービスルーチンです。また，一致した「名前」にポイント位置を移動します。

形式

CALL 'CBLFINDNEXTPAIR' USING 引数1 引数2 引数3

引数

引数1には，CBLCGIINITやCBLCREATELISTで作成したCGIリストのアドレスを，アドレスデータ項目で指定します。

引数2には，検索する「名前」を，28バイトの英数字項目で指定します。

引数3には，次に示すインタフェース領域の名前を指定します。

表25-10　CBLFINDNEXTPAIRサービスルーチンのインタフェース領域

記述形式
内容

01 データ名1.

CALL文のUSINGで指定するインタフェース領域の名前。

 02 データ名2 PIC S9(9)
                 USAGE COMP.

検索した「名前」に対応する「値」の長さが格納される領域。4バイトの2進項目を指定する。

 02 データ名3.
   03 PIC X OCCURS 1024
        DEPENDING ON データ名2.

検索した「名前」に対応する「値」が格納される領域。
最大1,024バイトの可変長集団項目を指定する。

戻り値

0：正常終了した場合

-1：エラーが発生した場合

1：検索した「名前」が見つからない場合，または終端インジケータ（.REPEAT.TERMINATOR,1）が見つかった場合

規則

検索した「名前」に対応する「値」がNULLの場合，引数3のデータ名2には0が出力されます。

検索した「名前」が見つからない場合，ポイント位置はNULLになります。

使用例

      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 INPUTLIST USAGE ADDRESS VALUE NULL.
      01 NAMEX PIC X(28) VALUE 'Hitachi'.
      01 VALUEX.
        02 VALUE-LEN PIC S9(9) USAGE COMP.
        02 VALUE-STRING.
          03 PIC X OCCURS 1024 DEPENDING ON VALUE-LEN.
      PROCEDURE DIVISION.
          CALL 'CBLCGIINIT' USING INPUTLIST.
          CALL 'CBLFINDPAIR'
                USING  INPUTLIST NAMEX VALUEX.
          CALL 'CBLDISPLAYTEXT' USING VALUEX.
          CALL 'CBLFINDNEXTPAIR'
                USING  INPUTLIST NAMEX VALUEX.
          CALL 'CBLDISPLAYTEXT' USING VALUEX.
          CALL 'CBLDESTROYLIST' USING INPUTLIST.

(14)　CBLGETPAIR

指定したCGIリストの現在のポイント位置から「名前」と「値」の対を取得するサービスルーチンです。ポイント位置は移動しません。

形式

CALL 'CBLGETPAIR' USING 引数1 引数2 引数3

引数

引数1には，CBLCGIINITやCBLCREATELISTで作成したCGIリストのアドレスを，アドレスデータ項目で指定します。

引数2には，「名前」を格納する領域を28バイトの英数字項目で指定します。

引数3には，次に示すインタフェース領域の名前を指定します。

表25-11　CBLGETPAIRサービスルーチンのインタフェース領域

記述形式
内容

01 データ名1.

CALL文のUSINGで指定するインタフェース領域の名前。

 02 データ名2 PIC S9(9)
                USAGE COMP.

「値」の長さが格納される領域。4バイトの2進項目を指定する。

 02 データ名3.
   03 PIC X OCCURS 1024
        DEPENDING ON データ名2.

「値」が格納される領域。最大1,024バイトの可変長集団項目を指定する。

戻り値

0：正常終了した場合

-1：エラーが発生した場合

1：現在のポイント位置がCGIリストの終端にあるため，「名前」および「値」が取得できない場合

規則

「名前」と「値」の取得時にエラーが発生した場合，ポイント位置はNULLになります。

使用例

      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 INPUTLIST USAGE ADDRESS VALUE NULL.
      01 NAMEX PIC X(28).
      01 VALUEX.
        02 VALUE-LEN PIC S9(9) USAGE COMP.
        02 VALUE-STRING.
          03 PIC X OCCURS 1024 DEPENDING ON VALUE-LEN.
      PROCEDURE DIVISION.
          CALL 'CBLCGIINIT' USING INPUTLIST.
          CALL 'CBLGETPAIR' USING INPUTLIST NAMEX VALUEX.
          DISPLAY 'NAME = ' NAMEX.
          CALL 'CBLDESTROYLIST' USING INPUTLIST.

(15)　CBLGETPAIRNEXT

指定したCGIリストの現在のポイント位置から「名前」と「値」の対を取得するサービスルーチンです。また，ポイント位置を次に移動します。

形式

CALL 'CBLGETPAIRNEXT' USING 引数1 引数2 引数3

引数

引数1には，CBLCGIINITやCBLCREATELISTで作成したCGIリストのアドレスを，アドレスデータ項目で指定します。

引数2には，「名前」を格納する領域を28バイトの英数字項目で指定します。

引数3には，次に示すインタフェース領域の名前を指定します。

表25-12　CBLGETPAIRNEXTサービスルーチンのインタフェース領域

記述形式
内容

01 データ名1.

CALL文のUSINGで指定するインタフェース領域の名前。

 02 データ名2 PIC S9(9)
                USAGE COMP.

「値」の長さが格納される領域。4バイトの2進項目を指定する。

 02 データ名3.
   03 PIC X OCCURS 1024
        DEPENDING ON データ名2.

「値」が格納される領域。最大1,024バイトの可変長集団項目を指定する。

戻り値

0：正常終了した場合

-1：エラーが発生した場合

（現在のポイント位置がCGIリストの終端にあった場合）

1：現在のポイント位置がCGIリストの終端にあるため，「名前」および「値」が取得できない場合

規則

「名前」と「値」の取得時にエラーが発生した場合，ポイント位置はNULLになります。

使用例

      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 INPUTLIST USAGE ADDRESS VALUE NULL.
      01 NAMEX PIC X(28).
      01 VALUEX.
        02 VALUE-LEN PIC S9(9) USAGE COMP.
        02 VALUE-STRING.
          03 PIC X OCCURS 1024 DEPENDING ON VALUE-LEN.
      PROCEDURE DIVISION.
          CALL 'CBLCGIINIT' USING INPUTLIST.
          CALL 'CBLGETPAIRNEXT'
                USING INPUTLIST NAMEX VALUEX.
          DISPLAY ' NAME = ' NAMEX.
          CALL 'CBLGETPAIRNEXT'
                USING INPUTLIST NAMEX VALUEX.
          DISPLAY ' NAME = ' NAMEX.
          CALL 'CBLDESTROYLIST' USING INPUTLIST.

(16)　CBLLISTCOUNT

指定したCGIリスト中の「名前」と「値」の対の数を取得するサービスルーチンです。

形式

CALL 'CBLLISTCOUNT' USING 引数1 引数2

引数

引数1には，CBLCGIINITやCBLCREATELISTで作成したCGIリストのアドレスを，アドレスデータ項目で指定します。

引数2には，CGIリスト中の「名前」と「値」の対の数を格納する領域を，4バイトの2進項目で指定します。

戻り値

0：正常終了した場合

-1：エラーが発生した場合

（不当なCGIアドレスを指定した場合など）

使用例

      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 INPUTLIST USAGE ADDRESS VALUE NULL.
      01 LIST-COUNT PIC S9(9) USAGE COMP.
      PROCEDURE DIVISION.
          CALL 'CBLCGIINIT' USING INPUTLIST.
          CALL 'CBLLISTCOUNT'
                USING INPUTLIST LIST-COUNT.
          IF RETURN-CODE = 0 THEN
            DISPLAY 'LIST COUNT : ' LIST-COUNT
          END-IF.
           :
          CALL 'CBLDESTROYLIST' USING INPUTLIST.

(17)　CBLENDREPEAT

CGIリストにHTML拡張言語のREPEATで終端を認識する終端インジケータを追加するサービスルーチンです。終端インジケータは，特殊な名前と値（.REPEAT.TERMINATOR，1）で構成されています。

このサービスルーチンは，CGIリストの途中で%REPEAT%文を打ち切りたい場合などに使用します。

形式

CALL 'CBLENDREPEAT' USING 引数1

引数

引数1には，CBLCGIINITやCBLCREATELISTで作成したCGIリストのアドレスを，アドレスデータ項目で指定します。

戻り値

0：正常終了した場合

-1：エラーが発生した場合

（追加時，メモリの領域確保に失敗した場合など）

使用例

      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 NAMELIST USAGE ADDRESS VALUE NULL.
       :
      PROCEDURE DIVISION.
          CALL 'CBLCREATELIST' USING NAMELIST.
          MOVE 'CITY' TO NAMEX.
          COMPUTE VALUE-LEN = FUNCTION LENGTH ('TOKYO').
          MOVE 'TOKYO' TO VALUE-STRING.
          CALL 'CBLADDPAIR' USING NAMELIST NAMEX VALUEX.
          CALL 'CBLENDREPEAT' USING NAMELIST.
          COMPUTE VALUE-LEN = FUNCTION LENGTH ('FUKUOKA').
          MOVE 'FUKUOKA' TO VALUE-STRING.
          CALL 'CBLADDPAIR' USING NAMELIST NAMEX VALUEX.
          CALL 'CBLENDREPEAT' USING NAMELIST.
           :
          CALL 'CBLDESTROYLIST' USING NAMELIST.

(18)　CBLFILLTEMPLATE

CBLFILLTEMPLATEサービスルーチンは，HTMLテンプレートをインタプリットするサービスルーチンです。また，HTMLテンプレートからあらかじめ生成した共用ライブラリファイルを，実行時に呼び出せます。HTMLテンプレートについては，「25.6　HTMLテンプレート機能」を参照してください。

形式

CALL 'CBLFILLTEMPLATE' USING 引数1 引数2

引数

引数1には，HTMLテンプレート名を，256バイトの英数字項目で指定します。

引数2には，HTMLテンプレートで使用するCGIリストのアドレスを，アドレスデータ項目で指定します。

戻り値

0：正常終了した場合

-1：エラーが発生した場合（標準出力に出力できない場合）

規則

引数1に指定するファイル名のパス指定には，次の3種類があります。

絶対パス名
（例：/usr/local/httpd/cgi-bin/filename）

環境変数PATH_TRANSLATEDの相対パス名
（例：/cgi-bin/filename）

CGIプログラムのあるディレクトリからの相対パス名
ファイル名だけ，またはファイルインジケータ（..）を使ったファイル名が，相対パス名として指定できます。（例：../filename）
ただし，エイリアス指定の仮想ディレクトリにあるファイルは，絶対パス名で指定してください。

引数1には，共用ライブラリファイル※1，HTMLファイル（.htm，または.html）※2，または拡張子なしのファイル名が指定できます。拡張子なしのファイル名を指定した場合，次の順序でファイルが検索されます。
1.　共用ライブラリファイル
2.　HTMLファイル（拡張子.htm）
3.　HTMLファイル（拡張子.html）

注※1

共用ライブラリファイルの拡張子は，次のとおりです。

HP-UX(IPF)，Solaris(SPARC)の場合：.so

AIX(32)の場合：.a

注※2

HTMLファイルの拡張子は，大文字と小文字は等価とみなされます。

引数1に指定したHTMLテンプレート名や共用ライブラリ名の末尾に空白文字があった場合，その空白はファイル名に含まれません。

呼び出す共用ライブラリプログラムの名称は，共用ライブラリファイル名と同じになります。引数1に指定する共用ライブラリファイル名に次のような文字列が含まれる場合，COBOLのプログラム名の変換規則に注意する必要があります。
　ハイフン(－)，#，¥，@，英小文字
変換規則の詳細は，マニュアル「COBOL2002　言語　標準仕様編　7.8.2 構文規則」を参照してください。

HTMLテンプレートをインタプリット中にHTML拡張言語でエラーが発生した場合，エラーメッセージの行情報がずれて出力されることがあります。

CBLFILLTEMPLATEサービスルーチンが呼び出されたとき，CGIプログラムの実行を支援するサービスルーチンですでにCGIヘッダが出力されていなければ，"Content-type: text/HTML"が出力されます。

HTMLテンプレートのインタプリット時には，コンパイラオプションの指定は無効になります。

使用例

      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 INPUTLIST USAGE ADDRESS VALUE NULL.
      01 TMPLT-NAME PIC X(256) VALUE 'HITACHI.htm'.
      PROCEDURE DIVISION.
          CALL 'CBLCGIINIT' USING INPUTLIST.
          CALL 'CBLFILLTEMPLATE' USING TMPLT-NAME
                INPUTLIST.
           :
          CALL 'CBLDESTROYLIST' USING INPUTLIST.

(19)　CBLPRINTLIST

指定したCGIリストの内容を，HTML形式で出力するサービスルーチンです。

形式

CALL 'CBLPRINTLIST' USING 引数1

引数

引数1には，CBLCGIINITやCBLCREATELISTで作成したCGIリストのアドレスを，アドレスデータ項目で指定します。

戻り値

0：正常終了した場合

-1：エラーが発生した場合

（標準出力に出力できない場合）

規則

CGIリストに「名前」と「値」が格納されていない場合，「名前」と「値」は出力されません。

使用例

      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 INPUTLIST USAGE ADDRESS VALUE NULL.
      PROCEDURE DIVISION.
          CALL 'CBLCGIINIT' USING INPUTLIST.
          CALL 'CBLPRINTLIST' USING INPUTLIST.
           :
          CALL 'CBLDESTROYLIST' USING INPUTLIST.

HTMLの出力例

<HTML>
  <BODY>
<H3> CGI list: </H3>
<DL>
<DT> name1
<DD> option1
<DT> name2
<DD> option2
</DL>
   </BODY>
</HTML>

(20)　CBLSENDERROR

HTML形式でエラーメッセージを出力するサービスルーチンです。

形式

CALL 'CBLSENDERROR' USING 引数1

引数

引数1には，出力するエラーメッセージが格納されている領域を，256バイトの英数字項目で指定します。

戻り値

0：正常終了した場合

-1：エラーが発生した場合

（標準出力に出力できない場合）

使用例

      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 ERROR-MESSAGE PIC X(256) VALUE 'ERROR STRING.'.
      PROCEDURE DIVISION.
           :
          CALL 'CBLSENDERROR' USING ERROR-MESSAGE.

HTMLの出力例

<HTML>
  <HEAD>
    <TITLE>Error Message </TITLE>
  </HEAD>
  <BODY>
<BR>
<H2>!! Error Message from COBOL CGI program !!</H2>
<H3> ERROR STRING. </H3>
  </BODY>
</HTML>

(21)　CBLCGITRACE

CGIプログラムの作成を支援するサービスルーチンの呼び出しをトレースするサービスルーチンです。また，CGI環境変数の値も取得します。トレース情報や環境変数の情報は，トレースファイル（実行可能ファイル名.trc）に出力されます。

トレース情報には，呼び出したサービスルーチンの名称と引数情報が出力されます。例えば，CBLCGIINITでは，CGIリストのアドレスが引数情報になります。

形式

CALL 'CBLCGITRACE'

引数

なし。

戻り値

なし。

規則

CBLCGITRACEサービスルーチンは，CBLCGIINITサービスルーチンよりも先に呼び出してください。

CBLCGITRACEサービスルーチンが呼び出されると，トレースファイルは初期化されます。

CBLCGIINITサービスルーチンが呼び出されると，CGI環境変数の値をトレースファイルに出力します。

マルチスレッド対応COBOLプログラムでCBLCGITRACEサービスルーチンを呼び出した場合，トレースファイルの出力内容は保証しません。

次に示すサービスルーチンは，CBLCGITRACEサービスルーチンでトレースされません。
CBLDISPLAYTEXT
CBLPRINTENV
CBLPRINTLIST
CBLSENDERROR

CBLCGITRACEサービスルーチンが呼び出されたあとにCBLCGIINITサービスルーチンが呼び出されると，CGI環境変数の値がトレースファイルに出力されます。

出力されるトレース情報

各サービスルーチンを呼び出したときに出力されるトレース情報を，次に示します。

サービスルーチン
出力されるトレース情報

CBLHTMLBEGIN
<! CBLHTMLBEGIN(); Title = "文字列" >

CBLHTMLEND
<! CBLHTMLEND(); >

CBLDISPLAYTEXT
出力されない。

CBLCONVERTTEXT
<! CBLCONVERTTEXT(); input string = "文字列" >

CBLPRINTENV
出力されない。

CBLGETENV
<! CBLGETENV(); name = "環境変数名", value = "環境変数の値" >

CBLCGIINIT

CBLCGIINITを初めて呼び出した場合（CGIリストのアドレスがNULLの場合）

<! CBLCGIINIT(); list = "CGIリストのアドレス" >

取得済みCGIリストのアドレスを指定した場合（CGIリストのアドレスがNULL以外の場合）

<! CBLCGIINIT(); list = second call (error) >

CBLCREATELIST

正常終了した場合

<! CBLCREATELIST(); list = " CGIリストのアドレス" >

取得済みCGIリストのアドレスを指定した場合（CGIリストのアドレスがNULL以外の場合）

<! CBLCREATELIST(); list = second call (error) >

CBLDESTROYLIST
<! CBLDESTROYLIST(); list = " CGIリストのアドレス" >

CBLADDPAIR
<! CBLADDPAIR(); list = " CGIリストのアドレス", name = "名前", value = "値" >

CBLDELETEPAIR
<! CBLDELETEPAIR(); list = " CGIリストのアドレス" >

CBLFINDPAIR

正常終了した場合

<! CBLFINDPAIR(); list = " CGIリストのアドレス", name = "名前", value = "値" >

検索した名前が見つからない場合

<! CBLFINDPAIR(); list = " CGIリストのアドレス" At end >

CBLFINDNEXTPAIR

正常終了した場合

<! CBLFINDNEXTPAIR(); list = " CGIリストのアドレス", name = "名前", value = "値" >

検索した名前が見つからない場合

<! CBLFINDNEXTPAIR(); list = " CGIリストのアドレス" At end >

CBLGETPAIR

正常終了した場合

<! CBLGETPAIR(); list = " CGIリストのアドレス", name = "名前", value = "値" >

名前／値を取得できない場合（空のCGIリスト，CGIリストのポインタが終端）

<! CBLGETPAIR(); list = " CGIリストのアドレス" At end >

CBLGETPAIRNEXT

正常終了した場合

<! CBLGETPAIRNEXT(); list = " CGIリストのアドレス", name = "名前", value = "値" >

名前／値を取得できない場合（空のCGIリスト，CGIリストのポインタが終端）

<! CBLGETPAIRNEXT(); list = " CGIリストのアドレス" At end >

CBLLISTCOUNT
<! CBLLISTCOUNT(); list = " CGIリストのアドレス", count = "名前／値の数" >

CBLENDREPEAT
<! CBLENDREPEAT(); list = " CGIリストのアドレス" >

CBLFILLTEMPLATE
<! CBLFILLTEMPLATE(); list = " CGIリストのアドレス", filename = 'テンプレート名' >

CBLPRINTLIST
出力されない。

CBLSENDERROR
出力されない。

CBLCGITRACE
<! CBLCGITRACE(); YYYY-MM-DD (HH:MM:SS) >
YYYY-MM-DDは年-月-日，HH:MM:SSは時:分:秒を示す。

使用例

      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 INPUTLIST USAGE ADDRESS VALUE NULL.
      01 NAMEX PIC X(28) VALUE 'COBOL'.
      01 VALUEX.
        02 VALUE-LEN PIC S9(9) USAGE COMP.
        02 VALUE-STRING.
          03 PIC X OCCURS 1024 DEPENDING ON VALUE-LEN.
      PROCEDURE DIVISION.
          CALL 'CBLCGITRACE'.
          CALL 'CBLCGIINIT' USING INPUTLIST.
          CALL 'CBLPRINTENV'.
          CALL 'CBLFINDPAIR' USING INPUTLIST NAMEX VALUEX.
           :
          CALL 'CBLDESTROYLIST' USING INPUTLIST.

トレースファイルの例

<! CBLCGITRACE();YYYY-MM-DD (HH:MM:SS)>

<! **** CGI ENVIRONMENT VARIABLES ***>
AUTH_TYPE= (null)
CONTENT_LENGTH= 0
:
<! **** END OF CGI ENVIRONMENT VARIABLES ***>

<! CBLCGIINIT();list = 0x890980 >
:

25.7.3　サービスルーチンに関する注意事項

＜この項の構成＞

(1)　エラーメッセージの出力に関する注意事項

(2)　CGIリストのアドレスに関する注意事項

(1)　エラーメッセージの出力に関する注意事項

CBLFILLTEMPLATEサービスルーチンで，HTMLテンプレートをインタプリットするとき，HTML拡張言語のエラーメッセージの行情報がずれて表示されることがあります。

CBLFILLTEMPLATEサービスルーチンで，インタプリット中にエラーが発生した場合，Webブラウザによっては標準出力のHTTPヘッダなどが文字列として表示されることがあります。
CGIプログラムで実行時エラーが発生したときのWebブラウザの表示例を，次に示します。

CBLFILLTEMPLATEサービスルーチンのCOBOL実行時エラーメッセージ

COBOL実行時エラーメッセージ

CBLFILLTEMPLATEが標準出力したHTTPヘッダ

異常終了時要約情報リスト

エラーメッセージについては，マニュアル「COBOL2002　メッセージ」を参照してください。

(2)　CGIリストのアドレスに関する注意事項

CBLCGIINITサービスルーチンおよびCBLCREATELISTサービスルーチンで取得したCGIリストのアドレス以外の不当なアドレスを，CGIプログラムの作成を支援するサービスルーチンに指定しないでください。不当なアドレスを指定した場合，動作は保証しません。

25.8　起動ファイルの作成方法

起動ファイルは，CGIプログラムの環境変数を設定し，CGIプログラムを起動するファイルです。起動ファイルを使用しないで，直接CGIプログラムを起動することもできますが，Webサーバの環境によってはCOBOLで指定した環境変数が無効になる場合があります。このような場合は，起動ファイルを使って環境変数を定義し，CGIプログラムを実行する必要があります。

起動ファイルの例を，次に示します。

HP-UX(IPF)の場合（sh（Bシェル）を使用した起動ファイルの例）

#!/bin/sh                         …1.
CBL_SYSERR=./syserr.txt
export CBL_SYSERR                 …2.
./CGIMAIN                         …3.
unset CBL_SYSERR                  …4.

sh（Bシェル）を起動する

実行時エラーメッセージを出力するファイルを環境変数CBL_SYSERRに設定する

CGIプログラムを起動する

環境変数CBL_SYSERRを削除する

AIX(32)の場合（sh（Bシェル）を使用した起動ファイルの例）

#!/bin/sh                         …1.
LIBPATH=/opt/HILNGcbl2k/lib
export LIBPATH                    …2.
CBL_SYSERR=./errlog.txt
export CBL_SYSERR                 …3.
./CGIMAIN                         …4.
unset CBL_SYSERR                  …5.
unset LIBPATH                     …6.

sh（Bシェル）を起動する

COBOL2002の共用ライブラリパスを環境変数LIBPATHに設定する

実行時エラーメッセージを出力するファイルを環境変数CBL_SYSERRに設定する

CGIプログラムを起動する

環境変数CBL_SYSERRを削除する

環境変数LIBPATHを削除する

Solaris(SPARC)の場合（sh（Bシェル）を使用した起動ファイルの例）

#!/bin/sh                         …1.
LD_LIBRARY_PATH=/opt/HILNGcbl2k/lib
export LD_LIBRARY_PATH            …2.
CBL_SYSERR=./errlog.txt
export CBL_SYSERR                 …3.
./CGIMAIN                         …4.
unset CBL_SYSERR                  …5.
unset LD_LIBRARY_PATH             …6.

sh（Bシェル）を起動する

COBOL2002の共用ライブラリパスを環境変数LD_LIBRARY_PATHに設定する

実行時エラーメッセージを出力するファイルを環境変数CBL_SYSERRに設定する

CGIプログラムを起動する

環境変数CBL_SYSERRを削除する

環境変数LD_LIBRARY_PATHを削除する

25.9　実行時エラーメッセージの取得方法

COBOLで作成したCGIプログラムで実行時エラーが発生した場合，WebサーバやWebブラウザによって実行時エラーメッセージを表示する動作が異なります。CGIプログラムの実行時エラーメッセージや異常終了時要約情報リストを取得するには，起動ファイルに環境変数CBL_SYSERR，および環境変数CBLABNLSTを設定し，エラーメッセージを取得してください。

システムに従った設定方法で，環境変数CBL_SYSERR，および環境変数CBLABNLSTを指定すると，COBOLで作成したCGIプログラムのすべてに有効となり，複数のCGIプログラムでエラーが発生した場合，実行時エラーメッセージや異常終了時要約情報リストを出力するファイルを上書きする可能性があるため，注意して使用してください。

CGIプログラムのデバッグでWebブラウザに実行時エラーメッセージを表示したい場合は，環境変数CBLCGIERRにYESを指定します。環境変数CBLCGIERRについて次に示します。

形式

CBLCGIERR=YES

規則

環境変数CBLCGIERRにYESを指定すると，実行時エラーメッセージの先頭にHTTPヘッダのMIMEフォーマットを表す"Content-type: text/plain¥n¥n"（以降，CGIヘッダと呼びます）が付けられ，出力されます。ただし，COBOL実行時ライブラリが環境変数を取得する前にエラーになった場合，この指定は無効です。

環境変数CBLCGIERRにYESを指定しても，異常終了時要約情報リストにはCGIヘッダが付けられません。

注意事項

WebサーバやWebブラウザによって実行時エラーメッセージが出力されていても，画面に表示されない場合があります。

25.10　CGIプログラムのデバッグ

ここでは，CGIプログラムをデバッグする方法について説明します。CGIプログラムをデバッグするには，Webサーバを使用しない方法と，Webサーバを使用する方法の2種類があります。

＜この節の構成＞

25.10.1　Webサーバを使用しない方法

25.10.2　Webサーバを使用する方法

25.10.1　Webサーバを使用しない方法

デバッグの実行時にWebサーバを使用しない方法について説明します。

Webサーバ上にあるCGIプログラムを，-TDInfオプションを指定してコンパイルする。

WebブラウザからCGIプログラムを実行する。
CGIプログラム中でCBLCGIINITサービスルーチンが呼び出されると，サーバで処理した情報，およびクライアント（Webブラウザ）から受け取った情報を含んだCGI環境ファイル（.env）が，CGIプログラムと同じディレクトリに作成されます。
以降は，Webサーバを使用しないでデバッグできます。

CGI環境ファイルの環境変数を実行環境ファイルに追加する。

実行環境ファイルをCGIプログラムと同じディレクトリに格納する。

ラインモード，またはバッチモードのテストデバッガを起動し，CGIプログラムをデバッグする。

注意事項

デバッグ対象となるCGIプログラムがネットワーク上で実行される場合には，CGI環境ファイル中に記述されている環境変数PATH_TRANSLATEDのドライブ文字を，対象となるドライブ文字に変更する必要があります。

25.10.2　Webサーバを使用する方法

Webサーバを使用するデバッグ方法について説明します。

CGIプログラムを-TDInfオプションを指定してコンパイルする。

環境変数CBLTDEXECの指定を追加した実行環境ファイルを作成する。
環境変数CBLTDEXECの詳細については，「35.3　プログラムの実行環境の設定」を参照してください。

サーバ上のWebブラウザから，CGIプログラムを実行する。
CGIプログラムが起動されると，ラインモードのテストデバッガが連動実行されます。

CGIプログラムをデバッグする。

注意事項

3.で，クライアント上のWebブラウザからはCGIプログラムを起動できません。
必ずサーバ上のWebブラウザから起動してください。

デバッグ時に，ユーザアカウントの相違によってファイル参照が拒否されることがあります。このようなときは，テストデバッガを起動したログオンIDでファイルが参照できるように設定する必要があります。

連動実行でのデバッグ時に，テストデバッガを表示するための端末が表示されないことがあります。この場合は，明示的に環境変数CBLTDDISPLAYにウィンドウの表示先を設定する必要があります。環境変数CBLTDDISPLAYの詳細については，マニュアル「COBOL2002　使用の手引　操作編」を参照してください。

25.11　注意事項

CGIプログラムを作成，実行する上で注意する点について説明します。

＜この節の構成＞

25.11.1　CGIプログラムを作成する場合の注意点

25.11.2　出力文字に関する注意点

25.11.1　CGIプログラムを作成する場合の注意点

CGIプログラムの応答には，CGI経由でWebブラウザを使用することが前提となっています。したがって，画面出力や応答メッセージなどの，入力待ち状態が発生するプログラムを作成してはいけません。

次のような機能は，入力待ち状態が発生するので，CGIプログラムでは使用しないでください。

入力待ち状態が発生するACCEPT文

STOP　定数文

画面機能（SCREEN SECTION，WINDOW SECTION）

サービスルーチン（COBOLの実行を制御するCBLABN,CBLENDサービスルーチンは除く）

入力待ち状態が発生するプログラムの呼び出し

25.11.2　出力文字に関する注意点

半角かたかな文字を出力するCGIプログラムを作成しないでください。Webブラウザによっては，文字が正しく表示されないことがあります。

26.　マルチスレッド環境での実行

マルチスレッド環境に対応するCOBOLプログラムは，複数スレッドで同時に実行できます。この章では，マルチスレッド環境に対応したCOBOLプログラムの作成方法や，固有の機能について説明します。

＜この章の構成＞

26.1　マルチスレッド対応COBOLプログラムの概要

26.2　マルチスレッド対応COBOLプログラムの生成

26.3　整列併合機能を使用したマルチスレッド対応COBOLプログラムのリンク

26.4　索引ファイル機能を使用したマルチスレッド対応COBOLプログラムのリンク

26.5　マルチスレッド対応COBOLプログラムが対応している機能

26.6　マルチスレッド対応COBOLプログラムの開始と終了

26.7　実行時エラーが発生したときの動作

26.8　環境変数の取り扱い

26.9　マルチスレッド対応COBOLプログラムのデバッグ

26.10　マルチスレッド対応COBOLプログラムを使用する上での注意事項

26.1　マルチスレッド対応COBOLプログラムの概要

マルチスレッド対応COBOLプログラムとは，マルチスレッド環境下で，複数スレッドで同時に実行できるCOBOLプログラムのことです。

ただし，マルチスレッド対応COBOLプログラム機能は，マルチスレッド環境自体を作成するものではありません。

マルチスレッド対応COBOLプログラムには，制限や注意点があります。

＜この節の構成＞

(1)　スレッドの制御

(2)　実行単位

(3)　データの共用

(4)　プログラムのコーディング

(5)　スレッド制御方式の指定

(1)　スレッドの制御

スレッドの起動やスレッド間の同期制御など，スレッド制御に関する操作は，COBOLプログラムで実行できません。

(2)　実行単位

マルチスレッド対応COBOLプログラムの実行単位は，スレッドになります。各スレッドはそれぞれにCOBOL実行環境を持ち，独立して動作しています。

(3)　データの共用

COBOLデータ項目の領域は，スレッドごとに割り当てられます。

COBOLデータは，同じスレッド内に限り共用できます。したがって，ほかのスレッドのCOBOLデータは共用できません。また，同じスレッド内であっても，Cプログラムのデータは共用できません。

(4)　プログラムのコーディング

マルチスレッド対応COBOLプログラムは，通常のCOBOLプログラムを作成するときと同じようにコーディングできます。特殊な命令文は使用しません。

(5)　スレッド制御方式の指定

マルチスレッド対応COBOLプログラムを作成するときには，システムごとのスレッド制御方式に対応したスレッド関数ライブラリをリンクする必要があります。各システムで使用できるスレッド制御方式，およびスレッド関数のリンク方法については，「26.2.2　マルチスレッド対応COBOLプログラムのリンク」を参照してください。

26.2　マルチスレッド対応COBOLプログラムの生成

＜この節の構成＞

26.2.1　マルチスレッド対応COBOLプログラムのコンパイル

26.2.2　マルチスレッド対応COBOLプログラムのリンク

26.2.1　マルチスレッド対応COBOLプログラムのコンパイル

COBOLプログラムをマルチスレッド対応COBOLプログラムにするためには，-MultiThreadオプションを指定してプログラムをコンパイルします。

今まで通常のシングルスレッド対応COBOLプログラムとして利用してきたプログラムも，-MultiThreadオプションを指定して再コンパイルすれば，そのままマルチスレッド環境で実行できるようになります。ただし，マルチスレッド対応COBOLプログラムで対応していない機能を使用しているプログラムは除きます。詳細は，「26.5　マルチスレッド対応COBOLプログラムが対応している機能」を参照してください。

注意事項

マルチスレッド対応COBOLプログラムで対応していない機能を使用したプログラムを，-MultiThreadオプションを指定してコンパイルしても，実行時の動作は保証しません。

-MultiThreadオプションを使ってコンパイルする場合，プロセス内で動作するすべてのCOBOLプログラムを，-MultiThreadオプションを使ってコンパイルする必要があります。プロセス内に，-MultiThreadオプション指定有りでコンパイルしたプログラムと，オプション指定無しでコンパイルしたプログラムが混在していると，実行時の動作は保証しません。

マルチスレッド対応COBOLプログラムをccbl2002コマンドでリンクする場合，必ず-MultiThreadオプションを指定しなければなりません。

26.2.2　マルチスレッド対応COBOLプログラムのリンク

マルチスレッド対応COBOLプログラムは，ccbl2002コマンド，またはcc／ldコマンドでリンクします。

リンク時には，システムごとのスレッド制御方式に対応したスレッド関数ライブラリを指定する必要があります。また，cc／ldコマンドを使用してリンクするときは，さらに，COBOL2002スレッド関数インタフェースライブラリを指定する必要があります。

なお，cc／ldコマンドを使用して実行可能ファイルを生成する方法については，「34.1.5　ccコマンドおよびldコマンドの-lオプション」を参照してください。

＜この項の構成＞

(1)　マルチスレッド対応COBOLプログラムのリンク時に指定するライブラリ

(2)　リンク方法

(3)　注意事項

(1)　マルチスレッド対応COBOLプログラムのリンク時に指定するライブラリ

マルチスレッド対応COBOLプログラムで使用するスレッド関数ライブラリとCOBOL2002スレッド関数インタフェースライブラリとの対応を次に示します。

使用できるOS
スレッド関数ライブラリ
COBOL2002スレッド関数
インタフェースライブラリ

HP-UX(IPF)
HP-UX(IPF64)
libpthread.so
libcbl2kkn.so

AIX(32)
libpthreads.a
libcbl2kmp.a

AIX(64)
libpthreads.a
libcbl2kmp64.a

Solaris(SPARC)
libpthread.so
libcbl2kmp.so

Linux
libpthread.so
libcbl2kmp.so

(2)　リンク方法

(a)　HP-UX(IPF)の場合

HP-UX(IPF)の場合，スレッド関数ライブラリにはlibpthread.soを，COBOL2002スレッド関数インタフェースライブラリにはlibcbl2kkn.soを使用します。指定するオプション，および指定例を次に示します。

ccbl2002コマンドを使用する場合

-MultiThread，-lpthreadオプションを指定します。

（例）

ccbl2002 -MultiThread cmain.o SUBCBL.o -lpthread

cc／ldコマンドを使用する場合

-lcbl2kkn，-lpthreadオプションを指定します。

（例）

cc cmain.o SUBCBL.o -L/opt/HILNGcbl2k/lib -lcbl2k
  -lcbl2kml -lcbl2kkn -lpthread -lm

(b)　HP-UX(IPF64)の場合

HP-UX(IPF64)の場合，スレッド関数ライブラリにはlibpthread.soを，COBOL2002スレッド関数インタフェースライブラリにはlibcbl2kkn.soを使用します。指定するオプション，および指定例を次に示します。

ccbl2002コマンドを使用する場合

-MultiThread，-lpthreadオプションを指定します。

（例）

ccbl2002 -MultiThread cmain.o SUBCBL.o -lpthread

cc／ldコマンドを使用する場合

-lcbl2kkn，-lpthreadオプションを指定します。

（例）

cc cmain.o SUBCBL.o +DD64 -L/opt/HILNGcbl2k64/lib -lcbl2k
  -lcbl2kml -lcbl2kkn -lpthread -lm

(c)　AIX(32)の場合

AIX(32)の場合，スレッド関数ライブラリにはlibpthreads.aを，COBOL2002スレッド関数インタフェースライブラリにはlibcbl2kmp.aを使用します。指定するオプション，および指定例を次に示します。

ccbl2002コマンドを使用する場合

-MultiThread，-lpthreadsオプションを指定します。

（例）

ccbl2002 -MultiThread  cmain.o SUBCBL.o -lpthreads

cc／ldコマンドを使用する場合

-lcbl2kmp，-lpthreadsオプションを指定します。

（例）

cc cmain.o SUBCBL.o -L/opt/HILNGcbl2k/lib -lcbl2k
  -lcbl2kml -lcbl2kmp -lpthreads -lm

(d)　AIX(64)の場合

AIX(64)の場合，スレッド関数ライブラリにはlibpthreads.aを，COBOL2002スレッド関数インタフェースライブラリにはlibcbl2kmp64.aを使用します。指定するオプション，および指定例を次に示します。

ccbl2002コマンドを使用する場合

-MultiThread，-lpthreadsオプションを指定します。

（例）

ccbl2002 -MultiThread  cmain.o SUBCBL.o -lpthreads

cc／ldコマンドを使用する場合

-lcbl2kmp64，-lpthreadsオプションを指定します。

（例）

cc cmain.o SUBCBL.o -q64 -L/opt/HILNGcbl2k64/lib -lcbl2k64
  -lcbl2kml64 -lcbl2kmp64 -lpthreads -lm

(e)　Solaris(SPARC)の場合

Solaris(SPARC)の場合，スレッド関数ライブラリにはlibpthread.soを，COBOL2002スレッド関数インタフェースライブラリにはlibcbl2kmp.soを使用します。指定するオプション，および指定例を次に示します。

ccbl2002コマンドを使用する場合

-MultiThread，-lpthreadオプションを指定します。

（例）

ccbl2002 -MultiThread  cmain.o SUBCBL.o -lpthread

cc／ldコマンドを使用する場合

-lcbl2kmp，-lpthreadオプションを指定します。

（例）

cc cmain.o SUBCBL.o -L/opt/HILNGcbl2k/lib -lcbl2k
  -lcbl2kml -lcbl2kmp -lpthread -lm

(f)　Linuxの場合

Linuxの場合，スレッド関数ライブラリにはlibpthread.soを，COBOL2002スレッド関数インタフェースライブラリにはlibcbl2kmp.soを使用します。指定するオプション，および指定例を次に示します。

ccbl2002コマンドを使用する場合

-MultiThread，-lpthreadオプションを指定します。

（例）Linux(x86)，Linux(x64)の場合

ccbl2002 -MultiThread -UniObjGen cmain.o SUBCBL.o -lpthread

（例）Linux(IPF64)の場合

ccbl2002 -MultiThread cmain.o SUBCBL.o -lpthread

cc／ldコマンドを使用する場合

-lcbl2kmp，-lpthreadオプションを指定します。

（例）Linux(x86)，Linux(IPF64)の場合

cc cmain.o SUBCBL.o -L/opt/HILNGcbl2k/lib -lcbl2k
  -lcbl2kml -lcbl2kmp -lpthread -lm

（例）Linux(x64)の場合

cc cmain.o SUBCBL.o -L/opt/HILNGcbl2k64/lib -lcbl2k
  -lcbl2kml -lcbl2kmp -lpthread -lm

(3)　注意事項

次のようなリンクをした場合，生成された実行可能ファイルの動作は保証しません。

指定したライブラリの組み合わせが不正である

必要なライブラリをリンクしなかった

必要なオプションを指定しなかった

cc／ldコマンドを使用したリンクで，システムのスレッドライブラリを指定する場合は，ほかのシステムライブラリとの指定順序に制約がないか注意が必要です。詳細は，システムのリファレンスで確認してください。

Solaris(SPARC)またはLinuxでは，スレッド関数ライブラリlibpthread.soをリンクしないと，プログラムの実行時にメッセージが出力され，実行が中止されます。

26.3　整列併合機能を使用したマルチスレッド対応COBOLプログラムのリンク

整列併合機能を使用したマルチスレッド対応COBOLプログラムは，次の形式でリンクします。

(a)　HP-UX(IPF)

ccbl2002 -MultiThread tp.cbl -L/opt/HISORTlib/lib -lmsort -lpthread

-lmsort

マルチスレッド対応整列併合ライブラリ（libmsort.so）を使用するために指定します。

-lpthread

HP-UX(IPF)が提供するスレッドライブラリを使用するために指定します。

(b)　AIX(32)

ccbl2002 -MultiThread tp.cbl -L/opt/HISORTlib/lib -lmsort -lpthreads

-lmsort

マルチスレッド対応整列併合ライブラリ（libmsort.a）を使用するために指定します。

-lpthreads

AIX(32)が提供するスレッドライブラリを使用するために指定します。

(c)　AIX(64)

ccbl2002 -MultiThread tp.cbl -L/opt/HISORTlib64/lib -lmsort64 -lpthreads

-lmsort64

マルチスレッド対応整列併合ライブラリ（libmsort64.a）を使用するために指定します。

-lpthreads

AIX(64)が提供するスレッドライブラリを使用するために指定します。

(d)　Solaris(SPARC)

ccbl2002 -MultiThread tp.cbl -L/opt/HISORTlib/lib -lmsort -lpthread

-lmsort

マルチスレッド対応整列併合ライブラリ（libmsort.so）を使用するために指定します。

-lpthread

Solaris(SPARC)が提供するスレッドライブラリを使用するために指定します。

(e)　Linux(x86)

ccbl2002 -MultiThread -UniObjGen tp.cbl -L/opt/HISORTlib/lib -lmsort -lpthread

-lmsort

マルチスレッド対応整列併合ライブラリ（libmsort.so）を使用するために指定します。

-lpthread

Linux(x86)が提供するスレッドライブラリを使用するために指定します。

(f)　Linux(x64)

ccbl2002 -MultiThread -UniObjGen tp.cbl -L/opt/HISORTlib64/lib -lmsort64 -lpthread

-lmsort64

マルチスレッド対応整列併合ライブラリ（libmsort64.so）を使用するために指定します。

-lpthread

Linux(x64)が提供するスレッドライブラリを使用するために指定します。

(g)　HP-UX(IPF64)，Linux(IPF64)

ccbl2002 -MultiThread tp.cbl -L/opt/HISORTlib64/lib -lmsort64 -lpthread

-lmsort64

マルチスレッド対応整列併合ライブラリ（libmsort64.so）を使用するために指定します。

-lpthread

HP-UX(IPF64)，Linux(IPF64)が提供するスレッドライブラリを使用するために指定します。

26.4　索引ファイル機能を使用したマルチスレッド対応COBOLプログラムのリンク

索引ファイル機能を使用したマルチスレッド対応COBOLプログラムは，次の形式でリンクします。

(a)　HP-UX(IPF)

ccbl2002 -MultiThread tp.cbl -L/opt/HIISlib/lib -lmisam -L/opt/HISORTlib/lib -lmsort -lpthread

-lmisam

マルチスレッド対応索引ファイルライブラリ（libmisam.so）を使用するために指定します。

-lmsort

マルチスレッド対応整列併合ライブラリ（libmsort.so）を使用するために指定します。

-lpthread

HP-UX(IPF)が提供するスレッドライブラリを使用するために指定します。

(b)　AIX(32)

ccbl2002 -MultiThread tp.cbl -L/opt/HIISlib/lib -lmisam -L/opt/HISORTlib/lib -lmsort -lpthreads

-lmisam

マルチスレッド対応索引ファイルライブラリ（libmisam.a）を使用するために指定します。

-lmsort

マルチスレッド対応整列併合ライブラリ（libmsort.a）を使用するために指定します。

-lpthreads

AIX(32)が提供するスレッドライブラリを使用するために指定します。

(c)　AIX(64)

ccbl2002 -MultiThread tp.cbl -L/opt/HIISlib64/lib -lmisam64 -L/opt/HISORTlib64/lib -lmsort64 -lpthreads

-lmisam64

マルチスレッド対応索引ファイルライブラリ（libmisam64.a）を使用するために指定します。

-lmsort64

マルチスレッド対応整列併合ライブラリ（libmsort64.a）を使用するために指定します。

-lpthreads

AIX(64)が提供するスレッドライブラリを使用するために指定します。

(d)　Solaris(SPARC)

ccbl2002 -MultiThread tp.cbl -L/opt/HIISlib/lib -lmisam -L/opt/HISORTlib/lib -lmsort -lpthread

-lmisam

マルチスレッド対応索引ファイルライブラリ（libmisam.so）を使用するために指定します。

-lmsort

マルチスレッド対応整列併合ライブラリ（libmsort.so）を使用するために指定します。

-lpthread

Solaris(SPARC)が提供するスレッドライブラリを使用するために指定します。

(e)　Linux(x86)

ccbl2002 -MultiThread -UniObjGen tp.cbl -L/opt/HIISlib/lib -lmisam -L/opt/HISORTlib/lib -lmsort -lpthread

-lmisam

マルチスレッド対応索引ファイルライブラリ（libmisam.so）を使用するために指定します。

-lmsort

マルチスレッド対応整列併合ライブラリ（libmsort.so）を使用するために指定します。

-lpthread

Linux(x86)が提供するスレッドライブラリを使用するために指定します。

(f)　Linux(x64)

ccbl2002 -MultiThread -UniObjGen tp.cbl -L/opt/HIISlib64/lib -lmisam64 -L/opt/HISORTlib64/lib -lmsort64 -lpthread

-lmisam64

マルチスレッド対応索引ファイルライブラリ（libmisam64.so）を使用するために指定します。

-lmsort64

マルチスレッド対応整列併合ライブラリ（libmsort64.so）を使用するために指定します。

-lpthread

Linux(x64)が提供するスレッドライブラリを使用するために指定します。

(g)　HP-UX(IPF64)，Linux(IPF64)

ccbl2002 -MultiThread tp.cbl -L/opt/HIISlib64/lib -lmisam64 -L/opt/HISORTlib64/lib -lmsort64 -lpthread

-lmisam64

マルチスレッド対応索引ファイルライブラリ（libmisam64.so）を使用するために指定します。

-lmsort64

マルチスレッド対応整列併合ライブラリ（libmsort64.so）を使用するために指定します。

-lpthread

HP-UX(IPF64)，Linux(IPF64)が提供するスレッドライブラリを使用するために指定します。

26.5　マルチスレッド対応COBOLプログラムが対応している機能

マルチスレッド対応COBOLプログラムが対応している機能を，次に示します。対応していない機能をマルチスレッド対応COBOLプログラムに適用しないよう注意してください。

表26-1　マルチスレッド対応COBOLプログラムが対応する機能一覧

種類 | 機能名 | マルチスレッドへの対応 | 備考
規格 | 基本機能 | ○ |
順編成ファイル | ×※1 |
相対編成ファイル | ×※1 |
索引編成ファイル | ○ |
整列併合 | △※1 | USING／GIVING指定に対して，マルチスレッドで使用できないファイル編成は指定できない。
プログラム間連絡 | ○ |
組み込み関数 | ○ |
オブジェクト指向 | ○ |
共通例外処理 | ○ |
再帰呼び出し | ○ |
利用者定義関数 | ○ |
局所場所節（LOCAL-STORAGE SECTION） | ○ |
X/Open | テキスト編成ファイル | ×※1 |
ファイル共用（ファイルシェア） | 索引編成ファイル以外 | ×※1 |
索引編成ファイル | ○※1 | 同一スレッド内でのファイル共用は使用できない。
コマンド行および環境変数へのアクセス | △ | 環境変数アクセスだけで使用できる。
画面節（SCREEN SECTION）による画面操作※5 | ×※2 |
C言語インタフェース | △ | データの共用はできない。
インタナショナリゼーション | ○ |
拡張機能 | 日本語 | ○ |
ブール（ビット操作） | ○ |
アドレス操作 | ○ |
1バイト2進機能・COMP-X項目 | ○ |
浮動小数点項目 | ○ |
報告書作成機能 | ×※1 |
HiRDBによる索引編成ファイル※8 | ×※1 |
CSV編成ファイル | ×※1 |
ラージファイル入出力 | △※1 | 使用するファイル編成がマルチスレッドに対応していれば使用できる。
ファイル入出力拡張機能 | ×※1 |
プリンタへのアクセス（入出力による書式印刷機能）※9 | ×※1 |
ファイルのディスク書き込み保証 | ○ |
通信節による画面操作※9 | ×※1 |
画面節（WINDOW SECTION）による画面操作※5 | ×※² |
データコミュニケーション機能※6 | ×※1 |
データベース操作機能※13 | △※1 | 連携しているドライバおよびデータベースが，マルチスレッドに対応している必要がある。
XDMによるデータベースシミュレーション機能 | ○ |
基本機能サービスルーチン | △ | 実行できないサービスルーチンがある。詳細は「26.10.2　呼び出してはいけないサービスルーチン」を参照のこと。
CGIプログラム作成支援機能※9 | △ | 実行できないサービスルーチンがある。詳細は「25.7　CGIプログラムの作成を支援するサービスルーチン」を参照のこと。
COBOL入出力サービスルーチン | × |
バイトストリーム入出力サービスルーチン※3 | × |
Unicode機能※7 | ○ |
数字項目のけた拡張機能※10 | ○ |
動的長基本項目機能※12 | ○ |
定数長拡張機能※12 | ○ |
デバッグ | 実行時デバッグ機能 | ○ |
テストデバッグ機能※4 | △ |
カバレージ機能※11 | △ |
開発／実行環境 | プロファイル機能 | × | プロファイル機能オプション（-Profile）は，-MultiThreadオプションと同時に指定した場合，無視される。

（凡例）

○：使用できる

△：制限付きで使用できる

×：使用できない

注※1

コンパイル時，この機能を使用する文に対してWレベル（警告エラー）のメッセージが出力されます。

注※2

コンパイル時，この機能を使用する文に対してSレベル（重大エラー）のメッセージが出力され，コンパイルは中止します。

注※3

UNIX32，AIX(64)，Linux(x64)，HP-UX(IPF64)で有効です。

注※4

AIX(32)，AIX(64)で，ユーザスレッド，カーネルスレッドが1：1のときだけ有効です。

注※5

HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Solaris(SPARC)で有効です。

注※6

UNIX32，AIX(64)，Linux(x64)，Linux(IPF64)で有効です。

注※7

HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効です。

注※8

HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC)で有効です。

注※9

HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効です。

注※10

HP-UX(IPF64)，AIX(64)，Linux(x64)で有効です。

注※11

AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効です。

AIXでは，ユーザスレッド，カーネルスレッドが1：1のときだけ有効です。

Linuxでは，カバレージ情報の蓄積だけできます。

注※12

AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効です。

注※13

Linux(x86)，Linux(x64)で有効です。

26.6　マルチスレッド対応COBOLプログラムの開始と終了

マルチスレッドプログラムの実行を開始する方法には，次の三つがあります。

COBOL以外のプログラムからの呼び出しによる方法

マルチスレッド対応COBOLプログラムをスレッド開始関数として指定する方法

マルチスレッド対応COBOLプログラムをアプリケーションの主プログラムにする方法

それぞれの開始方法と終了方法について説明します。

＜この節の構成＞

(1)　COBOL以外のプログラムからの呼び出しによる方法

(2)　マルチスレッド対応COBOLプログラムをスレッド開始関数として指定する方法

(3)　マルチスレッド対応COBOLプログラムをアプリケーションの主プログラムにする方法

(4)　戻り文に対する動作

(1)　COBOL以外のプログラムからの呼び出しによる方法

COBOLプログラム以外のプログラムを入り口としてスレッドを開始して，そのプログラムから間接的にマルチスレッド対応COBOLプログラムを呼び出せます。

この方法では，スレッド内で最初に呼ばれるCOBOLプログラムが，COBOL主プログラムの場合と，COBOL副プログラムの場合とで，プログラム終了時の動作が異なります。COBOL主プログラムと副プログラムについては，「18.3　COBOL主プログラムと副プログラム」を参照してください。

(a)　COBOL主プログラムの場合

-MainNotCBLオプションを指定しないでコンパイルしたプログラムがスレッド内で最初に実行された場合，COBOL主プログラムになります。

COBOL主プログラムを終了させるには，STOP RUN文を実行します。これによって，COBOL実行環境が終了し，スレッドが終了されます。このとき，RETURN-CODE特殊レジスタの値がスレッドの終了コードになります。

(b)　COBOL副プログラムの場合

-MainNotCBLオプションを指定してコンパイルしたプログラムは，スレッド内で最初に実行した場合でも，常にCOBOL副プログラムとなります。

COBOL副プログラムは，呼び出し元のプログラムに復帰できます。このとき，COBOL実行環境は保持されます。そのため，呼び出し元のプログラムは，スレッドが終了する前にCOBOL実行環境を終了させる必要があります。COBOL実行環境を終了させるには，CBLENDサービスルーチンを呼び出します。

図26-1　COBOL以外のプログラムからの呼び出しの例

(2)　マルチスレッド対応COBOLプログラムをスレッド開始関数として指定する方法

マルチスレッド対応COBOLプログラムを入り口としてスレッドを開始した場合，このプログラムが終了したときにCOBOL実行環境を終了し，スレッドが終了します。このとき，RETURN-CODE特殊レジスタに指定した値が，スレッドの終了コードになります。

注意事項

この方法を用いる場合は，プログラムをコンパイルする時に-MainNotCBLオプションを指定しないでください。

図26-2　COBOLプログラムがスレッド開始関数となる例

(3)　マルチスレッド対応COBOLプログラムをアプリケーションの主プログラムにする方法

マルチスレッド対応COBOLプログラムに対して，-Main,Systemまたは-Main,V3オプションを指定してコンパイルしたCOBOLプログラムは，アプリケーションの主プログラムになります。この場合，COBOLプログラムがプライマリスレッドになります。

マルチスレッド対応COBOLプログラムがアプリケーションの主プログラムである場合，マルチスレッド対応COBOLプログラムが終了したときに，プライマリスレッドが終了し，プロセスも終了します。

なお，コンパイル時に例外を検知するオプション（-DebugInfオプションなど）を指定した場合，プライマリスレッド内で発生した例外を取得できます。

(4)　戻り文に対する動作

上記(1)～(3)の方法について，戻り文に対する動作の違いを，次に示します。

COBOLプログラムの種類 | STOP RUN文 | GOBACK文 | EXIT PROGRAM文
COBOL主プログラム | STOP RUN文を実行したスレッドが終了する。 | GOBACK文を実行したスレッドが終了する。 | 何も動作しない。
COBOL副プログラム | STOP RUN文を実行したスレッドが終了する。 | 呼び出し元に制御が戻る。 | 呼び出し元に制御が戻る。

26.7　実行時エラーが発生したときの動作

実行時エラーが検知された場合は，実行時エラーメッセージが出力されたあと，プログラムの動作していたスレッドが終了されます。実行時メッセージの形式は次のようになります。

形式

KCCCnnnnR-x(i) メッセージテキスト

nnnn

メッセージ番号

x

メッセージレベル

i

スレッド識別子の値

メッセージ番号，メッセージレベルなど，実行時メッセージの形式については，マニュアル「COBOL2002　メッセージ」を参照してください。

注意事項

COBOL実行時メッセージなどのCOBOL2002が出力する情報は，スレッド識別子が付けられます。これによって対応するスレッドを識別できます。スレッド識別子には，pthread_self関数が返すスレッドIDを用います。

マルチスレッド対応COBOLプログラム実行時の初期処理，または終了処理中にエラーが発生した場合，KCCC03nnR-Sなどのメッセージ番号が03nnで示される300番台の実行時メッセージが，英語で出力されます。なお，この場合，異常終了時要約情報リストは出力されません。

26.8　環境変数の取り扱い

マルチスレッド環境で環境変数を扱う場合，設定値がすべてのスレッドで共用されるので注意してください。

マルチスレッド対応COBOLプログラムでは，環境変数を扱う上での混乱を避けるため，次の二つの機能を持っています。

スレッドごとに固有の出力ファイル名称を付ける機能

スレッドごとに環境変数を設定する機能

＜この節の構成＞

26.8.1　スレッドごとに固有の出力ファイル名称を付ける機能

26.8.2　スレッドごとに環境変数を設定する機能

26.8.1　スレッドごとに固有の出力ファイル名称を付ける機能

出力ファイル名を指定する実行時環境変数の設定がある場合，この機能が実行されます。この機能は，実行時環境変数によって指定したファイル名へ，自動的にスレッドの識別子を付けます。これによって，スレッドごとに固有のファイルが出力されることになります。

形式

ファイル名_i.拡張子

i

スレッド識別子の値

注意事項

この機能の対象となる実行時環境変数を次に示します。

CBL_SYSOUT

CBL_SYSPUNCH

CBL_SYSERR

CBLABNLST

CBLDDUMP

CBLDATADUMPFILE

CBLPGMSEARCHTRC

ただし，CUIモードのときに，出力ファイル名に標準入力（stdin）,標準出力（stdout），または標準エラー出力（stderr）が指定された場合，この機能の対象になりません。

これらの実行時環境変数の詳細は，「35.3　プログラムの実行環境の設定」を参照してください。

26.8.2　スレッドごとに環境変数を設定する機能

マルチスレッド対応COBOLプログラムでは，環境変数へのアクセス機能を使えば，スレッドごとに環境変数の値を設定・取得できます。環境変数へのアクセス機能の詳細については，「10.4　環境変数へのアクセス」を参照してください。

規則

環境変数の値を設定・変更した場合，その値は実行スレッド内だけで有効となります。

同一の環境変数に対して，スレッドごとに別々の値を設定できます。

設定した環境変数は，COBOL以外のプログラムで使用できません。また，PATHなどのシステム環境変数や，COBOL2002以外が管理する環境変数の値を設定・変更しても有効になりません。

この機能を使って，「26.8.1　スレッドごとに固有の出力ファイル名称を付ける機能」で示した環境変数を設定した場合，この機能が優先され，出力ファイル名にスレッド識別子は付けられません。
マルチスレッド対応COBOLプログラムで環境変数へのアクセスを使用した場合，内部的に環境変数名にスレッド識別子の値を付けた環境変数名で値を登録および取得します。
スレッド識別子が1000で環境変数CBLABNLSTを設定する例を次に示します。

（例）

マルチスレッド対応COBOLプログラムで，CBLABNLST=a.txtを設定したとき，次のように環境変数を登録および取得します。

スレッド識別子を付けた環境変数名を使用して，「CBLABNLST_1000=a.txt」を値に登録します。

マルチスレッド対応COBOLプログラムで，環境変数を取得する場合，次の順序で環境変数名をアクセスし，取得した値を返します。
1.　スレッド識別子を付けた環境変数名（CBLABNLST_1000）
2.　スレッド識別子を付けない環境変数名（CBLABNLST）

このため，環境変数の値をクリア※せずにCOBOLプログラムの実行を終了し，あとで同じスレッド識別子のスレッドでCOBOLプログラムが動作した場合，そのスレッドで環境変数を設定していなくても，以前のスレッドで設定した環境変数の値が取得されます。

注※

　COBOLの環境変数へのアクセスのDISPLAY文でNULL値を設定することで，環境変数の設定を取り消せます。この場合，取り消せる環境変数は，スレッド識別子を付けた環境変数（CBLABNLST_1000）となります。そのあとで環境変数へのアクセス機能で環境変数の値の読み込みを行った場合，COBOLはスレッド識別子を付けない環境変数名（CBLABNLST）にアクセスし，取得した値を返します。

26.9　マルチスレッド対応COBOLプログラムのデバッグ

＜この節の構成＞

26.9.1　マルチスレッド対応COBOLプログラムのデバッグ

26.9.2　実行時デバッグ機能

26.9.1　マルチスレッド対応COBOLプログラムのデバッグ

＜この項の構成＞

(1)　テストデバッガを使用したデバッグ

(2)　カバレージ機能

(1)　テストデバッガを使用したデバッグ

COBOLプログラムが実行されたすべてのスレッドに対して，テスト，およびデバッグができます。詳細は，マニュアル「COBOL2002　使用の手引　操作編」を参照してください。

(2)　カバレージ機能

COBOLプログラムが実行されたすべてのスレッドに対して，カバレージ情報の採取，およびカウント情報の表示ができます。詳細は，マニュアル「COBOL2002　使用の手引　操作編」を参照してください。

26.9.2　実行時デバッグ機能

デバッグ用のオプション（-DebugInf，-DebugInf,Trace，-DebugCompati，-DebugData，-TDInf，-CVInf，-DebugRange）を指定しコンパイルしたマルチスレッド対応COBOLプログラムが，実行時に異常終了，またはエラーが発生した場合，異常終了時要約情報が出力された後，スレッドが終了されます。

＜この項の構成＞

(1)　シグナルの登録

(2)　シグナルの種別

(3)　シグナルに関する注意事項

(1)　シグナルの登録

マルチスレッド対応COBOLプログラムでは，シグナルの登録にsigactionシステムコールを使用します。登録するシグナルに関する詳細は，「36.9　シグナル」を参照してください。

(2)　シグナルの種別

マルチスレッド対応COBOLプログラムでは，異常終了時要約情報リスト中のシグナル種別として以下を追加する。

RUNTIME ERROR（実行時エラーの発生）

CBLABN（CBLABNサービスルーチンの呼び出し）

なお，-MultiThreadオプションの指定がないCOBOLプログラムで，実行時エラーが発生したり，CBLABNサービスルーチンが呼び出されたりした場合には，シグナル種別はSIGIOT（abortによる異常終了）となります。

(3)　シグナルに関する注意事項

アプリケーションプログラムを実行中に，Cプログラムでシグナルの動作を指示するシステムコールが発行された場合，異常終了時の結果は保証しません。

マルチスレッド対応COBOLプログラムの実行時に次の理由で終了した場合，コアダンプは出力されません。

COBOLがメッセージを出力して実行を中止したとき

デバッグ用のオプション（-DebugInf，-DebugInf,Trace，-DebugCompati，-DebugData，-TDInf，-CVInf，-DebugRange）を指定して異常終了したとき（環境変数CBLCOREは無効となります）

CBLABNサービスルーチンを実行したとき

マルチスレッド対応COBOLプログラムでのシステムのシグナル処理は，プロセス単位の管理となっており，シグナルの登録，回復は，プロセス内すべてのスレッドに影響があります。シグナルの詳細は，「36.9　シグナル」を参照してください。

26.10　マルチスレッド対応COBOLプログラムを使用する上での注意事項

＜この節の構成＞

26.10.1　EXTERNAL句を用いたデータの共用

26.10.2　呼び出してはいけないサービスルーチン

26.10.3　共用ライブラリがメモリ上から削除される条件

26.10.1　EXTERNAL句を用いたデータの共用

EXTERNAL句を指定したCOBOLデータ項目は，同じスレッド内のプログラムでだけ共用できます。異なるスレッドの間では，COBOLデータ項目を共用できません。

また，COBOLプログラムとCプログラムとの間では，同じスレッド内であってもデータを共用できません。

26.10.2　呼び出してはいけないサービスルーチン

マルチスレッド対応COBOLプログラムから，次のサービスルーチンを呼び出さないでください。呼び出した場合，動作は保証しません。

JCPOPUPサービスルーチン

マルチスレッド対応COBOLプログラム，およびマルチスレッド環境下で動作する他言語のプログラムからCOBOL入出力サービスルーチンを呼び出さないでください。呼び出した場合，動作は保証しません。

26.10.3　共用ライブラリがメモリ上から削除される条件

マルチスレッド対応COBOLプログラムでCANCEL文を実行しても，共用ライブラリはメモリ上から削除されません。

また，STOP RUN文などによるスレッド実行環境の終了処理の場合，共用ライブラリはメモリ上から削除されません。この場合，共用ライブラリは，プロセスの終了までメモリ上に読み込まれたままの状態になります。

27.　Unicode機能（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

Unicode機能は，COBOLが扱うデータをUnicodeとして扱う機能です。Unicode機能を使用すると，プログラム間およびファイル入出力をUnicodeでやり取りできます。この章では，Unicode機能について説明します。

＜この章の構成＞

27.1　Unicode機能の概要

27.2　Unicode機能のサポート範囲

27.3　Unicode機能の前提条件

27.4　Unicode機能の詳細

27.5　Unicodeに対応する機能

27.6　入出力情報と取り扱う文字コード

27.7　Unicode機能での制限事項

27.1　Unicode機能の概要

ここでは，コンパイル，実行，およびデバッグでのUnicode機能の概要について説明します。

Unicode機能を使用できる環境を次に示します。

表27-1　Unicode機能を使用できる環境

OS
使用できる動作環境
環境変数LANGの設定値

HP-UX(IPF)
AIX(32)
AIX(64)
シフトJIS環境
「付録A.2　シフトJISの場合」を参照してください。

Linux(x86)
Linux(x64)
UTF-8環境
「付録A.4　Unicodeの場合」を参照してください。

＜この節の構成＞

(1)　コンパイルでのUnicode機能

(2)　実行でのUnicode機能

(3)　デバッグでのUnicode機能

(1)　コンパイルでのUnicode機能

シフトJISで記述されたCOBOLソースプログラムを，-UniObjGenオプションを指定してコンパイルすることで，コード系がUnicodeのオブジェクトを生成します。これによって，Unicodeデータ同士の転記または比較ができます。コンパイルでのUnicode機能を次に示します。

(a)　シフトJIS環境下の場合

図27-1　コンパイルでのUnicode機能（シフトJIS環境下）

シフトJISで記述されたCOBOLソースプログラム，登録集原文を入力し，-UniObjGenオプションを指定しないでコンパイルすると，シフトJIS環境で動作するオブジェクトが生成されます。

シフトJISで記述されたCOBOLソースプログラム，登録集原文を入力し，-UniObjGenオプションを指定してコンパイルすると，COBOLのUnicode機能を使用する環境で動作するオブジェクトが生成されます。コンパイル時に出力されるコンパイルメッセージ，コンパイルリストはシフトJISで出力されます。

Unicodeで記述されたCOBOLソースプログラムは，コンパイルできません。コンパイルした場合，動作は保証しません。

COBOL2002コンパイラは，COBOLソースプログラム上に記述された英数字文字定数をUTF-8に，日本語文字定数をUTF-16に変換します。

(b)　UTF-8環境下の場合

図27-2　コンパイルでのUnicode機能（UTF-8環境下）

シフトJISで記述されたCOBOLソースプログラム，登録集原文を入力し，-UniObjGenオプションを指定しないでコンパイルすると，コンパイルエラーとなります。

シフトJISで記述されたCOBOLソースプログラム，登録集原文を入力し，-UniObjGenオプションを指定してコンパイルすると，COBOLのUnicode機能を使用する環境で動作するオブジェクトが生成されます。コンパイル時に出力されるコンパイルメッセージはUTF-8，コンパイルリストはシフトJISで出力されます。

Unicodeで記述されたCOBOLソースプログラムは，コンパイルできません。コンパイルした場合，動作は保証しません。

COBOL2002コンパイラは，COBOLソースプログラム上に記述された英数字文字定数をUTF-8に，日本語文字定数をUTF-16に変換します。

(2)　実行でのUnicode機能

プログラム実行時に実行時環境変数CBLLANGにUNICODEが指定されている場合，コード系がUnicodeとみなして実行します。プログラム実行時のUnicode機能について次に示します。

図27-3　プログラム実行時のUnicode機能

XML連携機能※1とCosminexus連携機能※2でUnicodeデータを使用できます。

注※1

HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効です。

注※2

AIX(64)，Linux(x64)で有効です。

ファイル入出力機能でUnicodeデータの読み書きができます。

(3)　デバッグでのUnicode機能

テストデバッガでプログラムをデバッグすると，Unicodeデータに対して次の操作ができます。詳細は，マニュアル「COBOL2002　使用の手引　操作編」を参照してください。

データ項目の値の表示

データ項目への値の代入

比較条件式の設定

27.2　Unicode機能のサポート範囲

AIX(32)，AIX(64)，Linux(x86)，Linux(x64)の場合，Unicode機能で使用できるUnicodeの文字は，UCS-4の範囲（UCS-2の範囲を含む）とします。HP-UX(IPF)の場合，使用できるUnicodeの文字はUCS-2の範囲です。ただし，JIS X0213の第3水準および第4水準の文字は使用できません。また，サロゲートペアおよびIVSは使用できません。範囲外の文字コードを使用した場合，動作は保証しません。

このシステムで異体字セレクタとみなすコード範囲は，U+E0100～U+E01EFとします。

27.3　Unicode機能の前提条件

Unicode機能を使用する場合の前提条件を次に示します。

＜この節の構成＞

(1)　コード変換ライブラリ

(2)　Unicode機能を使用したプログラムのコンパイルおよび実行

(1)　コード変換ライブラリ

Unicode機能を使用する場合，次のプログラムプロダクト（以降これらのプログラムプロダクトをコード変換ライブラリと表記します）のどれかをインストールしてください。

AIX(32)，Linux(x86)の場合

日立コード変換 - Runtime

Hitachi Code Converter - Runtime for C/COBOL

AIX(64)，Linux(x64)の場合

日立コード変換 - Runtime(64)

Hitachi Code Converter - Runtime for C/COBOL(64)

HP-UX(IPF)の場合

日立コード変換 - Runtime

また，COBOLプログラムから直接コード変換ライブラリを呼び出す場合は，上記に加えて次のプログラムプロダクトのどれかが必要です。

AIX(32)，Linux(x86)の場合

日立コード変換 - Development Kit

Hitachi Code Converter - Development Kit for C/COBOL

AIX(64)，Linux(x64)の場合

日立コード変換 - Development Kit(64)

Hitachi Code Converter - Development Kit for C/COBOL(64)

HP-UX(IPF)の場合

日立コード変換 - Development Kit

(2)　Unicode機能を使用したプログラムのコンパイルおよび実行

(a)　HP-UX(IPF)，AIX(32)，AIX(64)の場合

Unicode機能を使用したプログラムのコンパイルおよび実行は，シフトJIS環境下で行ってください。シフトJIS環境にする方法は「付録A.2　シフトJISの場合」を参照してください。

(b)　Linux(x86)，Linux(x64)の場合

Unicode機能を使用したプログラムのコンパイルおよび実行は，UTF-8環境下で行ってください。UTF-8環境にする方法は「付録A.4　Unicodeの場合」を参照してください。

27.4　Unicode機能の詳細

＜この節の構成＞

27.4.1　コンパイル

27.4.2　実行

27.4.1　コンパイル

-UniObjGenオプションおよび-UniEndianオプションを指定すると英数字定数，および日本語文字定数の文字コードをUnicodeに変換します。-UniObjGenオプションについては，「32.5.14　その他の設定」の「(17)　-UniObjGenオプション（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）」を参照してください。-UniEndianオプションについては，「32.5.14　その他の設定」の「(18)　-UniEndianオプション（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）」を参照してください。

＜この項の構成＞

(1)　-UniObjGenオプションと-UniEndianオプションの関係

(2)　-UniObjGenオプション指定時の注意事項

(3)　-UniEndianオプション指定時の注意事項

(1)　-UniObjGenオプションと-UniEndianオプションの関係

-UniObjGenオプションと-UniEndianオプションの関係を，次に示します。

表27-2　-UniObjGenオプションと-UniEndianオプションの関係

-UniObjGenオプション指定
-UniEndianオプション指定

-UniEndian,Little
-UniEndian,Big
指定なし（デフォルト）

HP-UX(IPF)
AIX(32)
AIX(64)
Linux(x86)
Linux(x64)

指定あり
日本語文字定数
UTF-16LEに変換
UTF-16BEに変換
UTF-16BEに変換
UTF-16LEに変換

英数字定数
UTF-8に変換（-UniEndianオプションの影響はない）

指定なし※
無変換
該当しない

注※

Linux(x86)，Linux(x64)の場合，-UniObjGenオプションを指定しなければなりません。指定がない場合はコンパイルエラーとなります。

(2)　-UniObjGenオプション指定時の注意事項

-UniObjGenオプション指定時の注意事項を次に示します。

-UniObjGenオプション指定の有無が異なるCOBOLプログラムを混在して実行することはできません。混在して実行した場合，動作は保証しません。

前提条件を満たしていない環境で-UniObjGenオプションを指定してコンパイルした場合，コンパイルエラーとなります。前提条件を満たしていない環境を次に示します。

コード変換ライブラリがインストールされていない場合

使用するコード変換ライブラリが前提バージョンに満たない場合

NATIVE指定以外の符号系名を，実行用計算機段落のPROGRAM COLLATING SEQUENCE句，またはSORT，MERGE文のCOLLATING SEQUENCE句に指定した場合，コンパイルエラーとなります。

-Switch,EBCDIKオプションまたは-Switch,EBCDICオプションと-UniObjGenオプションを同時に指定した場合，コンパイルエラーとなります。

コンパイル中にコード変換に失敗した場合，コンパイルエラーとなります。

HP-UX(IPF)，AIX(32)，AIX(64)の場合，EUC環境下で-UniObjGenオプションを指定すると，コンパイルエラーとなります。

Linux(x86)，Linux(x64)の場合，-UniObjGenオプション指定時に環境変数CBLSRCENCODINGを指定していないと，コンパイルエラーとなります。

Linux(x86)，Linux(x64)の場合，UTF-8環境下で-UniObjGenオプションを指定していないと，コンパイルエラーとなります。

-JPNオプション，-CompatiV3オプション，-V3Recオプションは指定できません。ただし，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)の場合，コンパイラ環境変数CBLV3UNICODEにYESを指定すると，-UniObjGenオプションと-CompatiV3または-V3Recオプションを同時に指定できます。コンパイラ環境変数CBLV3UNICODEについては，「32.6.3　コンパイラ環境変数の詳細」の「(16)　CBLV3UNICODE（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）」を参照してください。

(3)　-UniEndianオプション指定時の注意事項

-UniEndianオプション指定時の注意事項を次に示します。

-UniEndianオプション指定（Little／Big）の異なるCOBOLプログラムを混在して使用することはできません。混在して使用した場合，動作は保証しません。

27.4.2　実行

-UniObjGenオプションを指定してコンパイルしたプログラムを正しく実行するには，実行時環境変数CBLLANGにUNICODEを指定してください。実行時環境変数CBLLANGについては，「35.3.3　一般」を参照してください。

ここでは，実行時での規則について説明します。

＜この項の構成＞

(1)　実行時環境変数CBLLANGとCBLUNIENDIANの関係

(2)　-UniObjGenオプションと実行時環境変数CBLLANGの関係（HP-UX(IPF)，AIX(32)，AIX(64)の場合）

(3)　-UniEndianオプションと実行時環境変数CBLUNIENDIANの関係

(4)　コード変換失敗時の動作

(5)　EUC環境でCOBOLプログラムを実行した場合（HP-UX(IPF)，AIX(32)，AIX(64)で有効）

(6)　UTF-8環境でCOBOLプログラムを実行した場合（Linux(x86)，Linux(x64)で有効）

(1)　実行時環境変数CBLLANGとCBLUNIENDIANの関係

実行時環境変数CBLLANGの設定形式を次に示します。

形式

CBLLANG=UNICODE

実行時環境変数CBLUNIENDIANの設定形式を次に示します。

形式

CBLUNIENDIAN=｛LITTLE｜BIG｝

実行時環境変数CBLLANGとCBLUNIENDIANの関係を，次に示します。

表27-3　実行時環境変数CBLLANGとCBLUNIENDIANの関係

環境変数CBLLANG指定
環境変数CBLUNIENDIAN指定

LITTLE
BIG
指定なし（デフォルト）

HP-UX(IPF)
AIX(32)
AIX(64)
Linux(x86)
Linux(x64)

指定あり
UNICODE指定あり
用途がNATIONALの項目
UTF-16LEを仮定
UTF-16BEを仮定
UTF-16BEを仮定
UTF-16LEを仮定

用途がDISPLAYの項目
UTF-8を仮定（環境変数CBLUNIENDIANの影響はない）

指定なし※
無変換
該当しない

注※

Linux(x86)，Linux(x64)の場合，環境変数CBLLANGにUNICODEを指定しなければなりません。指定がないときは実行時エラーとなります。

(2)　-UniObjGenオプションと実行時環境変数CBLLANGの関係（HP-UX(IPF)，AIX(32)，AIX(64)の場合）

-UniObjGenオプションと実行時環境変数CBLLANGの関係を，次に示します。

表27-4　-UniObjGenオプションと実行時環境変数CBLLANGの関係

-UniObjGenオプション指定 | 環境変数CBLLANG指定
UNICODE | 指定なし（デフォルト）
指定あり | ○※ | ×
指定なし | × | ○

（凡例）

○：動作を保証する

×：動作を保証しない

注※

Unicode機能で動作します。

(3)　-UniEndianオプションと実行時環境変数CBLUNIENDIANの関係

-UniEndianオプションの指定（Little／Big）と，実行時環境変数CBLUNIENDIANの指定（LITTLE／BIG）の組み合わせが異なる場合，動作は保証しません。-UniEndianオプションと実行時環境変数CBLUNIENDIANの関係を次に示します。

表27-5　-UniEndianオプションと実行時環境変数CBLUNIENDIANの関係

-UniEndianオプションの指定
環境変数CBLUNIENDIANの指定

LITTLE
BIG
指定なし（デフォルト）

HP-UX(IPF)
AIX(32)
AIX(64)
Linux(x86)
Linux(x64)

-UniEndian,Little
○
×
×
○

-UniEndian,Big
×
○
○
×

指定なし
HP-UX(IPF)
AIX(32)
AIX(64)
×
○
○
－

Linux(x86)
Linux(x64)
○
×
－
○

（凡例）

○：動作を保証する

×：動作を保証しない

－：該当しない

(4)　コード変換失敗時の動作

コード変換ライブラリの前提条件を満たしていない環境で，実行時環境変数CBLLANGにUNICODEを指定して実行した場合，コード変換失敗となります。コード変換失敗時の動作を次に示します。

表27-6　コード変換失敗時の動作

機能 | コード変換失敗時の動作
CSV編成ファイルの入出力 | 実行時エラーとなる。
CBLNCNVサービスルーチン | 戻り値として-2または-3を返す。詳細については，「29.7.1　CBLNCNV」を参照のこと。
DISPLAY-OF関数/NATIONAL-OF関数 | 実行時エラーとなる。

(5)　EUC環境でCOBOLプログラムを実行した場合（HP-UX(IPF)，AIX(32)，AIX(64)で有効）

EUC環境で，実行時環境変数CBLLANGにUNICODEを指定してCOBOLプログラムを実行した場合，実行時エラーとなり，プログラムの実行を中止します。

(6)　UTF-8環境でCOBOLプログラムを実行した場合（Linux(x86)，Linux(x64)で有効）

UTF-8環境で，実行時環境変数CBLLANGにUNICODEを指定しないでCOBOLプログラムを実行した場合，実行時エラーとなり，プログラムの実行を中止します。

27.5　Unicodeに対応する機能

Unicodeに対応する機能を，次に示します。

表27-7　Unicodeに対応する機能（規格）

機能名
Unicode対応状況
備考

HP-UX(IPF)
AIX(32)
AIX(64)
Linux(x86)
Linux(x64)

用途DISPLAY
用途NATIONAL
用途DISPLAY
用途NATIONAL

ASCII範囲内※1
ASCII範囲外※1
ASCII範囲内※1
ASCII範囲外※1

基本機能
○
△
△
○
△
△
定数に多バイト文字を指定できない句または文がある。詳細については，「27.5.1　基本機能」，または「27.7　Unicode機能での制限事項」を参照のこと。

順編成ファイル
○
○※2
○※2
○
○※2
○※2

相対編成ファイル
○
○※2
○※2
○
○※2
○※2

ISAMによる索引編成ファイル
○
○※2
○※2
○
○※2
○※2
キーとして用途がNATIONALの項目を指定した場合，意図しない行に位置づけられることがある。

整列併合
○
○※2
○※2
○
○※2
○※2
キーとして用途がNATIONALの項目を指定した場合，整列併合の結果が意図しない結果となることがある。

プログラム間連絡
○
○※3※4
○※3※4
○
○※3※4
○※3※4

組み込み関数
○
○
○
○
○
○

オブジェクト指向
○
○※3※4
○※3※4
○
○※3※4
○※3※4

共通例外処理
○
○
○
○
○
○
次に示す組み込み関数の戻り値はシフトJISとする。

EXCEPTION-FILE関数

EXCEPTION-LOCATION関数

EXCEPTION-STATUS関数

EXCEPTION-STATEMENT関数

再帰呼び出し
○
○
○
○
○
○

利用者定義関数
○
○
○
○
○
○

局所場所節（LOCAL-STORAGE SECTION）
○
○
○
○
○
○

原始文操作
○
○
○
○
○
○

自由形式正書法
○
○
○
○
○
○

TYPEDEF句とSAME AS句
○
○
○
○
○
○

条件翻訳
○
○
○
○
×
×
Unicode機能の影響は受けない。
翻訳指令行の定数および-Defineオプションで受け取る値は環境変数LANGに依存する。

区分化
○
○
○
○
○
○

（凡例）

○：制限なく使用できる

△：制限付きで使用できる

×：未対応

注※1

USAGE DISPLAY項目のASCII範囲内は1バイト文字，ASCII範囲外は2バイト以上の文字を指します。

注※2

ファイル名の定数指定で多バイト文字を指定した場合，コンパイルエラーとなります。

注※3

プログラム名などの外部シンボルとなる名称に多バイト文字を含む場合，コンパイルエラーとなります。詳細は，「27.7.2　コンパイル時の制限事項」を参照してください。

注※4

CALL文の定数（プログラム名）またはINVOKE文の定数（メソッド名）に多バイト文字を指定した場合，コンパイルエラーとなります。

表27-8　Unicodeに対応する機能（X/Open）

機能名
Unicode対応状況
備考

HP-UX(IPF)
AIX(32)
AIX(64)
Linux(x86)
Linux(x64)

用途DISPLAY
用途NATIONAL
用途DISPLAY
用途NATIONAL

ASCII範囲内※1
ASCII範囲外※1
ASCII範囲内※1
ASCII範囲外※1

テキスト編成ファイル
○
△※2
△※2
○
△※2
△※2

ファイル共用（ファイルシェア）
○
○
○
○
○
○

コマンド行および環境変数へのアクセス
コマンド行
○
○
○
○
○
×
環境変数LANGに依存して取得する。

環境変数の取得
○
○
○
○
○
×

環境変数の設定
○
×
×
○
×
×
多バイト文字を指定した場合，動作は保証しない。

画面節（SCREEN SECTION）による画面操作
○
×
×
－
－
－
定数に多バイト文字を指定できない句または文がある。詳細については，「27.5.2　入出力機能」の「(6)　画面入出力機能（HP-UX(IPF)，AIX(32)，AIX(64)で有効）」，または「27.7　Unicode機能での制限事項」を参照のこと。

C言語インタフェース
○
○※3
○※3
○
○※3
○※3

インタナショナリゼーション
○
○
○
○
○
○

（凡例）

○：制限なく使用できる

△：制限付きで使用できる

×：未対応

－：該当しない

注※1

USAGE DISPLAY項目のASCII範囲内は1バイト文字，ASCII範囲外は2バイト以上の文字を指します。

注※2

ファイル名の定数指定で多バイト文字を指定した場合，コンパイルエラーとなります。

注※3

プログラム名などの外部シンボルとなる名称に多バイト文字を含む場合，コンパイルエラーとなります。詳細は，「27.7.2　コンパイル時の制限事項」を参照してください。

表27-9　Unicodeに対応する機能（拡張機能）

機能名
Unicode対応状況
備考

HP-UX(IPF)
AIX(32)
AIX(64)
Linux(x86)
Linux(x64)

用途DISPLAY
用途NATIONAL
用途DISPLAY
用途NATIONAL

ASCII範囲内※1
ASCII範囲外※1
ASCII範囲内※1
ASCII範囲外※1

日本語
○
○
○
○
○
○

ブール演算
○
○
○
○
○
○

アドレス操作
○
○
○
○
○
○

1バイト2進およびCOMP-X項目
○
○
○
○
○
○

浮動小数点項目
○
○
○
○
○
○

報告書作成機能
○
×
×
○
×
×

ISAMによる索引編成ファイル機能の拡張（合成キー，逆順読み）
○
○
○
○
○
○
キーとして用途がNATIONALの項目を指定した場合，意図しない行に位置づけられることがある。

HiRDBによる索引編成ファイル
○
○※2
○※2
－
－
－
キーとして用途がNATIONALの項目を指定した場合，意図しない行に位置づけられることがある。

CSV編成ファイル
○
△※2
△※2
○
△※2
△※2

ラージファイル入出力
○
○
○
○
○
○

ファイル入出力拡張機能
○
○
○
○
○
○

画面節（WINDOW SECTION）による画面操作
○
×
×
－
－
－
定数に多バイト文字を指定できない句または文がある。詳細については，「27.5.2　入出力機能」の「(6)　画面入出力機能（HP-UX(IPF)，AIX(32)，AIX(64)で有効）」，または「27.7　Unicode機能での制限事項」を参照のこと。

通信節による画面操作
○※3
×
×
－
－
－

COPY文の接頭辞／接尾辞
○
○
○
○
○
○

プリンタへのアクセス
XMAP3による印刷
○※3
×
×
－
－
－

ファイルのディスク書き込み保証
○
○
○
○
○
○

データコミュニケーション機能
○
○
○
○
○
○

データベース操作機能（ODBCインタフェース）※7
－
－
－
△
△※8
×
埋め込みSQL文中の埋め込み変数名以外（表名，列名，カーソル名，定数，プロシージャ名など）に多バイト文字は書けない。

XDMによるデータベースシミュレーション機能
構造型データベース（XDM/SD）
○
○
○
○
○
○

リレーショナルデータベース（XDM/RD）
○
○
○
○
○
○

マルチスレッド環境での実行
○
○
○
○
○
○

EUCコード
×
×
×
×
×
×

サービスルーチン
基本機能サービスルーチン
○
△
○
○
△
○
引数を画面に出力するサービスルーチンには対応しない。

CGIプログラム作成支援機能
×
×
×
－
－
－

COBOL入出力ルーチン
○
○
○
○
○
○

バイトストリーム入出力
○
○
×
○
○
×
ファイル名に多バイト文字を指定した場合，動作は保証しない。

数字項目のけた拡張機能
○※5
○※5
○※5
○※4
○※4
○※4

動的長基本項目機能
○※6
○※6
○※6
○
○
○

定数長拡張機能
○※6
○※6
○※6
○
○
○

（凡例）

○：制限なく使用できる

△：制限付きで使用できる

×：未対応

－：該当しない

注※1

USAGE DISPLAY項目のASCII範囲内は1バイト文字，ASCII範囲外は2バイト以上の文字を指します。

注※2

ファイル名の定数指定で多バイト文字を指定した場合，コンパイルエラーとなります。

注※3

AIX(64)は未対応です。

注※4

Linux(x86)は未対応です。

注※5

AIX(32)，HP-UX(IPF)は未対応です。

注※6

HP-UX(IPF)は未対応です。

注※7

Unicodeに対応するODBCのSQLデータ型は使用できません。

注※8

埋め込み変数で受け渡しするデータとして多バイト文字が使用できるかどうかは，使用するDBMS環境に依存します。

表27-10　Unicodeに対応する機能（連携機能）

機能名
Unicode対応状況
備考

HP-UX(IPF)
AIX(32)
AIX(64)
Linux(x86)
Linux(x64)

用途DISPLAY
用途NATIONAL
用途DISPLAY
用途NATIONAL

ASCII範囲内※1
ASCII範囲外※1
ASCII範囲内※1
ASCII範囲外※1

XML連携機能
○
○
○
○
○
○

Cosminexus連携機能
○※2
○※2
○※2
○※3
○※3
○※3

（凡例）

○：制限なく使用できる

注※1

USAGE DISPLAY項目のASCII範囲内は1バイト文字，ASCII範囲外は2バイト以上の文字を指します。

注※2

HP-UX(IPF)，AIX(32)は未対応です。

注※3

Linux(x86)は未対応です。

表27-11　Unicodeに対応する機能（テストデバッガ）

機能名
Unicode対応状況
備考

HP-UX(IPF)
AIX(32)
AIX(64)
Linux(x86)
Linux(x64)

用途DISPLAY
用途NATIONAL
用途DISPLAY
用途NATIONAL

ASCII範囲内※
ASCII範囲外※
ASCII範囲内※
ASCII範囲外※

実行時デバッグ機能
○
△
△
○
△
△
異常終了時要約リスト，データ領域ダンプリストはシフトJISで出力されるが，リスト中に含まれるUnicode文字は変換されない。

テストデバッグ機能
バッチモード
○
○
○
○
○
○

ラインモード
○
○
○
○
○
○

カバレージ機能
バッチモード
○
○
○
○
○
○

（凡例）

○：制限なく使用できる

△：制限付きで使用できる

注※

USAGE DISPLAY項目のASCII範囲内は1バイト文字，ASCII範囲外は2バイト以上の文字を指します。

＜この節の構成＞

27.5.1　基本機能

27.5.2　入出力機能

27.5.3　CBLNCNVサービスルーチン

27.5.4　組み込み関数（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

27.5.1　基本機能

ここでは，転記，文字列操作文などの基本機能での規則について説明します。

＜この項の構成＞

(1)　UnicodeとCOBOLの文字数の関係

(2)　文字の長さ

(3)　空白文字，表意定数SPACE，および転記の空白詰めの文字コード

(4)　表意定数ZEROの文字コード

(5)　文字コードを変換するプログラム例

(6)　用途DISPLAYと用途NATIONALとの間の変換

(7)　入出力データの変換

(8)　シフトJIS範囲外の文字

(9)　データの比較

(1)　UnicodeとCOBOLの文字数の関係

(a)　UnicodeとCOBOLの文字数

シフトJISでは，1文字のバイト数は半角1バイト，全角2バイトと決まっていますが，Unicodeでは，1文字のバイト数は文字によって異なります。

例えば，UTF-8では半角英数字は1文字1バイトですが，半角かたかなは1文字3バイト，全角日本語は3～8バイトの可変長になります。また，UTF-16でも，全角日本語は2バイト，4バイト（サロゲートペア文字），6～8バイト（IVS文字）の可変長となります。

ただし，HP-UX(IPF)の場合，サロゲートペア文字およびIVS文字は使用できません。

一方，COBOLの文字項目は，1文字のバイト数は文字に関係なく固定となります。

例えば，英数字項目（PIC X）では，1文字は1バイト固定，日本語項目（PIC N）では，1文字は2バイト固定となります。このため，COBOLの文字項目にUnicodeデータを格納する場合，見た目の1文字とCOBOLが扱う1文字は異なります。

見た目の1文字（Character）と区別するため，PICTURE句に指定する長さをけた（COBOL2002規格では「文字位置」（Character Position））と呼びます。

サロゲートペアやIVSを含めて，字類が英字，英数字，および日本語の項目に格納した各種文字のバイト数，けた数，文字数，および見た目幅の値を次の表に示します。なお，文字の長さの具体例については，「(2)　文字の長さ」を参照してください。

表27-12　字類が英字，英数字の項目の場合（UTF-8エンコーディング）

説明 | バイト数 | けた数※1 | 文字数 | 見た目幅
半角※2 | ASCII文字 | 1 | 1 | 1 | 1
半角かたかな | 3 | 3 | 1 | 1
その他の半角文字※3 | 3 | 3 | 1 | 1
全角（日本語） | Unicodeの基本多言語面の文字 | 2～3 | 2～3 | 1 | 2
Unicodeの追加漢字面の文字（UTF-16のサロゲートペアで表される文字） | 4 | 4 | 1 | 2
IVSで表される文字 | 7～8 | 7～8 | 1 | 2

注※1

PICTURE句の文字列に指定した値です。

注※2

次の範囲をUnicodeの半角文字とみなします。

U+0000～U+007F，U+FF61～U+FFDC，U+FFE8～U+FFEE

注※3

その他の半角文字には，半角の矢印（[図データ]，[図データ]）などがあります。コード範囲はU+FFE8～U+FFEEです。

表27-13　字類が日本語の項目の場合（UTF-16エンコーディング）

説明 | バイト数 | けた数※1 | 文字数 | 見た目幅
半角※2 | ASCII文字 | 2 | 1 | 1 | 1
半角かたかな | 2 | 1 | 1 | 1
その他の半角文字※3 | 2 | 1 | 1 | 1
全角（日本語） | Unicodeの基本多言語面の文字 | 2 | 1 | 1 | 2
Unicodeの追加漢字面の文字（UTF-16のサロゲートペアで表される文字） | 4 | 2 | 1 | 2
IVSで表される文字 | 6または8 | 3または4 | 1 | 2

注※1

PICTURE句の文字列に指定した値です。

注※2

次の範囲をUnicodeの半角文字とみなします。

U+0000～U+007F，U+FF61～U+FFDC，U+FFE8～U+FFEE

注※3

その他の半角文字には，半角の矢印（[図データ]，[図データ]）などがあります。コード範囲はU+FFE8～U+FFEEです。

(b)　結合文字

結合文字（例：「か」＋「゛」⇒「が」）が格納されている場合は，2文字として扱います。

(c)　サロゲートペア文字

Unicode機能でのサロゲートペア文字は，次の点を考慮してプログラミングすることで，ユーザデータとして使用できます。なお，IVSの異体字セレクタはサロゲートペア文字で表すため，IVSも同様に注意が必要です。

COBOLプログラムでサロゲートペア文字を含むデータ使用時の注意事項

データ定義での注意事項
サロゲートペア文字は，4バイトで１文字を表します。Unicode（UTF-16）で1文字が2バイトで表される範囲の文字だけ使う場合，COBOL2002のUnicode機能では，PIC Nの日本語項目1けたで1文字を扱うことができます。したがって，サロゲートペア文字を含むデータが格納されるデータ項目は，日本語項目2けたでサロゲートペア文字の1文字を扱うことになる点に注意してください。

手続き部での注意事項
サロゲートペア文字が格納されるデータ領域が，サロゲートペア文字1文字に対してPIC N(2)の日本語項目2けたで定義されていれば，転記や比較などで問題はありません。
ただし，文字列中の文字位置を固定で参照・更新されるような処理や，部分参照での文字位置や長さで文字数を意識しているような処理では，サロゲートペア文字1文字に対して日本語項目2けたであることを考慮した処理にする必要があります。

テストデバッガでの注意事項
サロゲートペア文字が格納されたデータ領域を画面に表示する場合，16進で表示させてください。データ属性で表示させた場合，「〓」で表示されます。

上記以外の注意事項
次に示す機能でサロゲートペア文字を含むデータ値を使用した場合，動作は保証しません。
・データコミュニケーション機能
・XML連携機能

(2)　文字の長さ

シフトJISとUTF-8の各文字コードの文字の長さの例を次に示します。

（例1）

UTF-8の場合，半角かたかなは3バイトで表現するため，TEST-DATA1は英数字で9けた必要となります。

全角文字の文字コードの例を次に示します。

（例2）

UTF-16の場合，Unicodeの基本多言語面の全角文字は2バイトで表現するため，TEST-DATA2は2けた必要となります。UTF-8の場合，Unicodeの基本多言語面の全角文字は3バイトで表現するため，TEST-DATA3は6けた必要となります。

（例3）

UTF-16でサロゲートペア文字を扱う場合，次の例では3文字を表すのに日本語項目で5けた（10バイト）必要となります。

（例4）

UTF-16でIVS文字を扱う場合，基となる文字（基底文字）に異体字セレクタと呼ばれる4バイトが付加されるため，次の例では3文字を表すのに日本語項目で5けた（10バイト）必要となります。

（例5）

UTF-8でIVS文字を扱う場合，基となる文字（基底文字）に異体字セレクタと呼ばれる4バイトが付加されるため，次の例では3文字を表すのに英数字項目で13けた（13バイト）必要となります。

(3)　空白文字，表意定数SPACE，および転記の空白詰めの文字コード

空白文字，表意定数SPACE，および転記の空白詰めの文字コードについて，次に示します。

用途がDISPLAYの場合，UTF-8の半角空白（X'20'）を設定します。

用途がNATIONALの場合，バイトオーダによって次の文字コードを設定します。

バイトオーダがリトルエンディアンの場合，全角空白（X'0030'）とします。

バイトオーダがビッグエンディアンの場合，全角空白（X'3000'）とします。

(4)　表意定数ZEROの文字コード

表意定数ZEROの文字コードについて，次に示します。

用途がDISPLAYの場合，UTF-8の半角ゼロ（X'30'）を設定します。

用途がNATIONALの場合，バイトオーダによって次の文字コードを設定します。

バイトオーダがUTF-16LEの場合，全角ゼロ（X'10FF'）とします。

バイトオーダがUTF-16BEの場合，全角ゼロ（X'FF10'）とします。

(5)　文字コードを変換するプログラム例

Unicode機能を使用するプログラム実行時には，用途がDISPLAY／NATIONALの項目に格納される文字データはすべてUTF-8／UTF-16として処理します。たとえば，ファイルから読み込んだレコード項目にシフトJISの文字データが格納されることで，用途がDISPLAY／NATIONALの項目にUTF-8／UTF-16以外の文字データが格納される場合は，コード変換ライブラリを使用して入力データをUTF-8／UTF-16へ変換する必要があります。

コード変換ライブラリを使用してシフトJISの文字データをUTF-8へ変換するコーディング例を次に示します。

コンパイル例

HP-UX(IPF)の場合

ccbl2002 -UniObjGen sample1.cbl  -L /opt/hcodecnv32/lib -lhcodecnv

AIX(32)の場合

ccbl2002 -UniObjGen sample1.cbl  -L /opt/hcodecnv/lib -lhcodecnv -brtl

AIX(64)の場合

ccbl2002 -UniObjGen sample1.cbl  -L /opt/hcodecnv64/lib -lhcodecnv64 -brtl

Linux(x86)の場合

ccbl2002 -UniObjGen sample1.cbl  -L /opt/hcodecnv/lib -lhcodecnv

Linux(x64)の場合

ccbl2002 -UniObjGen sample1.cbl  -L /opt/hcodecnv64/lib -lhcodecnv64

プログラム例

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
      DATA DIVISION.
      WORKING-STORAGE SECTION.
     *>コード変換ライブラリ提供の登録集原文の取り込み
      COPY 'codeconv.cbl'.
      01 CONV-TABLE-P   ADDRESS.
      01 DEFAULT-CODE1  PIC X(1).
      01 DEFAULT-CODE2  PIC X(1).
      01 TABLE-FULLPATH ADDRESS VALUE NULL.
      01 MAPPING-FULLPATH ADDRESS VALUE NULL.
      01 RETCODE        PIC 9(9) USAGE COMP.
      01 SYSTEM-ERRCODE PIC 9(9) USAGE COMP.
      01 INLEN          PIC 9(9) USAGE COMP.
      01 INBUF          PIC X(100).
      01 OUTLEN         PIC 9(9) USAGE COMP.
      01 OUTBUF         PIC X(300).
      PROCEDURE DIVISION.
          CALL 'CodeConvOpen' USING
              BY VALUE     CCF-SJIS-UTF
                           0
              BY REFERENCE DEFAULT-CODE1
                           DEFAULT-CODE2
              BY VALUE     TABLE-FULLPATH
                           MAPPING-FULLPATH
              BY REFERENCE RETCODE
                           SYSTEM-ERRCODE
              RETURNING CONV-TABLE-P.
          IF CONV-TABLE-P NOT = NULL THEN
              COMPUTE CCT-CODECONVTABLEA = CONV-TABLE-P
                        ：
              （INBUFにシフトJISデータを格納）
                        ：
              MOVE 100 TO INLEN
              MOVE 300 TO OUTLEN
              CALL 'CodeConvString' USING
                  BY REFERENCE CCT-CODECONVTABLE
                               INLEN
                               INBUF
                               OUTLEN
                               OUTBUF
          ELSE      *>エラー時の処理
                   ：
          END-IF.
          CALL 'CodeConvClose' USING
              BY REFERENCE CCT-CODECONVTABLE
                           SYSTEM-ERRCODE.
          DISPLAY 'INBUF=' INBUF.
          DISPLAY 'OUTBUF=' OUTBUF.
          EXIT PROGRAM.

(6)　用途DISPLAYと用途NATIONALとの間の変換

用途がDISPLAYの項目と，用途がNATIONALの項目との間で変換（転記）する場合，コード変換が必要です。コード変換する方法を次に示します。

DISPLAY-OF関数，NATIONAL-OF関数を使用する

コード変換ライブラリを使用してUTF-8とUTF-16を相互に変換する

(7)　入出力データの変換

CSV編成ファイルを除き，入出力データは無変換とします。入出力データとは，次の機能使用時に入出力されるデータのことです。

ファイル入出力

少量入出力（DISPLAY文，ACCEPT文）

画面機能（HP-UX(IPF)，AIX(32)，AIX(64)で有効）

データベース操作機能（Linux(x86)，Linux(x64)で有効）

サービスルーチン

(8)　シフトJIS範囲外の文字

シフトJIS範囲外の文字については，16進英数字定数または16進日本語文字定数を使用し，UTF-8またはUTF-16のコード値を直接指定してください。このとき，16進日本語文字定数は，常にUTF-16BEで指定してください。COBOL2002コンパイラは，-UniEndianオプションの指定に従い，16進日本語文字定数の文字コードを変換します。

(9)　データの比較

データの比較は，文字コードによるバイナリ比較となります。そのため，用途がNATIONALの項目または日本語文字定数の大小比較はバイトオーダによって結果が異なります。

27.5.2　入出力機能

Unicode機能では，順編成ファイル，相対編成ファイル，および索引編成ファイルについては，文字コードを意識することなく，入出力できます。しかし，テキスト編成ファイルおよびCSV編成ファイルは，ほかのアプリケーションで参照可能とするため，文字コードをUTF-8に統一します。

＜この項の構成＞

(1)　テキスト編成ファイル

(2)　CSV編成ファイル

(3)　順編成ファイル，相対編成ファイル，および索引編成ファイルを使用した入出力

(4)　HiRDBによる索引編成ファイル使用時の，HiRDBのクライアント環境変数PDCLTCNVMODEの指定

(5)　ACCEPT／DISPLAY文による入出力

(6)　画面入出力機能（HP-UX(IPF)，AIX(32)，AIX(64)で有効）

(7)　プリンタへのアクセス（HP-UX(IPF)，AIX(32)で有効）

(1)　テキスト編成ファイル

テキスト編成ファイルでは，UTF-8で作成されたファイルの入出力ができます。この機能の規則を次に示します。

使用するテキスト編成ファイルはUTF-8で作成してください。また，テキスト編成ファイルに関連づけられたレコード記述項は，用途をDISPLAYに統一してください。用途をDISPLAYに統一していない場合は，コンパイルエラーとなります。

新規ファイルを作成時，該当するファイルにUnicodeシグニチャとして（X'EFBBBF'）の3バイトを付加します。

Unicodeシグニチャを含むテキスト編成ファイルを入力する場合，Unicodeシグニチャは自動的に読み飛ばします。そのため，ユーザがUnicodeシグニチャを意識する必要はありません。

COBOLプログラム以外で，COBOLで作成するテキスト編成ファイルを処理するとき，Unicodeシグニチャを意識しなければなりません。
ただし，次に示すテキスト編成ファイルのUnicodeシグニチャ出力の切り替え機能を使用すると，Unicodeシグニチャを出力しないファイルを作成できるため，Unicodeシグニチャを意識する必要がなくなります。

(a)　テキスト編成ファイルのUnicodeシグニチャ出力の切り替え機能（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

新規ファイル作成時にUnicodeシグニチャを出力しないようにする場合，実行時環境変数CBLD_ファイル名にTEXTSUPPRESSBOMを設定するか，または実行時環境変数CBLTEXTSUPPRESSBOMを設定します。

なお，この機能はテキスト編成ファイル作成時だけ有効です。

ファイル単位に指定する方法

形式

CBLD_ファイル名=｛TEXTSUPPRESSBOM｜NOTEXTSUPPRESSBOM｝

機能

この環境変数にTEXTSUPPRESSBOMが指定された場合，実行単位中の任意の新規作成のテキスト編成ファイルに対してUnicodeシグニチャを出力しません。

この環境変数にNOTEXTSUPPRESSBOMが指定された場合，テキスト編成ファイルのUnicodeシグニチャ出力の切り替え機能は無効となります。

実行単位中のすべてのファイルに指定する方法

形式

CBLTEXTSUPPRESSBOM=YES

機能

この環境変数にYESが指定された場合，実行単位中のすべての新規作成のテキスト編成ファイルに対してUnicodeシグニチャを出力しません。

この環境変数にYESの指定がないか，またはYES以外が指定された場合，テキスト編成ファイルのUnicodeシグニチャ出力の切り替え機能は無効となります。

規則

ファイル単位に指定する方法と実行単位中のすべてのファイルに指定する方法を併用した場合，ファイル単位に指定する方法が優先されます。

環境変数CBLTEXTSUPPRESSBOMと環境変数CBLD_ファイル名の指定の組み合わせによるUnicodeシグニチャの出力状態を次の表に示します。

表27-14　環境変数CBLTEXTSUPPRESSBOMと環境変数CBLD_ファイル名の指定の組み合わせによるUnicodeシグニチャの出力状態

CBLTEXTSUPPRESSBOM
CBLD_ファイル名

TEXTSUPPRESSBOM
NOTEXTSUPPRESSBOM
指定なし

YES
出力しない
出力する
出力しない

環境変数指定なし，
または
YES以外
出力しない
出力する
出力する

(2)　CSV編成ファイル

CSV編成ファイルではUTF-8で作成されたファイルの入出力ができます。この機能の規則を次に示します。

(a)　CSV編成ファイルの入出力

CSV編成ファイルを入力する場合，対象ファイルはUTF-8で作成してください。対象ファイルのレコード記述項に用途がNATIONALの項目が定義されている場合，入出力時にUTF-8／UTF-16の相互変換をします。そのため，CSV編成ファイルにUTF-8以外の文字コードが含まれる場合，動作は保証しません。CSV編成ファイルの入出力について次に示します。

入力したデータに対応する項目の用途がNATIONALの場合，実行時環境変数CBLUNIENDIANの指定に従い，UTF-8からUTF-16に自動変換し，データ項目に格納します。

出力するレコード領域に用途がNATIONALの項目を含む場合，該当する項目の文字コードをUTF-16からUTF-8に自動変換することで，CSV編成ファイルの文字コードをUTF-8に統一します。

CSV編成ファイルでは，用途がNATIONALの項目の文字コードをUTF-16からUTF-8に変換することで，プログラム上のサイズと実際のレコードサイズが異なります。

（例1）

      IDENTIFICATION DIVISION.
            ：
      DATA DIVISION.
      FILE SECTION.
      FD FILE01.
      01 REC01 PIC X(5) USAGE DISPLAY.
      PROCEDURE DIVISION.
            ：
          MOVE 'ABCDE' TO REC01.
          WRITE REC01.

この場合，データ項目「REC01」は用途がDISPLAYなので，文字コードはUTF-8であり，実際にREC01に格納されたデータとファイルに書き出されたデータサイズは等しくなります。

（例2）

      IDENTIFICATION DIVISION.
            ：
      DATA DIVISION.
      FILE SECTION.
      FD FILE02.
      01 REC02 PIC N(5) USAGE NATIONAL.
      PROCEDURE DIVISION.
            ：
          MOVE NC'あいうえお' TO REC02.
          WRITE REC02.

この場合，データ項目「REC02」は用途がNATIONALであり，文字コードはUTF-16なので，ファイルへ書き出すときにUTF-8に自動変換します。UTF-16（2バイトの固定）からUTF-8（可変。日本語は3バイト）に変換することで，データサイズは大きくなります。

（例3）

      IDENTIFICATION DIVISION.
            ：
      DATA DIVISION.
      FILE SECTION.
      FD FILE02.
      01 REC02 PIC N(5) USAGE NATIONAL.
      PROCEDURE DIVISION.
            ：
          READ  FILE02.

例2で出力したデータを入力するとき，入力データはUTF-8で15バイトですが，入力時にUTF-16に変換することで10バイトとなり，データサイズは小さくなります。

(b)　Unicodeシグニチャ

CSV編成ファイルは，Unicodeシグニチャを含まないでください。CSV編成ファイルにUnicodeシグニチャが含まれる場合，データとして扱います。

(3)　順編成ファイル，相対編成ファイル，および索引編成ファイルを使用した入出力

順編成ファイル，相対編成ファイル，および索引編成ファイルを使用した入出力では，用途がNATIONALの項目についてUTF-16からUTF-8への自動変換はしません。この機能の規則を次に示します。

順編成ファイル，索引編成ファイル，および相対編成ファイルの入力時，ファイル中の用途がNATIONALの項目に対応するUTF-16データと，実行時環境変数CBLUNIENDIANのバイトオーダを一致させてください。

(4)　HiRDBによる索引編成ファイル使用時の，HiRDBのクライアント環境変数PDCLTCNVMODEの指定

HiRDBによる索引編成ファイルを使用している場合，HiRDBのクライアント環境変数PDCLTCNVMODEには，NOUSE（デフォルト値）を指定してください。ほかの値を指定した場合，不当なコード変換によって入出力エラーになることがあります。

(5)　ACCEPT／DISPLAY文による入出力

(a)　ACCEPT文による入力

ACCEPT文で外部から入力したデータは，文字コードを変換しません。HP-UX(IPF)，AIX(32)，AIX(64)の場合，外部から入力することで，用途がDISPLAY／NATIONALの項目にUTF-8／UTF-16以外の文字データが格納されるときは，コード変換ライブラリを使用して入力データをUTF-8／UTF-16へ変換してください。なお，Linux(x86)，Linux(x64)の場合，ACCEPT文で外部から入力したデータを用途がNATIONALの項目に格納できません。格納する場合の動作は保証しません。

(b)　DISPLAY文による出力

DISPLAY文で用途がDISPLAY／NATIONALの項目の内容を画面上に出力するとき，文字コードは変換しません。出力する内容がUnicodeの場合，文字情報を正しく出力するためにはコード変換ライブラリを使用し文字コードを変換してください。

ただし，Linux(x86)，Linux(x64)の場合，UTF-8ロケールでの動作となるため，出力する内容がUTF-8のときは文字コードの変換は必要ありません。

(c)　注意事項

DISPLAY文でファイルに出力する場合，指定した項目の用途にかかわらず，改行コードはX'0A'となります。

(6)　画面入出力機能（HP-UX(IPF)，AIX(32)，AIX(64)で有効）

日本語，半角かたかななど，Unicodeの多バイト文字をCOBOLプログラムから直接画面表示はできません。

(7)　プリンタへのアクセス（HP-UX(IPF)，AIX(32)で有効）

日本語，半角かたかななど，Unicodeの多バイト文字をCOBOLプログラムから直接印刷はできません。

27.5.3　CBLNCNVサービスルーチン

CBLNCNVサービスルーチンを呼び出すと，UTF-8で記述された半角文字からUTF-16で記述された全角文字への変換ができます。CBLNCNVサービスルーチンについては，「29.7.1　CBLNCNV」を参照してください。

＜この項の構成＞

(1)　CBLNCNVサービスルーチンでの文字変換

(2)　CBLNCNVサービスルーチンの戻り値

(1)　CBLNCNVサービスルーチンでの文字変換

CBLNCNVサービスルーチンでの文字変換は，次の順序でします。

UTF-8のコード範囲の半角文字をUTF-8の全角文字コードに変換します。

変換したUTF-8の全角文字コードを，実行時環境変数CBLUNIENDIANの指定に従いUTF-16LEまたはUTF-16BEに変換します。

(2)　CBLNCNVサービスルーチンの戻り値

Unicode機能でのCBLNCNVサービスルーチンの戻り値について次に示します。

コード変換ライブラリが正しくインストールされていない場合，戻り値として-2を返します。

コード変換ライブラリがエラーを返し，コード変換に失敗した場合，戻り値として-3を返します。主なエラーの要因を次に示します。

送り出し側作用対象の項目に，UTF-16に変換できない文字が含まれている。

送り出し側作用対象の項目が，日本語文字や半角かたかななどの多バイト文字の途中で切れている。

その他のエラーの要因については，「コード変換ライブラリのマニュアル」のCodeConvString関数の説明を参照してください。

27.5.4　組み込み関数（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

＜この項の構成＞

(1)　Unicodeに対応した組み込み関数

(2)　Unicodeに対応した組み込み関数の注意事項

(1)　Unicodeに対応した組み込み関数

Unicodeの文字操作や文字数／けた数の取得，コード変換をする組み込み関数を次の表に示します。これらの組み込み関数の形式や使用例などの詳細は，マニュアル「COBOL2002　言語　拡張仕様編　24.2 組み込み関数」を参照してください。

表27-15　Unicodeに対応した組み込み関数

項番 | 用途 | 組み込み関数名 | 概要
1 | 文字列の取り出し | SUBSTRING | 字類が英字，英数字，または日本語のデータ項目から部分文字列を返します。
2 | 文字数の取得 | COUNT-CHAR | 字類が英字，英数字，または日本語のデータ項目の文字数を返します。
3 | けた数の取得 | LENGTH-OF-SUBSTRING | 字類が英字，英数字，または日本語のデータ項目の部分文字列のけた数を返します。
4 | コード変換 | DISPLAY-OF | 字類が日本語のデータ項目中のUTF-16の文字列をUTF-8の文字列に変換して返します。
5 | NATIONAL-OF | 字類が英数字のデータ項目中のUTF-8の文字列をUTF-16の文字列に変換して返します。

なお，Unicodeに対応した組み込み関数を使用した場合，Unicode文字の特性上，文字の判定や取得する処理の実行時間が増加する場合や，動作を保証できない場合があります。詳細は，「(2)　Unicodeに対応した組み込み関数の注意事項」を参照してください。

(2)　Unicodeに対応した組み込み関数の注意事項

Unicode文字は特性上，シフトJISや日本語EUCと比べて1文字のサイズが多様なため，文字の判定や取得する処理の実行時間が増加します。シフトJISや日本語EUCの既存のプログラムをUnicode機能に移行してUnicodeに対応した組み込み関数を使用する場合は，実行時間が大きく増える場合があります。そのため，次の点に注意して組み込み関数を使用してください。

1文字のサイズが可変となる可能性がないデータ項目※の場合は，Unicodeに対応した組み込み関数を使用しないで，部分参照を使用して処理する。
注※
例えば，半角英数字だけ格納される英数字項目や，サロゲートペアおよびIVSを含む可能性がない日本語項目などが該当します。

Unicodeに対応した組み込み関数は，文字数の考慮が必要な処理の場合だけ使用する。
例えば，文字列の取り出しで，けた数と文字数の両方がわかっている場合は，けた数による部分参照を使用して処理します。

実行時環境変数CBLLANGにUNICODEを指定していない場合に，Unicodeに対応した組み込み関数を実行すると，実行時エラーが発生してプログラムの実行が中止します。

Unicodeに対応した組み込み関数は，Unicode機能を使用する場合だけ使用できます。

Unicodeの文字を格納するデータ項目のけた数が，格納しようとする文字の長さより短い場合，データ項目のけた数までのデータが格納されます。
Unicodeに対応した組み込み関数には，格納されるUnicode文字の長さを考慮したけた数を定義したデータ項目を指定する必要があります。

英数字集団項目の従属項目に，字類が英字および英数字の項目と，字類が日本語の項目が混在している場合，各項目の文字列をUnicode文字として扱えないことがあります。そのため，英数字集団項目の従属項目は，字類が英字および英数字の項目だけを使用してください。

組み込み関数の引数の指定に誤りがある場合は，次の表に示すように，実行時にEC-ARGUMENT-FUNCTION例外が発生します。

要因 | 組み込み関数名
COUNT-CHAR | DISPLAY-OF | LENGTH-OF- SUBSTRING | NATIONAL-OF | SUBSTRING
引数1の文字コードが不当な値である。※1 | ○ | ○ | ○ | ○ | ○
引数1の文字列中にある異体字セレクタが不当な位置にある。※2 | ○ | － | ○ | － | ○
引数2と引数3が一意名または算術式で，値が正の整数でない。 | － | － | ○ | － | ○
引数2で指定する開始位置，または引数2で指定する開始位置から引数3で指定する長さだけ進めた文字位置が引数1の終端を超えている。 | － | － | ○ | － | ○
引数2で指定する開始位置，または引数2で指定する開始位置から引数3で指定する長さだけ進めた文字位置が全角文字の途中である。※3 | － | － | ○ | － | ○

（凡例）

○：EC-ARGUMENT-FUNCTION例外が成立する。

－：EC-ARGUMENT-FUNCTION例外が成立しない。

注※1

文字コードが不当な値の場合で，実行時エラーとなる例を次に示します。

（例）

01 DATA1 PIC X(30)
VALUE X'EFBDB1EFBDB2EFBDB3EFBDB4EFFDB5EFBDB6EFBDB7EFBDB8EFBDB9EFBDBA'.
*> ｱｲｳｴｵｶｷｸｹｺにしたいが，14バイト目が不正（BDのはずがFDになっている。
*> この位置にFDがあるのはUTF-8として不正な文字と扱う）

MOVE FUNCTION SUBSTRING(DATA1, 2, 4) TO DATA2.

<実行結果>

KCCC2310R-S
組み込み関数処理中に文字コード不正を検出しました。
プログラム名＝MAIN
行番号／欄＝000022/15
関数名＝SUBSTRING
詳細情報＝引数1の14バイト目で文字コード不正を検出しました。
4バイト目以降:efbdb2efbdb3efbdb4effdb5efbdb6efbdb7efbdb8

「nバイト目以降:」の行には，不正を検出した位置とその前後10バイトが表示されます。上記の例では，14バイト目で不正を検出したため，前の10バイト（4～13バイト目），不正バイト（14バイト目），および後の10バイト（15～24バイト目）の計21バイトが表示されています。

注※2

次の場合が該当します。

異体字セレクタが文字列の先頭にある

異体字セレクタが連続している

（例）

FD FILE1.
01 GRP01 GROUP-USAGE NATIONAL.
 02  DATA1 PIC N(1).
 02  DATA2 PIC N(2).

01 DATA3    PIC N(6).

READ FILE1.
*>UTF-16の'葛'(X'845BDB40DD03')をファイルから読み取る。
*>このときDATA1にX'845B'，DATA2にX'DB40DD03'が転記される。
MOVE FUNCTION SUBSTRING(DATA2, 1) TO DATA3.
*>DATA2の文字列は先頭から異体字セレクタとなっているため，不正な文字として扱う。

注※3

引数に指定した開始位置が，データ項目中の全角文字の途中となった場合の例を次に示します。

（例1）

01 DATA1 PIC X(4) VALUE 'あBC'.

MOVE FUNCTION SUBSTRING(DATA1, 2, 2 WIDTH) TO DATA2.
*>引数2で指定する開始位置は'あ'の途中を指しているため文字を正確に取り出せない。

（例2）

01 DATA1 PIC X(4) VALUE 'ABう'.

MOVE FUNCTION SUBSTRING(DATA1, 2, 2 WIDTH) TO DATA2.
*>引数2で指定する開始位置から引数3の長さだけ進めた文字位置は'う'の途中を
*> 指しているため文字を正確に取り出せない。

なお，IVSは基底文字＋異体字で構成されます。ただし，基底文字だけでもUnicode文字として扱われるため，部分文字列として取得してもエラーになりません。

27.6　入出力情報と取り扱う文字コード

Unicode機能を使用している場合，入出力時にデータをUnicode（UTF-8とUTF-16の混在）として扱わないで，固定の文字コードとして取り扱う情報があります。

入出力情報と取り扱う文字コードの関係を次の表に示します。なお，次の表に記載していない入出力情報は，Unicodeとして取り扱います。

表27-16　入出力情報と取り扱う文字コードの関係

分類
入力／出力
入出力情報
取り扱う文字コード

HP-UX(IPF)
AIX(32)
AIX(64)
Linux(x86)
Linux(x64)

翻訳時
入力
COBOLソースプログラム（登録集原文を含む）
シフトJIS
シフトJIS

外部で設定された環境変数の設定値
シフトJIS
UTF-8※1

コマンドラインの引数
シフトJIS
UTF-8※1

出力
コンパイラメッセージ
シフトJIS
UTF-8

コンパイルリストファイル
シフトJIS
シフトJIS

TDコマンド格納ファイル
シフトJIS
シフトJIS

実行時
入力
外部で設定された環境変数の設定値
シフトJIS
UTF-8※1

コマンドラインの引数
シフトJIS
UTF-8※1

ACCEPT文で入力したデータ
シフトJIS
UTF-8

プレロードリストファイル
シフトJIS
UTF-8※4

出力
実行時メッセージ
シフトJIS
UTF-8※3

異常終了時要約情報リスト
シフトJIS
UTF-8

データ領域ダンプリスト
シフトJIS
UTF-8※3

入出力サービスルーチンデバッグリスト
シフトJIS
UTF-8

プログラム検索トレース
シフトJIS
UTF-8

リポジトリ管理ツール
出力
エラーメッセージ
シフトJIS
シフトJIS※2

リポジトリファイル情報リスト
シフトJIS
シフトJIS※2

テストデバッガ
入力
TDコマンド格納ファイル
シフトJIS
シフトJIS

外部で設定された環境変数の設定値
シフトJIS
UTF-8※1

コマンドラインの引数
シフトJIS
UTF-8※1

出力
モニタ表示出力ファイル（ログ出力ファイル）
シフトJIS
UTF-8

結果蓄積ファイル
シフトJIS
UTF-8

結果出力ファイル
シフトJIS
UTF-8

エラーメッセージ
シフトJIS
UTF-8

カバレージ
入力
外部で設定された環境変数の設定値
シフトJIS
UTF-8※1

コマンドラインの引数
シフトJIS
UTF-8※1

出力
カウント情報リストファイル
シフトJIS
UTF-8

カバレージ情報リストファイル
シフトJIS
UTF-8

実行結果出力ファイル
シフトJIS
UTF-8

エラーメッセージ
シフトJIS
UTF-8

注※1

Unicodeで多バイトとなる文字は使用できません。使用した場合，動作は保証しません。

注※2

エラーメッセージおよびリポジトリファイル情報リストは英文（ASCII範囲）で出力されます。

注※3

Linux(x86)，Linux(x64)の場合，EXTERNAL句を指定したデータ名およびファイル名にUnicodeで多バイトとなる文字は使用できません。使用した場合の動作は保証しません。

注※4

Unicodeで多バイトとなる文字は使用できません。使用した場合の動作は保証しません。ただし，コメントに対しては使用できます。

27.7　Unicode機能での制限事項

ここでは，Unicode機能での制限事項を説明します。

＜この節の構成＞

27.7.1　Unicodeに対応していない機能

27.7.2　コンパイル時の制限事項

27.7.3　実行時の制限事項

27.7.1　Unicodeに対応していない機能

Unicodeに対応していない機能を次に示します。

＜この項の構成＞

(1)　Unicodeを使用した場合，動作を保証しない機能

(2)　コンパイルエラーとなる機能（Linux(x86)，Linux(x64)の場合）

(1)　Unicodeを使用した場合，動作を保証しない機能

CGIプログラム作成支援機能（HP-UX(IPF)，AIX(32)で有効）

(2)　コンパイルエラーとなる機能（Linux(x86)，Linux(x64)の場合）

HiRDBによる索引編成ファイル

27.7.2　コンパイル時の制限事項

日本語，半角かたかななど，Unicodeで多バイト文字となる文字を含む語，英数字定数または日本語文字定数を，次の個所に指定した場合，コンパイルエラーとなります。

表27-17　UTF-8の多バイト文字およびUTF-16の文字が指定できない個所

分類
翻訳時にエラーとなる個所

翻訳グループの構造

END PROGRAMの定数1およびEND METHODの定数1

見出し部

プログラム名段落のプログラム名1／定数2

メソッド名段落のメソッド名1／定数2

関数名段落の利用者定義関数名1※3

クラス名段落のクラス名1，およびインタフェース名段落のインタフェース名1※3

環境部

ALPHABET句の定数指定の定数1／2／3

ASSIGN句の定数1

CLASS句の定数5／6

CURRENCY SIGN句の定数7

リポジトリ段落のクラス指定子，インタフェース指定子，関数指定子，およびプロパティ指定子※3

特殊名段落の定数10※5

データ部

CODE句の定数1

手続き部

CALL文の定数1

CANCEL文の定数1

ENTRY文の定数

DISPLAY文の定数1／2／3※1※2

INVOKE文の定数1

STOP文の定数2※2

組み込み関数

ADDR関数の引数1

画面機能（SCREEN／WINDOW SECTION）※4

DISPLAY文の定数1（SCREEN SECTION）

PICTURE句FROM指定の定数1（SCREEN SECTION）

PROMPT句の定数1（SCREEN SECTION）

VALUE句の定数1（SCREEN SECTION）

RESET句の定数1（WINDOW SECTION）

VALUE句の定数1（WINDOW SECTION）

注※1

画面への出力，環境変数へのアクセス，コマンドラインへのアクセス

注※2

Linux(x86)，Linux(x64)の場合，DISPLAY文の定数1およびSTOP文の定数2に，Unicodeで多バイトとなる文字を含む英数字定数を指定できます。

注※3

Linux(x86)，Linux(x64)で有効です。

注※4

HP-UX(IPF)，AIX(32)，AIX(64)で有効です。

注※5

AIX(32)，AIX(64)，Linux(x86)，Linux(x64)の場合，コンパイラ環境変数CBLV3UNICODEにYESを指定すると，-UniObjGenオプションと-CompatiV3オプションを同時に指定できます。そのため，特殊名段落の定数10が使用できるようになりますが，Unicodeで多バイトとなる文字を指定した場合，コンパイルエラーとなります。

16進英数字定数または16進日本語文字定数と，文字定数が混在した連結式を指定した場合，コンパイルエラーとなります。

Linux(x86)，Linux(x64)の場合，次のファイル名を指定する個所に，Unicodeで多バイトとなる文字を指定した場合，コンパイルエラーとなります。

COPY文の定数1

INCLUDE文の原文名（定数で指定した場合）

Linux(x86)，Linux(x64)の場合，コマンドライン引数および環境変数の設定値に，Unicodeで多バイトとなる文字を使用した場合，動作は保証しません。

Linux(x86)，Linux(x64)の場合，次に示す項目にUnicodeで多バイトとなる文字は使用できません。使用した場合の動作は保証しません。

EXTERNAL句を指定したデータ名およびファイル名

SELECT句に指定したファイル名1

27.7.3　実行時の制限事項

実行時の制限事項について，次に示します。

AIX(32)，AIX(64)，Linux(x86)，Linux(x64)の場合，使用できる文字コードはUCS-4の範囲（UCS-2の範囲を含む）です。HP-UX(IPF)の場合，使用できる文字コードはUCS-2の範囲です。範囲外のUnicode文字を使用した場合，動作は保証しません。

HP-UX(IPF)，AIX(32)，AIX(64)の場合，日本語，半角かたかななど，Unicodeで多バイト文字となる文字を，次のサービスルーチンに指定した場合，動作は保証しません。

JCPOPUPサービスルーチン

CBLHTMLBEGINサービスルーチン

CBLDISPLAYTEXTサービスルーチン

CBLCONVERTTEXTサービスルーチン

CBLADDPAIRサービスルーチン

CBLSENDERRORサービスルーチン

CBLMESSAGEサービスルーチン

CBLPUTサービスルーチン

CBLSETTITLEサービスルーチン

CBLINPUTDLGサービスルーチン

次に示す例外に関する組み込み関数の関数値の文字コードはシフトJISです。関数値をUnicodeのデータで使用する場合，コード変換ライブラリを使用して，文字コードを統一してください。

EXCEPTION-FILE

EXCEPTION-LOCATION

EXCEPTION-STATEMENT

EXCEPTION-STATUS

用途がNATIONALの項目を従属として含む集団項目と，用途がDISPLAYの項目間の転記処理した場合，転記結果は保証しません。

転記や文字列操作機能（部分参照やSTRING文などの文字列操作文）では，用途がDISPLAYの項目に格納された文字は，1文字1バイトとして処理し，用途がNATIONALの項目に格納された文字は，1文字2バイトとして処理します。文字列操作文が，用途がDISPLAYの項目に対して作用する場合，定数または一意名の値に多バイト文字を含まないでください。

日本語，半角かたかななど，Unicodeの多バイト文字を含むソースファイル名，およびパス名は使用できません。

シフトJISなどUnicode以外のデータを入力し，Unicodeに変換しないで処理を続行した場合，動作は保証しません。

Linux(x86)，Linux(x64)の場合，実行時環境変数CBLD_ファイル名のファイル名（SELECT句に指定したファイル名1）に，Unicodeで多バイトとなる文字は指定できません。指定した場合，この環境変数は無視されます。

Linux(x86)，Linux(x64)の場合，次に示す項目にUnicodeで多バイトとなる文字は使用できません。使用した場合の動作は保証しません。

EXTERNAL句を指定したデータ名およびファイル名

外部で設定された環境変数の設定値

コマンドラインの引数

Linux(x86)，Linux(x64)の場合，ACCEPT文で外部から入力したデータを用途がNATIONALの項目に格納できません。格納する場合の動作は保証しません。

28.　数字項目のけた拡張機能（HP-UX(IPF64)，AIX(64)，Linux(x64)で有効）

数字項目のけた拡張機能は，数字項目，数字編集項目，および数字定数で扱えるけた数の上限を18けたから38けたに拡張し，算術演算，転記，および比較条件で使用できるようにします。この章では，数字項目のけた拡張機能について説明します。

この機能は，HP-UX(IPF64) COBOL2002，AIX(64) COBOL2002，Linux(x64) COBOL2002で使用できます。なお，けた拡張機能のうち，数字けた位置の個数が19～38の数字編集項目を定義できるのは，AIX(64) COBOL2002，Linux(x64) COBOL2002だけです。また，エンディアン切換えができるのは，Linux(x64) COBOL2002だけです。

＜この章の構成＞

28.1　数字項目のけた拡張機能の概要

28.2　数字項目のけた拡張機能の詳細

28.3　数字項目のけた拡張機能での演算の中間結果

28.4　数字項目のけた拡張機能に対応する機能一覧

28.5　数字項目のけた拡張機能の注意事項

28.1　数字項目のけた拡張機能の概要

ここでは，数字項目のけた拡張機能の概要について説明します。

＜この節の構成＞

28.1.1　概要

28.1.2　数字項目のけた拡張機能で必要なコンパイラオプション

28.1.1　概要

数字項目のけた拡張機能とは，数字項目（外部10進項目，内部10進項目），数字編集項目，および数字定数で扱えるけた数の上限を18けたから38けたに拡張するものです。これによって，38けたに拡張した数字項目，数字編集項目，および数字定数を，算術演算，転記，および比較条件で使用できます。なお，算術演算での中間結果を保持する領域は，30けたの固定小数点形式から40けたの10進浮動小数点形式となります。

数字項目のけた拡張機能で38けたの数字項目を定義したコーディング例を次に示します。

図28-1　38けたの数字項目を定義したコーディング例

数字項目のけた拡張機能を使用する場合の注意事項を次に示します。

数字項目や数字編集項目のけた数は，従来の18けたより大きなけた数が扱えますが，けた数が増えると実行時間も大きく増えるおそれがあります。

数字項目のけた拡張機能を使用した場合，中間結果で保持するけた数が，数字項目のけた拡張機能を使用しない場合より大きい40けたとなるため，従来の18けた以下の演算であっても演算結果が異なり，算術式および条件式の結果が異なる場合があります。

次の場合は，数字項目のけた拡張機能と同時に使用できません。

MEDIAN関数の引数に，算術式または組み込み関数を指定したとき。

TURN指令にEC-SIZEを指定したとき。

28.1.2　数字項目のけた拡張機能で必要なコンパイラオプション

数字項目のけた拡張機能を使用する場合は，コンパイル時に-MaxDigits38オプションと-IntResult,DecFloat40オプションを同時に指定してください。-MaxDigits38オプションと-IntResult,DecFloat40オプションを同時に指定していない場合は，コンパイルエラーとなります。

-MaxDigits38オプションの詳細については，「32.5.14　その他の設定」の「(21)　-MaxDigits38オプション（HP-UX(IPF64)，AIX(64)，Linux(x64)で有効）」を参照してください。

-IntResult,DecFloat40オプションの詳細については，「32.5.14　その他の設定」の「(22)　-IntResult,DecFloat40オプション（HP-UX(IPF64)，AIX(64)，Linux(x64)で有効）」を参照してください。

28.2　数字項目のけた拡張機能の詳細

数字項目のけた拡張機能に対応している数字項目，数字編集項目，および数字定数は，最大けた数を18けたから38けたに拡張できます。数字項目のけた拡張機能の詳細について説明します。

＜この節の構成＞

28.2.1　数字項目のけた拡張機能で対象となるデータ項目

28.2.2　数字項目のけた拡張機能で対象となる定数

28.2.3　数字項目のけた拡張機能での有効けた数

28.2.1　数字項目のけた拡張機能で対象となるデータ項目

数字項目のけた拡張機能の対象となるデータ項目の指定方法および表現形式を次の表に示します。

表28-1　数字項目のけた拡張機能に対応したデータ項目の指定方法および表現形式

項目
PICTURE句の指定
USAGE句の指定
表現形式
数字項目のけた拡張機能への対応

数字項目
数字
DISPLAY
外部10進形式
○

PACKED-DECIMAL
または
COMPUTATIONAL-3
内部10進形式
○

BINARY
または
COMPUTATIONAL
COMPUTATIONAL-4
COMPUTATIONAL-5
2進形式
×

'9'，'X'，'A'だけ
COMPUTATIONAL-X
2進形式
×

外部浮動小数点の数字※
DISPLAY
外部浮動小数点形式
×

PICTURE句の指定なし
COMPUTATIONAL-1※
内部浮動小数点形式（4バイト）
×

COMPUTATIONAL-2※
内部浮動小数点形式（8バイト）
×

数字編集項目
数字編集
DISPLAY
1バイトで1文字を表現する
○

（凡例）

○：指定できる

×：指定できない

注※

内部浮動小数点形式または外部浮動小数点形式の詳細については，マニュアル「COBOL2002　言語　拡張仕様編　6. 浮動小数点形式データを扱う機能」を参照してください。

28.2.2　数字項目のけた拡張機能で対象となる定数

数字項目のけた拡張機能の対象となる定数について次の表に示します。

表28-2　数字項目のけた拡張機能に対応した定数

字類と項類 | 定数 | 数字項目のけた拡張機能への対応
数字 | 数字定数 | 固定小数点数字定数 | ○
浮動小数点数字定数 | ×
16進数字定数 | ×

（凡例）

○：指定できる

×：指定できない

28.2.3　数字項目のけた拡張機能での有効けた数

算術文に対して，数字項目（外部10進項目，内部10進項目）および数字編集項目を算術文の作用対象に指定したときの有効けた数に関する共通事項を次に示します。

作用対象のデータ記述が同一である必要はありません。
計算の過程で，すべての必要な変数と小数点の位置が合わせられます。

作用対象の数字の最大けた数は38けたです。
また，作用対象の合成※の最大けた数も38けたです。

注※

作用対象の合成とは，指定された各作用対象を小数点で位置合わせし，重ね合わせてできる仮想のデータ項目です。

28.3　数字項目のけた拡張機能での演算の中間結果

ここでは，数字項目のけた拡張機能での演算の中間結果について説明します。

＜この節の構成＞

28.3.1　演算の中間結果

28.3.2　10進浮動小数点形式について

28.3.1　演算の中間結果

数字項目のけた拡張機能での中間結果には，次の規則があります。

中間結果の表現形式は，40けた10進浮動小数点形式です。中間結果の値は作用対象のけた数にかかわらず，演算の結果の値によって，上位けたから有効な40けたを格納します。10進浮動小数点形式の詳細については，「28.3.2　10進浮動小数点形式について」を参照してください。

中間結果の40けたに入りきれない値は，下位のけたが切り捨てられます。

数字項目のけた拡張機能での演算の中間結果についての注意事項

次のどれかに該当する演算の場合，内部浮動小数点演算となるため，中間結果に40けた10進浮動小数点形式は適用されません。
・被べき数（底）またはべき数（指数）が浮動小数点項目または浮動小数点定数のべき乗演算
・べき数（指数）が算術式のべき乗演算
・べき数（指数）が整数でないべき乗演算
・関数値のデータ属性が内部浮動小数点形式の組み込み関数
・浮動小数点項目および浮動小数点定数に対するマイナス（-）単項演算子
・浮動小数点項目および浮動小数点定数同士の演算

28.3.2　10進浮動小数点形式について

数字項目のけた拡張機能での中間結果の表現形式は，40けた10進浮動小数点形式です。

40けた10進浮動小数点形式は，符号，仮数部（40けた）および指数部（4けた）で構成し，図27-2に示す範囲の数値を格納します。格納できる値の範囲を超えた場合は，オーバーフロー（指数部が+9999より大きくなった状態）またはアンダーフロー（指数部が-9999より小さくなった状態）となります。オーバーフローまたはアンダーフローとなった場合の結果は保証しません。

図28-2　40けた10進浮動小数点の領域の範囲

中間結果は，演算の結果の値によって有効な40けたのけた数（精度）を保持します。図27-3および図27-4に，数字項目の加算を行う場合の例を示します。

図28-3　数字項目の加算を行う場合の中間結果（例1）

図28-4　数字項目の加算を行う場合の中間結果（例2）

28.4　数字項目のけた拡張機能に対応する機能一覧

ここでは，数字項目のけた拡張機能に対応する機能について説明します。

＜この節の構成＞

28.4.1　数字項目のけた拡張機能で対象となる機能

28.4.2　数字項目のけた拡張機能で対象となるソース単位

28.4.3　数字項目のけた拡張機能で対象となる節や文

28.4.1　数字項目のけた拡張機能で対象となる機能

数字項目のけた拡張機能に対応する機能を次に示します。

表28-3　数字項目のけた拡張機能に対応する機能

種類 | 機能名 | けた拡張機能への対応
規格 | 基本機能 | ○
順編成ファイル | ○
相対編成ファイル | ○
索引編成ファイル | ×
整列併合 | ×
プログラム間連絡 | ○
組み込み関数 | ○※1
オブジェクト指向 | ×
共通例外処理 | ○※2
再帰呼び出し | ○
利用者定義関数 | ×
局所場所節（LOCAL-STORAGE SECTION） | ○
原始文操作 | ○
自由形式正書法 | ○
TYPEDEF句とSAME AS句 | ○
翻訳指令 | ×
区分化 | ○
X/Open | テキスト編成ファイル | ○
ファイル共用（ファイルシェア） | ○
コマンド行および環境変数へのアクセス | ×
画面節（SCREEN SECTION）による画面操作 | ×
C言語インタフェース | ×
拡張機能 | 日本語 | ×
ブール（ビット処理） | ×
アドレス操作 | ×
1バイト2進およびCOMP-X項目 | ×
浮動小数点データ | ×
ISAMによる索引編成ファイル機能の拡張（合成キー，逆順読み） | ×
CSV編成ファイル | ×
HiRDBによる索引編成ファイル | ○※3
ラージファイル入出力 | ○
COBOL入出力サービスルーチン | ×
バイトストリーム入出力サービスルーチン | ×
画面節（WINDOW SECTION）による画面操作 | ×
COPY文の接頭辞／接尾辞 | ○
プリンタへのアクセス | ○
ファイルのディスク書き込み保証 | ○
報告書作成機能 | ×
MIOS7 COBOL85との互換機能 | ○
イベントログファイル／syslogファイル出力機能 | ○
データベース操作機能（ODBCインタフェース） | ×
XDMによるデータベース操作シミュレーション機能 | 構造型データベース（XDM/SD）操作シミュレーション | ×
リレーショナルデータベース(XDM/RD)操作シミュレーション | ○
OLE2オートメーション機能 | ×
マルチスレッド環境での実行 | ○
MSMQアクセス機能 | ×
エンディアン切換え | ○
Unicode機能 | ○
動的長基本項目機能 | ○
定数長拡張機能 | ○
デバッグ機能 | 実行時デバッグ機能 | ○
テストデバッグ機能 | ○
カバレージ機能 | ○
連携機能 | XML連携機能 | ×
Cosminexus連携機能 | ×

（凡例）

○：使用できる

×：使用できない

注

19～38けたの数字項目および数字定数を指定できない個所や文については，マニュアル「COBOL2002　言語　拡張仕様編　21. 数字項目のけた拡張機能」を参照してください。

注※1

組み込み関数のADDR関数およびLENGTH関数の引数に，19～38けたの数字項目，または数字編集項目を指定できます。

注※2

-MaxDigits38オプションを指定した場合，TURN指令に次の例外名は指定できません。

EC-SIZE，EC-SIZE-EXPONENTIATION，EC-SIZE-OVERFLOW，EC-SIZE-TRUNCATION，EC-SIZE-UNDERFLOW，EC-SIZE-ZERO-DIVIDE

注※3

AIX(64)で対応しています。

28.4.2　数字項目のけた拡張機能で対象となるソース単位

数字項目のけた拡張機能で対象となるソース単位について，次に示します。

表28-4　数字項目のけた拡張機能で対象となるソース単位

定義名 | 数字項目のけた拡張機能への対応
プログラム定義 | ○
関数定義 | ×
クラス定義 | ×
ファクトリ定義 | ×
インスタンス定義 | ×
メソッド定義 | ×
インタフェース定義 | ×

（凡例）

○：使用できる

×：使用できない

28.4.3　数字項目のけた拡張機能で対象となる節や文

数字項目のけた拡張機能の対象となる節や文について，次に示します。

＜この項の構成＞

(1)　環境部

(2)　データ部

(3)　手続き部

(1)　環境部

環境部では，データ名および定数の指定できる個所に19～38けたの数字項目，数字編集項目，および数字定数の定義や参照はできません。

(2)　データ部

数字項目のけた拡張機能の対象となる節を次に示します。

表28-5　数字項目のけた拡張機能の対象となる節

節名 | 数字項目のけた拡張機能への対応
ファイル節（FILE SECTION） | ○
作業場所節（WORKING-STORAGE SECTION） | ○
局所場所節（LOCAL-STORAGE SECTION） | ○
連絡節（LINKAGE SECTION） | ○
報告書節（REPORT SECTION） | ×
画面節（SCREEN SECTION）※ | ×
画面節（WINDOW SECTION）※ | ×
通信節（COMMUNICATION SECTION） | ×
サブスキーマ節（SUBSCHEMA SECTION） | ×

（凡例）

○：使用できる

×：使用できない

注※

HP-UX(IPF64)，AIX(64)で有効です。

数字項目のけた拡張機能の対象となるファイルを次に示します。

表28-6　数字項目のけた拡張機能の対象となるファイル

ファイル編成 | 数字項目のけた拡張機能への対応
順編成ファイル | ○
相対編成ファイル | ○
索引編成ファイル | ×
テキスト編成ファイル | ○
CSV編成ファイル | ×
整列併合ファイル | ×
報告書ファイル | ×
HiRDBによる索引編成ファイル | ○※

（凡例）

○：使用できる

×：使用できない

注※

AIX(64)で有効です。

数字項目のけた拡張機能の対象となるその他のデータ部の句について，次に示します。

表28-7　数字項目のけた拡張機能の対象となるその他のデータ部の句

データ部の句
数字項目のけた拡張機能への対応

BLANK WHEN ZERO句
○

BLOCK CONTAINS句
×

DATA RECORDS句
×

EXTERNAL句
×

LINAGE句
×

OCCURS句
×

PICTURE句
記号「P」を含む場合
×

USAGE句
DISPLAY
COMPUTATIONAL-3
または
COMP-3
PACKED-DECIMAL
○

上記以外
×

VALUE句（作業場所節，局所場所節，ファイル節，連絡節）
○

（凡例）

○：使用できる

×：使用できない

(3)　手続き部

数字項目のけた拡張機能の対象となる手続き部見出しおよび手続き文について，次に示します。各手続き文の対応の詳細については，マニュアル「COBOL2002　言語　標準仕様編」およびマニュアル「COBOL2002　言語　拡張仕様編」を参照してください。

表28-8　数字項目のけた拡張機能の対象となる手続き部見出しおよび手続き文

手続き部見出しおよび手続き文 | 数字項目のけた拡張機能への対応
手続き部見出しの引数と返却項目 | ○
ACCEPT文 | ×
ADD文 | ○
ALTER文 | －
CALL文 | △
CANCEL文 | －
CLOSE文 | －
COMMIT文 | －
COMPUTE文 | ○
CONTINUE文 | －
DELETE文 | －
DISABLE文 | ×
DISPLAY文 | △
DIVIDE文 | ○
ENABLE文 | ×
ENTER文 | －
ENTRY文 | ○
ERASE文 | ×
EVALUATE文 | ○
EXAMINE文 | ×
EXIT文 | －
GO TO文 | ×
GOBACK文 | －
IF文 | ○
INITIALIZE文 | ○
INSPECT文 | ×
INVOKE文 | ×
MERGE文 | ×
MOVE文 | ○
MULTIPLY文 | ○
OPEN文 | －
PERFORM文 | △
RAISE文 | －
READ文 | △
RECEIVE文 | ×
RELEASE文 | ×
REPLY文 | ×
RESUME文 | －
RETURN文 | ×
REWRITE文 | ○
ROLLBACK文 | －
SEARCH文 | △
SEND文 | ×
SET文 | △
SORT文 | ×
START文 | ×
STOP文 | ×
STRING文 | ×
SUBTRACT文 | ○
TRANSCEIVE文 | ×
TRANSFORM文 | ×
UNLOCK文 | －
UNSTRING文 | ×
USE文 | －
WAIT文 | －
WRITE文 | △

（凡例）

○：使用できる

△：一部使用できない構文がある

×：使用できない

－：該当する指定がない

28.5　数字項目のけた拡張機能の注意事項

ここでは，数字項目のけた拡張機能の注意事項について説明します。

＜この節の構成＞

(1)　数字項目のけた拡張機能を使用する場合の演算結果

(2)　内部浮動小数点項目から固定小数点形式の数字項目への転記

(1)　数字項目のけた拡張機能を使用する場合の演算結果

数字項目のけた拡張機能を使用する場合，中間結果で保持するけた数が40けたとなります。そのため，従来の1～18けたの演算であっても，数字項目のけた拡張機能を使用しない場合と演算を含む算術式および条件式の結果が異なるときがあります。数字項目のけた拡張機能を使用しない場合の結果と合わせるときは，別の数字項目を使用して演算を分けてください。

（例）
  01 A  PIC 9(4)  VALUE  0.
  01 B  PIC 9(2)  VALUE 10.
  01 C  PIC 9(1)  VALUE  4.
         ：    
  COMPUTE A = (B / C) * 100.

上記のCOMPUTE文は，次のような連続した操作に変換します。なお，tempはこのシステムが用意する中間結果項目です。

  B / C      → temp
  temp * 100 → A

数字項目のけた拡張機能を使用する場合，演算結果は次のようになります。

表28-9　数字項目のけた拡張機能を使用する場合の演算結果

数字項目のけた拡張機能の使用有無
tempの属性
tempに設定される（B / C）の値
temp * 100の値
Aに設定される値

使用する
40けた10進浮動小数点
2.500・・・・000
（40けたの数値）
250.000・・・・000
（40けたの数値）
250

使用しない
次のけた数の数字項目※
　整数部のけた数：2
　小数部のけた数：なし
2
200
200

注※

数字項目のけた拡張機能を使用しないときの中間結果のけた数は，「5.2.4　演算の中間結果」を参照してください。

数字項目のけた拡張機能を使用する場合の計算結果を，数字項目のけた拡張機能を使用しないときと同じにするには，次のように除算（B/C）の結果を別の数字項目WK1（数字項目のけた拡張機能を使用しない場合のtempの属性と同じけた数で定義）に転記したもので演算します。

  01 A   PIC 9(4)  VALUE  0.
  01 B   PIC 9(2)  VALUE 10.
  01 C   PIC 9(1)  VALUE  4.
  01 WK1 PIC 9(2)  VALUE  0.
         ：    
  COMPUTE WK1 = B / C.
  COMPUTE A = WK1 * 100.

(2)　内部浮動小数点項目から固定小数点形式の数字項目への転記

内部浮動小数点項目から固定小数点形式の数字項目への転記で，固定小数点形式の数字項目が内部浮動小数点項目の有効けたを超える下位のけたを持つ場合，下位のけたが大きくなるほど，誤差の影響も大きくなります。

内部浮動小数点数の小数点位置合わせに伴う誤差の影響が，けた数の拡張によって現れる例を次に示します。なお，内部浮動小数点数の有効けた数および標準けた寄せ規則については，マニュアル「COBOL2002　言語　拡張仕様編　6. 浮動小数点形式データを扱う機能」を参照してください。

（例）
  01 A  USAGE COMP-2    VALUE 2.0E+0.
  01 B  PIC 9(1)V9(14).
  01 C  PIC 9(1)V9(23).
         ：
  COMPUTE B = A.
  COMPUTE C = A.
         ：

（出力結果）
  B = +200000000000000
  C = +199999999999999983222784

29.　サービスルーチン

サービスルーチンは，COBOLの言語仕様にない機能を，CALL文で呼び出すプログラムとして提供しているものです。この章では，このシステムが提供しているサービスルーチンの機能と使い方について説明します。

＜この章の構成＞

29.1　サービスルーチンの概要

29.2　戻り値の使い方

29.3　サービスルーチン使用時の注意事項

29.4　プログラム実行制御

29.5　ダイアログボックス／ウィンドウ

29.6　デバッグ機能

29.7　変換・転記・演算

29.8　データベース操作機能

29.9　XMAP3を使用した画面・帳票関連

29.1　サービスルーチンの概要

サービスルーチンは，COBOLの言語仕様にない機能を，CALL文で呼び出すプログラムとして提供しているものです。このシステムが提供しているサービスルーチンを次に示します。

＜この節の構成＞

(1)　プログラム実行制御

(2)　ダイアログボックス／ウィンドウ

(3)　デバッグ機能

(4)　変換・転記・演算

(5)　データベース操作機能（Linux(x86)，Linux(x64)で有効）

(6)　COBOLの入出力機能

(7)　XMAP3を使用した画面・帳票関連（AIX(32)で有効）

(1)　プログラム実行制御

主にCOBOLプログラムの開始／終了時に，プログラムを制御するサービスルーチンです。

プログラム実行制御のサービスルーチンを，次に示します。

サービスルーチン | 機能 | OS
F | H | A | B | J | K | L | S
CBLEND※ | COBOLの実行環境を終了させる。 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLABN | プログラムを異常終了させる。 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLARGC | コマンド行に指定した引数の個数を取得する。 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLARGV | コマンド行に指定した引数の内容を取得する。 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○

（凡例）

F：HP-UX(IPF)

H：HP-UX(IPF64)

A：AIX(32)

B：AIX(64)

J：Linux(x86)

K：Linux(x64)

L：Linux(IPF64)

S：Solaris(SPARC)

○：サポートしている

注※

COBOLプログラムのCALL文で呼び出して使用するのではなく，他言語のプログラムから呼び出して使用するサービスルーチンです。

サービスルーチンの詳細については，「29.4　プログラム実行制御」を参照してください。

(2)　ダイアログボックス／ウィンドウ

ダイアログボックスへの入出力，およびウィンドウへの入出力を制御するサービスルーチンです。

ダイアログボックスのサービスルーチンを，次に示します。

サービスルーチン | 機能 | OS
F | H | A | B | J | K | L | S
JCPOPUP | 表形式のデータ項目を主画面とは別の画面に表示し，選ばれたブロック番号をインタフェース領域に格納する。 | ○ | ○ | ○ | ○ | × | × | × | ○

（凡例）

F：HP-UX(IPF)

H：HP-UX(IPF64)

A：AIX(32)

B：AIX(64)

J：Linux(x86)

K：Linux(x64)

L：Linux(IPF64)

S：Solaris(SPARC)

○：サポートしている

×：サポートしていない

サービスルーチンの詳細については，「29.5　ダイアログボックス／ウィンドウ」を参照してください。

(3)　デバッグ機能

COBOLが使用できるアプリケーションデバッグ機能によって，データ領域ダンプリストを出力するサービスルーチンです。

デバッグ機能のサービスルーチンを，次に示します。

サービスルーチン | 機能 | OS
F | H | A | B | J | K | L | S
CBLDATADUMP | COBOLプログラム実行時の任意の時点でのデータ領域ダンプリストを出力する。 | × | × | ○ | ○ | ○ | ○ | × | ×

（凡例）

F：HP-UX(IPF)

H：HP-UX(IPF64)

A：AIX(32)

B：AIX(64)

J：Linux(x86)

K：Linux(x64)

L：Linux(IPF64)

S：Solaris(SPARC)

○：サポートしている

×：サポートしていない

サービスルーチンの詳細については，「29.6　デバッグ機能」を参照してください。

(4)　変換・転記・演算

特殊な変換・転記・演算をするためのサービスルーチンです。

変換・転記・演算のサービスルーチンを，次に示します。

サービスルーチン | 機能 | OS
F | H | A | B | J | K | L | S
CBLNCNV | 英字・英数字・英数字編集・数字編集項目を日本語・日本語編集項目に変換する。 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLUBIT | ビットデータを論理演算する。 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○

（凡例）

F：HP-UX(IPF)

H：HP-UX(IPF64)

A：AIX(32)

B：AIX(64)

J：Linux(x86)

K：Linux(x64)

L：Linux(IPF64)

S：Solaris(SPARC)

○：サポートしている

サービスルーチンの詳細については，「29.7　変換・転記・演算」を参照してください。

(5)　データベース操作機能（Linux(x86)，Linux(x64)で有効）

SQL文によるODBCインタフェース使用時に，出力された実行時メッセージのエラー情報を取得するサービスルーチンです。

サービスルーチンの詳細については，「29.8　データベース操作機能」を参照してください。

(6)　COBOLの入出力機能

COBOLの入出力機能についてのサービスルーチンは次のとおりです。

COBOLで作成したファイルを他言語のプログラムから入出力するためのサービスルーチン
サービスルーチンの詳細については，「13.　COBOL入出力サービスルーチン」を参照してください。

他言語のプログラムで作成したバイナリファイルをCOBOLで入出力するためのサービスルーチン
サービスルーチンの詳細については，「15.　バイトストリーム入出力サービスルーチン（UNIX32，HP-UX(IPF64)，AIX(64)，Linux(x64)で有効）」を参照してください。

(7)　XMAP3を使用した画面・帳票関連（AIX(32)で有効）

XMAP3を使用した書式印刷機能，XMAP3を使用した通信節による画面操作・帳票出力機能に関するサービスルーチンです。

サービスルーチンの詳細については，「29.9　XMAP3を使用した画面・帳票関連」を参照してください。

29.2　戻り値の使い方

各サービスルーチンの戻り値は，COBOLプログラムではRETURN-CODE特殊レジスタで参照できます。

サービスルーチンを呼び出した直後は，戻り値を参照し，異常終了時またはエラー発生時の処理を記述しておくことを推奨します。詳細は，「29.4.4　CBLARGV」の使用例を参照してください。

29.3　サービスルーチン使用時の注意事項

サービスルーチンを使用する場合の注意事項を，次に示します。

Linuxの場合，-BigEndian,Binオプションを指定すると，サービスルーチンの引数で要求する2進項目がビッグエンディアン形式になるため正常に動作しません。この場合は，引数となる2進項目をCOMP-5で定義してください。

引数を省略したり，引数の属性や長さを誤って指定した場合，動作は保証しません。

各サービスルーチンの引数の説明では，2進形式の項目を指定する場合，「4バイトの2進項目」のように，割り当てられる項目のサイズであるバイト数を示すものがあります。
2進形式の項目では，PICTURE句で指定した項目のけた数と，その項目に割り当てられる項目のサイズは異なります。
次に関係を示します。

表29-1　2進形式の項目のけた数とサイズ

PICTURE句で指定したけた数
項目が占めるバイト数

1～2けた
2バイト
（1バイト2進機能，またはCOMP-X項目の場合は，1バイト）

3～4けた
2バイト

5～9けた
4バイト

10～18けた
8バイト

29.4　プログラム実行制御

＜この節の構成＞

29.4.1　CBLEND

29.4.2　CBLABN

29.4.3　CBLARGC

29.4.4　CBLARGV

29.4.1　CBLEND

CBLENDサービスルーチンは，-MainNotCBLオプションを指定してコンパイルしたプログラムが動作したときに，設定したCOBOLの実行環境を終了させるものです。

このサービスルーチンは，CALL文で呼び出すのではなく，COBOL以外のプログラム内で使用します。

記述例

extern int CBLEND();        /* CBLENDの外部参照宣言 */

CBLEND();                   /* CBLENDの呼び出し     */

引数

なし。

戻り値

0：正常終了した場合

-1：COBOLプログラムが動作中であるため，CBLENDサービスルーチンが無視された場合

注意事項

CBLENDサービスルーチンは，COBOLプログラムが終了したあと，1回だけ呼び出さなければなりません。

COBOLプログラム内でSTOP RUN文を実行した場合，CBLENDサービスルーチンを呼び出す必要はありません。

COBOLプログラム内でSTOP RUN文を実行したあと，CBLENDサービスルーチンを呼び出した場合，何も処理しないでリターンします。

CBLENDサービスルーチンは，COBOL以外の言語から呼び出さなければなりません。
CBLENDサービスルーチンをCOBOLプログラムから呼び出した場合，結果は保証しません。

CBLENDサービスルーチンを呼び出したあとでも，再度COBOLプログラムを呼び出せます。この場合，CBLENDサービスルーチンを呼び出す前のCOBOL実行環境が終了しているため，新たな実行環境でCOBOLプログラムが実行されます。

再度COBOLプログラムを呼び出さないで，CBLENDサービスルーチンを複数回呼び出した場合，2回目以降の呼び出しでは何も処理しないでリターンします。

このサービスルーチンを使用するプログラムでは，リンク時に次の共用ライブラリを指定してください。
HP-UX(IPF)，HP-UX(IPF64)の場合：libcbl2k.so
AIX(32)の場合：libcbl2k.a
AIX(64)の場合：libcbl2k64.a
Linuxの場合：libcbl2k.so
Solaris(SPARC)の場合：libcbl2k.so

使用例

C言語で記述されたmain関数から，-MainNotCBLオプション指定でコンパイルしたCOBOLプログラムAPLSUBを呼び出します。

APLSUBは，COBOL副プログラムとして処理されるため，EXIT PROGRAM文で制御が戻るとき，COBOL実行環境が終了されません。

CBLENDサービスルーチンを呼び出して，COBOL実行環境を終了します。

29.4.2　CBLABN

CBLABNサービスルーチンは，利用者がプログラムを異常終了させるときに呼び出すものです。このサービスルーチンを実行すると，引数1に指定した要因コードと実行時メッセージを表示し，実行プロセスが異常終了します。

形式

CALL 'CBLABN' USING 引数1

引数

引数1には，異常終了時の要因コードを2バイトの2進項目で指定します。

戻り値

なし。

規則

このサービスルーチンは，COBOLプログラムだけから呼び出せます。

このサービスルーチンは呼び出し元に制御を戻しません。

VOS3 COBOL85との互換性を保つ必要があるときは，引数1の要因コードは0～4,095の範囲で指定します。

使用例

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
          :
      WORKING-STORAGE SECTION.
      01 AB-CODE PIC S9(4) USAGE COMP. …1.
          :
      PROCEDURE DIVISION.
          :
          MOVE 100 TO AB-CODE.  …2.
          CALL 'CBLABN' USING AB-CODE.   …3.
          :

異常終了時の要因コードを2バイトの2進項目で指定します。

異常終了時の要因コードを設定します。

CBLABNサービスルーチンを呼び出します。

29.4.3　CBLARGC

CBLARGCサービスルーチンは，コマンド行に指定した引数の個数を，引数1で指定した領域に格納するものです。コマンド引数の個数は，C言語のmain関数で受け取るargcに該当します。

形式

CALL 'CBLARGC' USING 引数1

引数

引数1には，コマンド行に指定した引数の個数を受け取る領域を4バイトの2進項目で指定します。

戻り値

0：正常終了した場合

-1：エラーが発生した場合

規則

このサービスルーチンは，-Main,Systemオプションを指定した最外側のCOBOLプログラムだけから呼び出せます。これ以外のプログラムから呼び出した場合は，戻り値-1が返されます。

このサービスルーチンが異常終了した場合，CBLARGCに渡された引数1の内容は保証しません。

使用例

「29.4.4　CBLARGV」の使用例を参照してください。

29.4.4　CBLARGV

CBLARGVサービスルーチンは，コマンド行に指定した引数の内容を，引数2の領域に転送するものです。コマンド引数の内容は，C言語のmain関数で受け取るargvに該当します。

形式

CALL 'CBLARGV' USING 引数1 引数2

引数

引数1には，CBLARGVサービスルーチンによって受け取るコマンド引数の順序を4バイトの2進項目で指定します。

引数2には，コマンド引数の情報を受け取る領域を指定します。この項目は次の形式で定義します。

      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 PARM.
        02 PARM-LENGTH PIC 9(4) USAGE COMP.  …1.
        02 PARM-AREA.
          03 PARM-AREA-DETAIL PIC X(1)
                   OCCURS 1 TO 100 TIMES  …2.
                   DEPENDING ON PARM-LENGTH.

コマンド引数の長さを格納する領域で，2バイトの2進項目で指定します。コマンド引数が100バイトを超えたときは常に100が設定されます。

コマンド引数の値を格納する領域で，最大長100バイトの可変長項目で定義します。コマンド引数が100バイトを超えたときは先頭から100バイトが格納されます。

戻り値

0：正常終了した場合

1：コマンド引数の長さが100バイトを超えた場合

2：CBLARGCで戻された引数の個数を超えた値で引数1を指定した場合，またはこのサービスルーチンに引き渡された引数1（引数の順序）に示される引数を，実行する実行可能ファイルの引数に指定していない場合

-1：エラーが発生した場合（-Main,Systemオプションを指定した最外側のCOBOLプログラム以外から呼び出した場合）

規則

このサービスルーチンは，-Main,Systemオプションを指定した最外側のCOBOLプログラムだけから呼び出せます。これ以外のプログラムから呼び出した場合は，戻り値-1が返されます。

このサービスルーチンの戻り値が0または1以外の場合，CBLARGVに渡された引数2の内容は保証しません。

引数2の領域は，コマンド引数として受け取れる最大長分の100バイトを準備する必要があります。引数2に100バイト未満の領域を指定した場合，領域を破壊することがあります。

コマンド引数の長さが100バイト未満の場合，引数2の引数格納領域の余った領域には空白が設定されます。

使用例

      IDENTIFICATION DIVISION.
            :
      DATA DIVISION.
       WORKING-STORAGE SECTION.
        77 ARGC    PIC 9(9) USAGE COMP.
        77 COUNTER PIC 9(9) USAGE COMP.
            :
        01 PARM.                              …1.
          02 PARM-LENGTH PIC 9(4) USAGE COMP. …2.
          02 PARM-AREA.                       …3.
              03 PARM-AREA-C PIC X(1)
                  OCCURS 1 TO 100
                  DEPENDING ON PARM-LENGTH.
            :
      PROCEDURE DIVISION.
            :
          CALL 'CBLARGC' USING ARGC.
          IF RETURN-CODE NOT = 0 THEN
              CBLARGC異常時の処理
          END-IF.
            :
          MOVE 1 TO COUNTER.
          PERFORM UNTIL ARGC = 0
              MOVE SPACES TO PARM-AREA
              CALL 'CBLARGV' USING COUNTER PARM
              IF RETURN-CODE NOT = 0 THEN
                 CBLARGV異常時の処理
              END-IF
              CBLARGVで受け取ったパラメタに対応する処理
              ADD 1 TO COUNTER
              SUBTRACT 1 FROM ARGC
          END-PERFORM.
            :

CBLARGVに引き渡す実引数領域です。

CBLARGVによって3.に示す引数格納領域に設定された文字列の長さを示します。最大長を超えて引数を設定したときは100が設定されます。

CBLARGVで設定する引数領域で，最大長100バイトの領域として可変長で定義します。100バイト以上の引数を指定した場合，実際のコマンドに指定した引数情報の先頭から100バイトまでが設定されます。

29.5　ダイアログボックス／ウィンドウ

JCPOPUPサービスルーチンは，Linux COBOL2002では提供していません。

＜この節の構成＞

29.5.1　JCPOPUP（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Solaris(SPARC)で有効）

29.5.1　JCPOPUP（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Solaris(SPARC)で有効）

JCPOPUPサービスルーチンは，表形式のデータ項目を主画面とは別の画面に表示し，画面中でブロックカーソルを移動して選んだブロック番号をインタフェース領域に格納するものです。これを利用すると，画面上での各種のコードの入力などが目的の項目をマウスやキーで選ぶだけでできるようになります。

なお，ここで表示される画面をポップアップブロックカーソル画面といいます。

形式

CALL 'JCPOPUP' USING 引数1 引数2

引数

引数1には，次に示すインタフェース領域の名前を指定します。

表29-2　JCPOPUPサービスルーチンのインタフェース領域

記述形式
内容

01 データ名01.

CALL文のUSINGで指定するインタフェース領域の名前を指定する。

 02 データ名02 PIC 9(02).

JCPOPUPサービスルーチンが次の戻り値を設定する。
00：正常終了した。
10：異常終了した。

 02 データ名03 PIC 9(04).

JCPOPUPサービスルーチンがブロックカーソルで選択したブロック番号を設定する（先頭を1とし，固定部分は含まない）。

 02 データ名04 PIC 9(02).

データを表示する画面上の行の番号を1～99で指定する。※¹

 02 データ名05 PIC 9(02).

データを表示する画面上のカラムの番号を1～99で指定する。※¹

 02 データ名06 PIC 9(02).

画面の行数を1～24で指定する。

 02 データ名07 PIC 9(02).

画面の列数を1～80で指定する。

 02 データ名08 PIC 9(02).

画面の固定領域行数を1～24で指定する。

 02 データ名09 PIC 9(02).

画面の1ブロック（1エントリ）のサイズを指定する。

 02 データ名10 PIC X(02).

固定領域の色を指定する。
G△：緑色　W△：白色　R△：赤色　B△：青色
P△：紫色　Y△：黄色　S△：空色

 02 データ名11 PIC X(02).

ブロックカーソルの色をデータ名10と同じ形式で指定する。

 02 データ名12 PIC X(02).

可変領域の色をデータ名10と同じ形式で指定する。

 02 データ名13 PIC X(02).

可変領域の初期表示位置を指定する。
T△：先頭表示
B△：最終表示

 02 データ名14 PIC 9(04).

画面の固定領域のサイズを指定する。

 02 データ名15 PIC 9(02).

可変領域のデータ項目（1エントリ）のサイズを指定する。

 02 データ名16 PIC 9(04).

出力データのサイズ（固定領域＋可変領域）を指定する。

 02 データ名17 PIC 9(02).

JCPOPUPサービスルーチンが終了キーコードを設定する。※²

 02 データ名18 PIC X(01).

画面に枠けい線を出力するかどうかを指定する。
Y：出力する。
N：出力しない。

 02 FILLER     PIC X(09).

予備。値はX'00'でなければならない。ただし，このシステムではこの領域は使用しない。

（凡例）

△：半角空白を示す

注※1

使用できません。ポップアップウィンドウの出力位置はUNIXのシステムに依存します。

注※2

終了キーと終了キーコードとの対応を次に示します。

Enterキー：89

PF1キー：00　PF9キー：08　PF17キー：53

PF2キー：01　PF10キー：09　PF18キー：54

PF3キー：02　PF11キー：18　PF19キー：55

PF4キー：03　PF12キー：19　PF20キー：56

PF5キー：04　PF13キー：49　PF21キー：57

PF6キー：05　PF14キー：50　PF22キー：58

PF7キー：06　PF15キー：51　PF23キー：59

PF8キー：07　PF16キー：52　PF24キー：60

引数2には，1次元の繰り返し構造（表形式）を持つレベル番号01のデータ項目の名前を指定します。

（例）

01 データ名20.
 02 FILLER  PIC  X(16)  VALUE  LOW-VALUE.
 02 表示データ項目（固定領域+可変領域）を
    表形式で指定する。 … 1.
 02 FILLER  PIC  X(nn)  VALUE  LOW-VALUE. … 2.

表示データ項目のデータは文字形式でなければなりません。文字形式でない場合，出力結果は保証しません。

nnには次のサイズを指定します。
・枠けい線機能を使用しない場合：32バイト
・枠けい線機能を使用する場合：（可変領域のサイズ／可変領域のデータ項目のサイズ）×9＋50バイト
ただし，この領域はこのシステムでは使用しません。

戻り値

なし。

使用例

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
          :
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 ICHIRAN-GAMEN.
        02 HUKKI-CODE      PIC 9(2).
        02 BLOCK-NUMBER    PIC 9(4).  …1.
        02 Y-LOCATION      PIC 9(2) VALUE 10.
        02 X-LOCATION      PIC 9(2) VALUE 10.
        02 WINDOW-LINE     PIC 9(2) VALUE  5. …2.
        02 WINDOW-COLUMN   PIC 9(2) VALUE 20. …3.
        02 KOTEI-LINE      PIC 9(2) VALUE  2. …4.
        02 BLOCK-SIZE      PIC 9(2) VALUE 10. …5.
        02 KOTEI-COLOR     PIC X(2) VALUE 'G '.
        02 CURSOR-COLOR    PIC X(2) VALUE 'R '.
        02 KAHEN-COLOR     PIC X(2) VALUE 'B '.
        02 HYOUJI-ICHI     PIC X(2) VALUE 'T '. …6.
        02 KOTEI-SIZE      PIC 9(4) VALUE 60. …7.
        02 ENTRY-SIZE      PIC 9(2) VALUE 15. …8.
        02 DATA-SIZE       PIC 9(4) VALUE 210. …9.
        02 END-KEY         PIC 9(2). …10.
        02 WAKU-KEISEN     PIC X(1) VALUE 'Y'. …11.
        02 FILLER          PIC X(9) VALUE LOW-VALUE.
      01 ICHIRAN-DATA.
        02 FILLER          PIC X(16) VALUE LOW-VALUE.
        02 HD1             PIC X(15) VALUE 'コード一覧'.
        02 HD2             PIC X(15) VALUE SPACE.
        02 HD2             PIC X(15) VALUE SPACE.
        02 HD2             PIC X(15) VALUE SPACE.
        02 ATEM            PIC X(15) OCCURS 10 TIMES.
        02 FILLER          PIC X(140) VALUE LOW-VALUE.
          :
      PROCEDURE DIVISION.
          :
          MOVE '1:AAA' TO ATEM(1).
          MOVE '2:BBB' TO ATEM(2).
          :
          MOVE '10:JJJ' TO ATEM(10).
          CALL 'JCPOPUP' USING ICHIRAN-GAMEN ICHIRAN-DATA.
          :

上記の指定によって表示されるポップアップブロックカーソル画面を次に示します。図中の数字は，プログラム中のコメントに記載している数字の個所と対応しています。

固定領域には，表示データ項目の先頭から固定領域のサイズ分（7.）の文字が，固定領域に表示できる分（3.×4.）だけ表示されます。

可変領域には，表示データ項目のうち，可変領域のサイズ（表示データ項目のサイズ（9.）－固定領域のサイズ（7.））分の文字が，可変領域のデータ項目のサイズ（8.）ごとに区切って各ブロックに表示されます。ただし，表示されるのは各項目とも先頭から1ブロック分のサイズ（5.）までで，はみ出す部分は表示されません。なお，上図で表示されていない"7：GGG"以降の項目はスクロールによって表示できます。

上記の画面で［↑］キー，［↓］キー，［←］キー，［→］キー，またはマウスでブロックカーソルを移動すると，ブロックを選べます。そのあと，終了キーを押すかマウスでダブルクリックすると，画面が閉じ，選んだブロックの番号がBLOCK-NUMBERの領域（1.）に格納されます。

また，このとき押された終了キーに対応する終了キーコードが10.の領域に格納されます。ダブルクリックで終了した場合の終了キーコードは89です。

PFキーの割り当て

PFキーとして割り当てられているデフォルトのキーを示します。

HP-UX(IPF)，HP-UX(IPF64)の場合

［PF1］キー：［PF1］キー　［PF9］キー：［Ctrl］+［PF1］キー

［PF2］キー：［PF2］キー　［PF10］キー：［Ctrl］+［PF2］キー

［PF3］キー：［PF3］キー　［PF11］キー：［Ctrl］+［PF3］キー

［PF4］キー：［PF4］キー　［PF12］キー：［Ctrl］+［PF4］キー

［PF5］キー：［PF5］キー　［PF13］キー：［Ctrl］+［PF5］キー

［PF6］キー：［PF6］キー　［PF14］キー：［Ctrl］+［PF6］キー

［PF7］キー：［PF7］キー　［PF15］キー：［Ctrl］+［PF7］キー

［PF8］キー：［PF8］キー　［PF16］キー：［Ctrl］+［PF8］キー

AIX(32)，AIX(64)，Solaris(SPARC)の場合

［PF1］キー：［PF1］キー　［PF13］キー：［Ctrl］+［PF1］キー

［PF2］キー：［PF2］キー　［PF14］キー：［Ctrl］+［PF2］キー

［PF3］キー：［PF3］キー　［PF15］キー：［Ctrl］+［PF3］キー

［PF4］キー：［PF4］キー　［PF16］キー：［Ctrl］+［PF4］キー

［PF5］キー：［PF5］キー　［PF17］キー：［Ctrl］+［PF5］キー

［PF6］キー：［PF6］キー　［PF18］キー：［Ctrl］+［PF6］キー

［PF7］キー：［PF7］キー　［PF19］キー：［Ctrl］+［PF7］キー

［PF8］キー：［PF8］キー　［PF20］キー：［Ctrl］+［PF8］キー

［PF9］キー：［PF9］キー　［PF21］キー：［Ctrl］+［PF9］キー

［PF10］キー：［PF10］キー　［PF22］キー：［Ctrl］+［PF10］キー

［PF11］キー：［PF11］キー　［PF23］キー：［Ctrl］+［PF11］キー

［PF12］キー：［PF12］キー　［PF24］キー：［Ctrl］+［PF12］キー

ただし，この割り当てキーがMotifのキーボード操作，およびそのデフォルトとして割り当てられている場合は，Motifのデフォルト設定が優先されます。詳細は，Motifについて記載されているマニュアルを参照してください。

その他の説明

リソース

JCPOPUPサービスルーチンでは，ポップアップウィンドウの動作環境を定義するためのリソースを用意しています。ユーザがリソースファイル中のリソース値を設定することで，ポップアップウィンドウの終了キーメニュー中に表示するファンクションキーなどを変更できます。

JCPOPUPサービスルーチン固有のリソース値については，「付録H　サービスルーチンのリソース一覧」を参照してください。

次に，設定方法を示します。

HP-UX(IPF)，AIX(32)，Solaris(SPARC)の場合

Cbl2002popup*リソース名:リソース値

HP-UX(IPF64)，AIX(64)の場合

Cbl2002popup64*リソース名:リソース値

29.6　デバッグ機能

＜この節の構成＞

29.6.1　CBLDATADUMP（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

29.6.1　CBLDATADUMP（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

CBLDATADUMPサービスルーチンは，COBOLプログラム実行時の任意の時点でのデータ領域ダンプリストを出力するサービスルーチンです。

通常は，COBOLプログラムが異常終了したときにデータ領域ダンプリストを出力しますが，CBLDATADUMPサービスルーチンによって，プログラム実行中に異常終了時と同様のデータ領域ダンプリストを出力できます。これにより，異常終了時だけでなく，プログラム実行中の任意の時点のデータ領域の状態を求めることができます。

データ領域ダンプリストには，CBLDATADUMPサービスルーチンを呼び出すまでに実行されたすべてのプログラムのうち，デバッグ対象プログラムのデータ領域の状態が出力されます※。

データ領域ダンプリストは，CBLDATADUMPサービスルーチンを実行するごとに追加書きされるので，各時点のデータをトレース情報として保持できます。

データ領域ダンプリストについては，「36.3　データ領域ダンプリスト」を参照してください。

CBLDATADUMPサービスルーチンは，次に示す場合に実行します。

COBOLプログラムのデバッグ時に，ある状態のデータ領域の内容を参照する場合

COBOLプログラムのデバッグ時に，データ領域の内容の遷移を確認する場合

COBOLプログラムが異常終了したときに，データ領域の内容の遷移を採取し，異常終了の原因を調査する場合

注※

デバッグ対象プログラムは，次のどれかのコンパイラオプションを指定したプログラムを示します。どのプログラムをデータ領域ダンプリストに出力するかは，これらのコンパイラオプションの指定有無によって切り分けることができます。
-DebugInf，-DebugInf,Trace，-DebugCompati，-DebugData，-TDInf，-CVInf，-DebugRange

デバッグ対象プログラムであっても，プログラムの実行状態などによって，情報が出力されない場合があります。例えば，実行後にCANCELされたプログラムはダンプ出力の対象となりません。情報出力の対象となるプログラムの実行状態については，規則のデータ領域ダンプリスト出力の対象となるプログラムを参照してください。

記述例

CALL  'CBLDATADUMP'

引数

なし。

戻り値

戻り値は次のように設定されます。

0：正常終了した場合

1：環境変数CBLDATADUMPFILEが指定されていない場合

2：どのプログラムのデータ状態も出力されなかった場合

どのプログラムのデータ状態も出力されなかった場合，データ領域ダンプリストにはヘッダだけが出力されます。次の場合に該当します。

1回以上実行されたプログラムにデバッグ対象プログラムがない場合

実行されたすべてのデバッグ対象プログラムが，規則のデータ領域ダンプリスト出力の対象となるプログラムではなく，EXTERNAL句を指定したファイル名およびデータ名の出力もない場合

データ領域ダンプリスト出力情報の選択で，選択した範囲に出力情報がない場合
データ領域ダンプリスト出力情報の選択方法については，「36.4　データ領域ダンプリスト出力情報の選択」を参照してください。

-1：データ領域ダンプリストの出力中にエラー※が発生した場合

注※

次の要因が考えられます。

環境変数CBLDATADUMPFILEで指定したファイルが開けない

データ領域ダンプリストの出力処理中に入出力エラーが発生した

環境変数CBLDATADUMPFILEで指定したファイルを閉じられない

規則

データ領域ダンプリストの出力先は，環境変数CBLDATADUMPFILEで指定します。環境変数CBLDATADUMPFILEの指定がない場合，または出力先が指定されていない場合，データ領域ダンプリストは出力されません。環境変数CBLDATADUMPFILEの指定方法については，「36.3.2　データ領域ダンプリストの出力先」を参照してください。

データ領域ダンプリストの出力対象とするプログラムは，プログラム翻訳時に次のどれかのコンパイラオプションの指定が必要です。
-DebugInf，-DebugInf,Trace，-DebugCompati，-DebugData，-TDInf，-CVInf，-DebugRange

データ領域ダンプリスト出力の対象となるのは次のプログラムです。
・1回以上実行され，CANCEL文で取り消されていないプログラム
・1回以上実行された利用者定義関数
・CBLDATADUMPサービスルーチン実行時に動作中のメソッド
・CBLDATADUMPサービスルーチン実行時に動作中のメソッドを含むクラス

注意事項

データ領域ダンプリストは追加書きのため，古い情報が残ります。そのため，不要なデータ領域ダンプリストは削除してください。

使用例

CBLDATADUMPサービスルーチン呼び出しの例を次に示します。

      IDENTIFICATION  DIVISION.
      PROGRAM-ID.  SAMPLE1.
             ：
      DATA  DIVISION.
      WORKING-STORAGE  SECTION.
      01 DATA1 PIC S9(4).
      01 DATA2 PIC S9(4) VALUE 1.
      01 DATA3 PIC S9(4) VALUE 0.
             ：
      PROCEDURE  DIVISION.
        MOVE 1 TO DATA1.･･･････････････････････････････1.
        CALL  'CBLDATADUMP'.･･･････････････････････････2.
        IF  RETURN-CODE NOT = 0 THEN
            DISPLAY 'CBLDATADUMPが失敗しました。'
        END-IF.
             ：
        MOVE 100 TO DATA1.･････････････････････････････3.
        CALL  'CBLDATADUMP'.･･･････････････････････････4.
        IF  RETURN-CODE NOT = 0 THEN
            DISPLAY 'CBLDATADUMPが失敗しました。'
        END-IF.
             ：

データ領域の内容を設定します。

CBLDATADUMPサービスルーチンを呼び出し，データ領域ダンプリストを出力します。

データ領域の内容を更新します。

CBLDATADUMPサービスルーチンを呼び出し，データ領域ダンプリストを出力します。2.で出力したデータ領域ダンプリストと比較し，各データが正しく更新できていることを確認します。

29.7　変換・転記・演算

＜この節の構成＞

29.7.1　CBLNCNV

29.7.2　CBLUBIT

29.7.1　CBLNCNV

CBLNCNVサービスルーチンは，英字項目・英数字項目・英数字編集項目・数字編集項目を日本語項目・日本語編集項目に変換するものです。

形式

CALL 'CBLNCNV' USING 引数1 引数2 引数3

引数

引数1には，次に示すインタフェース領域の名前を指定します。

表29-3　CBLNCNVサービスルーチンのインタフェース領域

記述形式
内容

01 データ名1.

CALL文のUSINGで指定するインタフェース領域の名前を指定する。

02 データ名2.

転記インジケータの名前を指定する。

 03 データ名3 PIC X(01).

ALL指定※の有無を指定する。
0：ALL指定なし。
1：ALL指定あり。

 03 データ名4 PIC X(01).

送り出し側作用対象のデータ属性を指定する。
0：英字，英数字，英数字編集，数字編集項目
1：数字項目

 03 データ名5 PIC X(01).

受け取り側作用対象のデータ属性を指定する。
0：日本語項目
1：日本語編集項目

 03 FILLER   PIC X(01).

予備。値は0でなければならない。このシステムではこの領域は使用しない。

02 データ名6 PIC 9(8)
               USAGE COMP.

送り出し側作用対象の項目のけた数を指定する。

02 データ名7 PIC 9(8)
               USAGE COMP.

受け取り側作用対象の項目のけた数を指定する。

注※

ALL指定は，COBOLの言語仕様のALL定数と同じように扱われます。ALL指定がある場合，変換後のデータは，変換前のデータのデータ名6で指定したけた数の何回かの繰り返しによって，データ名7で指定したけた数まで生成されます。ALL指定がない場合は，データ名6で指定したけた数しか変換しません。

引数2には，変換前のデータを指定します。

引数3には，変換後のデータが格納されます。

戻り値

0：正常終了した場合

-1：パラメタエラーが発生した場合

-2：コード変換のための環境が整っていない場合（Unicode機能を使用する場合）

-3：コード変換ライブラリでエラーが発生した場合（Unicode機能を使用する場合）

変換規則（シフトJISを使用する場合）

このサービスルーチンでの変換規則を次に示します。

次の半角文字はそのまま同じ全角文字に変換します。
[図データ]

－（半角オーバライン）は全角の「～」に変換します。

'（アポストロフィ）は全角の「’」（X'8166'）に変換します。

"（引用符）は全角の「"」（X'8168'）に変換します。

次の文字は半角の空白2個（X'2020'）に変換します。
`（アクサングラーブ，X'60'）　X'01'～X'0F'
X'10'～X'1F'　X'80'　X'A0'　X'FD'　X'FE'

X'00'は，X'0000'に変換します。

X'7F'およびX'FFは，X'FFFF'に変換します。

半角の空白が偶数個のときは変換しません。
半角の空白が奇数個のときは，受け取り側作用対象が日本語項目か日本語編集項目かによって次のように異なります。
・受け取り側作用対象が日本語項目のときは，最後の1個を全角の空白（X'8140'）に変換します。
・受け取り側作用対象が日本語編集項目のときは，最後に半角の空白（X'20'）を追加します。

次の文字は変換しません。
全角文字　X'81'～X'8F'　X'90'～X'9F'　X'E0'～X'EF'
X'F0'～X'FC'
このとき，受け取り側作用対象の項目の後ろの空き領域には半角の空白（X'20'）を埋めます。

一般規則（シフトJISを使用する場合）

規則に反した引数を指定した場合の結果は保証しません。

使用例（シフトJISを使用する場合）

半角の"AAAA"を全角の"ＡＡＡＡ"に変換する場合の使用方法を次に示します。

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
            :
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 EISUU PIC X(4) VALUE 'AAAA'.
      01 NIHON PIC N(4).
      01 CHECK-PARM.
        02 CHECK-IND.
          03 CHECK-ALL PIC X(01).
          03 CHECK-TYP PIC X(01).
          03 CHECK-UKE PIC X(01).
          03 FILLER    PIC X(01)  VALUE  '0'.
        02  CHECK-LNG1 PIC 9(08) USAGE COMP.
        02  CHECK-LNG2 PIC 9(08) USAGE COMP.
            :
      PROCEDURE DIVISION.
            :
          MOVE '0' TO CHECK-ALL CHECK-TYP CHECK-UKE.
          MOVE  4  TO CHECK-LNG1.
          MOVE  4  TO CHECK-LNG2.
          CALL 'CBLNCNV' USING CHECK-PARM EISUU NIHON.
          IF RETURN-CODE NOT = 0 THEN
              CBLNCNVエラー処理
          END-IF.
            :

変換規則（EUCを使用する場合）

このサービスルーチンでの変換規則を次に示します。

次の半角文字はそのまま同じ全角文字に変換します。
[図データ]

次の半角文字は，対応する全角文字に変換されます。
[図データ]
ただし，X'8E'で始まる2バイトのエリアで，2バイト目がX'A1'～X'DF'以外の場合は，半角の空白2個（X'2020'）に変換します。

－（半角オーバライン）は全角の「～」に変換します。

'（アポストロフィ）は全角の「’」（X'A1C7'）に変換します。

"（引用符）は全角の「"」（X'A1C9'）に変換します。

,（X'8EA4'）は全角の「、」（X'A1A2'）に変換します。

次の文字はX'2020'（半角の空白2個）に変換します。
`（アクサングラーブ，X'60'）　X'01'～X'0F'
X'10'～X'1F'　X'80'～X'8D'　X'90'～X'9F'　X'A0'

X'00'は，X'0000'に変換します。

X'7F'およびX'FFは，X'FFFF'に変換します。

半角の空白が偶数個のときは変換しません。
半角の空白が奇数個のときは，受け取り側作用対象が日本語項目か日本語編集項目かによって次のように異なります。
・受け取り側作用対象が日本語項目のときは，最後の1個を全角の空白（X'A1A1'）に変換します。
・受け取り側作用対象が日本語編集項目のときは，最後に半角の空白（X'20'）を追加します。

日本語EUCの全角文字は変換しません。

制御文字X'8F'は変換しません。変換後のデータの後ろの空き領域には半角の空白（X'20'）を埋めます。

一般規則（EUCを使用する場合）

規則に反した引数を指定した場合の結果は保証しません。

日本語以外のEUC環境では結果が保証しません。

使用例（EUCを使用する場合）

半角の"AAAA"を全角の"ＡＡＡＡ"に変換する場合の使用方法を次に示します。

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
            :
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      01 EISUU PIC X(8) VALUE 'AAAA'.
      01 NIHON PIC N(4).
      01 CHECK-PARM.
        02 CHECK-IND.
          03 CHECK-ALL PIC X(01).
          03 CHECK-TYP PIC X(01).
          03 CHECK-UKE PIC X(01).
          03 FILLER    PIC X(01)  VALUE  '0'.
        02  CHECK-LNG1 PIC 9(08) USAGE COMP.
        02  CHECK-LNG2 PIC 9(08) USAGE COMP.
            :
      PROCEDURE DIVISION.
            :
          MOVE '0' TO CHECK-ALL CHECK-TYP CHECK-UKE.
          MOVE  8  TO CHECK-LNG1.
          MOVE  4  TO CHECK-LNG2.
          CALL 'CBLNCNV' USING CHECK-PARM EISUU NIHON.
          IF RETURN-CODE NOT = 0 THEN
              CBLNCNVエラー処理
          END-IF.
            :

変換規則（Unicode機能を使用する場合）

Unicode機能については，「27.　Unicode機能（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）」を参照してください。

このサービスルーチンでの変換規則を次に示します。

次の半角文字（UTF-8）は，該当する全角文字（UTF-16）に変換します。UTF-16への変換は，実行時環境変数CBLUNIENDIANの設定に従いUTF-16LE，またはUTF-16BEに変換します。
[図データ]

－（半角オーバライン）は全角の「～」に変換します。

'（アポストロフィ）は全角の「’」（X'2019'）に変換します。

"（引用符）は全角の「”」（X'201D'）に変換します。

次の文字は半角空白1個※1に変換します。
`（アクサングラーブ，X'60'）　X'01'～X'0F'　X'10'～X'1F'

X'00'はX'0000'に変換します。

X'7F'はX'FFFF'に変換します。

半角の空白（X'20'）が偶数個のときは全角変換※1しません。
半角空白が奇数個のときは，受け取り側作用対象が日本語項目か日本語編集項目かによって次のように異なります。
・受け取り側作用対象が日本語項目のときは，最後の1個を全角の空白※2に変換します。
・受け取り側作用対象が日本語編集項目のときは，最後に半角の空白※1を追加します。

全角文字（UTF-8）は，対応する全角文字（UTF-16）へ変換します。

注※1

半角空白の文字コードは，UTF-16LEのときはX'2000'，UTF-16BEのときはX'0020'となります。

注※2

全角空白の文字コードは，UTF-16LEのときはX'0030'，UTF-16BEのときはX'3000'となります。

一般規則（Unicode機能を使用する場合）

規則に反した引数を指定した場合の結果は保証しません。

使用例（Unicode機能を使用する場合）

半角の"[図データ]"を全角の"ＡＡアア"に変換する場合の使用方法を次に示します。

用途がDISPLAYの項目の領域は，文字コードを意識して設定してください。シフトJISとUTF-8では必要とする領域のサイズが異なります。半角かたかなの場合，シフトJISでは1文字が1バイトですが，UTF-8では1文字が3バイトとなります。

      IDENTIFICATION  DIVISION.
      PROGRAM-ID.  SAMPLE1.
               ：
      DATA  DIVISION.
      WORKING-STORAGE  SECTION.
      01  EISUU  PIC  X(8)  VALUE  '[図データ]'.
      01  NIHON  PIC  N(4).
      01  CHECK-PARM.
        02  CHECK-IND.
          03  CHECK-ALL  PIC  X(01).
          03  CHECK-TYP  PIC  X(01).
          03  CHECK-UKE  PIC  X(01).
          03  FILLER       PIC  X(01)  VALUE  '0'.
        02  CHECK-LNG1     PIC  9(8)  USAGE  COMP.
        02  CHECK-LNG2     PIC  9(8)  USAGE  COMP.
               ：
      PROCEDURE  DIVISION.
               ：
          MOVE  '0'  TO  CHECK-ALL  CHECK-TYP  CHECK-UKE.
          MOVE   8   TO  CHECK-LNG1.
          MOVE   4   TO  CHECK-LNG2.
          CALL  'CBLNCNV'  USING  CHECK-PARM  EISUU  NIHON.
          IF  RETURN-CODE  NOT = 0  THEN
              *> CBLNCNVエラー処理
          END-IF.
               ：

29.7.2　CBLUBIT

CBLUBITサービスルーチンは，ビットデータを論理演算するものです。

形式

CALL 'CBLUBIT' USING 引数1 引数2 引数3 引数4

引数

引数1には，第一演算項のデータを1バイトの英数字項目で指定します。

引数2には，第二演算項のデータを1バイトの英数字項目で指定します。

引数3には，次の演算命令コードを指定します。
A：AND（論理積）
O：OR（論理和）
X：XOR（排他的論理和）

引数4には，演算結果が格納されます。

戻り値

0：正常終了した場合

-1：エラーが発生した場合

規則

引数1～4が1バイト以上の長さの場合，先頭の1バイトだけが有効となります。

使用例

X'00'とX'FF'の論理積を求める場合の使用例を次に示します。

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
           :
      DATA DIVISION.
      WORKING-STORAGE  SECTION.
      01 OP-1 PIC X(01) VALUE X'00'.
      01 OP-2 PIC X(01) VALUE X'FF'.
      01 OP-3 PIC X(01) VALUE 'A'.
      01 OP-4 PIC X(01).
          :
      PROCEDURE DIVISION.
          :
          CALL 'CBLUBIT' USING OP-1 OP-2 OP-3 OP-4.
          IF RETURN-CODE NOT = 0 THEN
              CBLUBITエラー処理
          END-IF.
          :

29.8　データベース操作機能

＜この節の構成＞

29.8.1　CBLSQLERROR（Linux(x86)，Linux(x64)で有効）

29.8.1　CBLSQLERROR（Linux(x86)，Linux(x64)で有効）

CBLSQLERRORサービスルーチンは，埋め込みSQL文によるODBCインタフェース機能の使用時に，出力された実行時メッセージのエラー情報（COBOLメッセージ番号，SQLSTATE，SQLエラーコード）を取得します。

形式

CALL 'CBLSQLERROR' USING 引数1

引数

引数1は，取得する実行時エラーメッセージのエラー情報を指定します。この項目は次の形式の集団項目とします。

表29-4　CBLSQLERRORサービスルーチンのインタフェース領域

記述形式
内容

01 データ名01.

CALL文のUSINGで指定するエラー情報取得領域の名前を指定する。

02 データ名02 PIC S9(9)
               USAGE COMP.

COBOLメッセージ番号

02 FILLER    PIC X(7).

予備。このサービスルーチンを呼び出す前にLOW-VALUE(X'00')を設定しなければならない。

02 データ名03 PIC X(5).

SQLSTATE

02 データ名04 PIC S9(9)
               USAGE COMP.

SQLエラーコード

02 FILLER    PIC X(516).

予備。このサービスルーチンを呼び出す前にLOW-VALUE(X'00')を設定しなければならない。

戻り値

0：エラー情報が取得できた場合

100：エラー情報がない場合

-1：エラー情報の取得に失敗した場合

規則

CBLSQLERRORサービスルーチンを呼び出すと，直前に実行された埋め込みSQL文で出力されたエラーメッセージに対するエラー情報（COBOLメッセージ番号，SQLSTATE，SQLエラーコード）が引数1に設定されます。また，SQL文実行時のエラーメッセージ出力抑止の環境変数を指定した場合でも，抑止されたメッセージのエラー情報が設定されます。引数1に設定されるエラー情報を次に示します。

表29-5　引数1に設定されるエラー情報の説明

エラー情報 | 説明
COBOLメッセージ番号 | 直前に実行された埋め込みSQL文で出力されたKCCC8000R-SからKCCC8026R-Sのメッセージ番号が設定されます。メッセージについては，マニュアル「COBOL2002　メッセージ」を参照してください。
SQLSTATE | ODBCドライバマネージャが返す診断コードが設定されます。詳細については，使用しているODBCドライバまたはDBMSのマニュアルを参照してください。
SQLエラーコード | データソース固有のネイティブエラーコードが設定されます。詳細については，使用しているODBCドライバまたはDBMSのマニュアルを参照してください。

CBLSQLERRORサービスルーチンの戻り値は，RETURN-CODE特殊レジスタで参照できます。

SQLSTATEおよびSQLエラーコードは，実行時メッセージKCCC8002R-SまたはKCCC8007R-Wが出力された場合に設定されます。それ以外の実行時メッセージの場合は，SQLSTATEには空白，SQLエラーコードには0が設定されます。

SQLSTATEおよびSQLエラーコードは，実行時メッセージKCCC8002R-SまたはKCCC8007R-Wが出力された場合に設定されます。それ以外の実行時メッセージの場合は，SQLSTATEには空白，SQLエラーコードには0が設定されます。

直前に実行された埋め込みSQL文で複数のエラーメッセージが出力された場合，CBLSQLERRORサービスルーチンの戻り値が100になるまで繰り返し呼び出すことで，すべてのエラー情報を取得できます。CBLSQLERRORサービスルーチンの戻り値が100の場合，COBOLメッセージ番号，SQLエラーコードは0，SQLSTATEには空白が設定されます。

埋め込みSQL文を実行しないでCBLSQLERRORサービスルーチンを実行すると，戻り値は100を返します。

CBLSQLERRORサービスルーチンでエラーが発生し，エラー情報の取得に失敗した場合，戻り値は-1を返します。

暗黙的に実行されるSQL文（DISCONNECT文での暗黙的なCOMMIT文など）でエラーが発生した場合でも，CBLSQLERRORサービスルーチンはエラー情報を取得します。暗黙的に実行されるSQL文は，マニュアル「COBOL2002　言語　拡張仕様編　9. データベースアクセス機能」の各SQL文の一般規則を参照してください。

注意事項

引数の指定，および形式が「表29-4　CBLSQLERRORサービスルーチンのインタフェース領域」と異なる場合の動作は保証しません。

使用例

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
               :
      DATA DIVISION.
      WORKING-STORAGE SECTION.
               :
      01  OP-1.
        02 ERR-MSGNUMBER     PIC S9(9) USAGE COMP.
        02 FILLER            PIC X(7)   VALUE LOW-VALUE.
        02 ERR-SQLSTATE      PIC X(5).
        02 ERR-SQLERRORCODE  PIC S9(9) USAGE COMP.
        02 FILLER            PIC X(516) VALUE LOW-VALUE.
      01  STMT-PROC          PIC X(20).
      01  戻り値             PIC S9(9) USAGE COMP.
               :
      EXEC SQL BEGIN DECLARE SECTION END-EXEC.
      01 ODBC-DSN            PIC X(10) VALUE 'SAMPLE'.
      01 ODBC-UID            PIC X(10) VALUE 'USER1'.
      01 ODBC-PWD            PIC X(10) VALUE 'USER1'.
      EXEC SQL END DECLARE SECTION END-EXEC.
           :
      PROCEDURE DIVISION.
               :
     *>SQL文を実行できたかどうかを<埋め込み例外宣言>にて判断します。
          EXEC SQL
               WHENEVER SQLERROR PERFORM :エラー処理  … 1.
          END-EXEC.
               :
     *>データソースに接続する。
          MOVE 'データソースへの接続' TO STMT-PROC.  … 2.
          EXEC SQL
               CONNECT :ODBC-UID IDENTIFIED BY :ODBC-PWD
                   USING :ODBC-DSN
          END-EXEC.
               :
     *>表を参照する。
          MOVE '表のデータ参照' TO STMT-PROC.  … 2.
          EXEC SQL
               SELECT  … 3.
          END-EXEC.
               :
     *>データソースから切断する。
          MOVE 'データソースから切断' TO STMT-PROC.  … 2.
          EXEC SQL
               DISCONNECT
          END-EXEC.
          STOP RUN.
               ：
      エラー処理.    … 4.
          PERFORM WITH TEST AFTER UNTIL 戻り値 NOT = ZERO
            CALL 'CBLSQLERROR' USING OP-1
            MOVE RETURN-CODE TO 戻り値
            EVALUATE 戻り値
              WHEN  0
                DISPLAY STMT-PROC … 5.
     *>              ＜＜ エラー情報判定，リカバリ処理 ＞＞
                                :
              WHEN  -1
                DISPLAY 'CBLSQLERRORが失敗しました。'
            END-EVALUATE
          END-PERFORM.
               :

上記の例では，3.の埋め込みSQL文実行でエラーが発生した場合に，1.の埋め込み例外宣言の指定によって，4.のエラー処理段落が実行されます。ここでCBLSQLERRORサービスルーチンを呼び出し，エラー情報を取得します。2.のように埋め込みSQL文実行ごとに，実行状態を退避しておくと，5.で，どの実行状態でエラーが発生したかがわかります。

29.9　XMAP3を使用した画面・帳票関連

XMAP3を使用した書式印刷機能，XMAP3を使用した通信節による画面操作・帳票出力機能に関するサービスルーチンです。

＜この節の構成＞

29.9.1　CBLXMAPERROR（AIX(32)で有効）

29.9.1　CBLXMAPERROR（AIX(32)で有効）

CBLXMAPERRORサービスルーチンは，XMAP3を使用した書式印刷機能，XMAP3を使用した通信節による画面操作・帳票出力機能で，出力される実行時メッセージのエラー情報（COBOLメッセージ番号，エラーコード）を取得します。

形式

CALL  'CBLXMAPERROR'  USING  引数1

引数

引数1は，次に示す形式の集団項目です。

表29-6　CBLXMAPERRORサービスルーチンの集団項目

記述形式
内容

01 データ名01.

CALL文のUSINGで指定するエラー情報取得領域の名前を指定します。

02 データ名02  PIC S9(9) USAGE COMP.

COBOLメッセージ番号です。

02 データ名03  PIC 9(9)  USAGE COMP.

エラーコードです。

02 FILLER      PIC X(528).

予備。このサービスルーチンを呼び出す前にLOW-VALUE(X'00')を設定しておきます。

注

引数の指定，および形式が異なる場合の動作は保証しません。

戻り値

0：エラー情報が取得できた場合

100：エラー情報がない場合

-1：エラー情報の取得に失敗した場合

規則

CBLXMAPERRORサービスルーチンを呼び出すと，直前に実行されたXMAP3を使用した書式印刷機能の入出力文，またはXMAP3を使用した通信節による画面操作・帳票出力機能の通信文で出力されるエラーメッセージに対するエラー情報（COBOLメッセージ番号，エラーコード）が引数1に設定されます。また，XMAP3を使用した書式印刷機能でFILE STATUS句を指定した場合でも，該当する実行時メッセージのエラー情報が設定されます。
引数1に設定されるエラー情報を次に示します。

表29-7　引数1に設定されるエラー情報の説明

エラー情報 | 説明
COBOLメッセージ番号 | 直前に実行されたXMAP3を使用した書式印刷機能の入出力文，またはXMAP3を使用した通信節による画面操作・帳票出力機能の通信文で出力されたKCCC3401R-SからKCCC3418R-S，またはKCCC5000R-WからKCCC5051R-WまでのSレベル以下のメッセージ番号が設定されます。メッセージについては，マニュアル「COBOL2002　メッセージ」を参照してください。
エラーコード | XMAP3が返したエラー詳細コードです。XMAP3のエラー詳細コードについては，XMAP3のマニュアル「画面・帳票サポートシステム XMAP3 開発・実行ガイド」またはマニュアル「XMAP3 Version 5 画面・帳票サポートシステム XMAP3 実行ガイド」のリターンコードの説明を参照してください。

CBLXMAPERRORサービスルーチンの戻り値は，RETURN-CODE特殊レジスタで参照できます。

エラーコードは，実行時メッセージKCCC3416R-S，KCCC3417R-S，KCCC5007R-S，KCCC5008R-S，またはKCCC5040R-S～KCCC5051R-Wが出力された場合に設定されます。それ以外の実行時メッセージの場合は，エラーコードには0が設定されます。

次に示す場合，CBLXMAPERRORサービスルーチンの戻り値は100を返します。CBLXMAPERRORサービスルーチンの戻り値が100の場合，COBOLメッセージ番号，エラーコードは0が設定されます。
・直前に実行された入出力文，通信文でエラーが発生していない場合
・入出力文，通信文を実行しないでCBLXMAPERRORサービスルーチンを呼び出した場合
・CBLXMAPERRORサービスルーチンを呼び出したあとに入出力文，通信文を実行しないで，再度，CBLXMAPERRORサービスルーチンを呼び出した場合

CBLXMAPERRORサービスルーチンでエラーが発生し，エラー情報の取得に失敗した場合，戻り値は-1を返します。

使用例

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
               :
      DATA DIVISION.
      WORKING-STORAGE SECTION.
               :
      01  OP-1.
        02 ERR-MSGNUMBER     PIC S9(9) USAGE COMP.
        02 ERR-XMAPERRORCODE PIC 9(9)  USAGE COMP.
        02 FILLER            PIC X(528) VALUE LOW-VALUE.
      01  STMT-PROC          PIC X(20).
      01  戻り値             PIC S9(9) USAGE COMP.
               :
          COPY MDC1PCO.
               :
      COMMUNICATION  SECTION.
      CD  PRINT-O  FOR  OUTPUT  WS
          MAP  NAME  IS  PRINT-MAP
          MAPPING  MODE  IS  PRINT-MAPMODE
          STATUS  KEY  IS  PRINT-KEY
          DATA  ABSENCE  CODE  IS  PRINT-ABSENCE
          SYMBOLIC  TERMINAL  IS  PRINT-TERMINAL.
               :
    PROCEDURE DIVISION.
               :
          MOVE 'PRT001へMDC1PC6G帳票を送信' TO STMT-PROC.   … 2.
          MOVE  'MDC1PC6G' TO  PRINT-MAP.
          MOVE  'PRT001'  TO  PRINT-TERMINAL.
          SEND  PRINT-O  FROM  MDC1PCO  WITH  EMI.          … 3.
          IF PRINT-KEY NOT = '00000'
            PERFORM エラー処理                              … 1.
               :
          STOP RUN.
              ：
      エラー処理.                                           … 4.
            CALL 'CBLXMAPERROR' USING OP-1
            MOVE RETURN-CODE TO 戻り値
            EVALUATE 戻り値
              WHEN  0
                DISPLAY STMT-PROC                           … 5.
     *>              ＜＜ エラー情報判定，リカバリ処理 ＞＞
                                :
              WHEN  -1
                DISPLAY 'CBLXMAPERRORが失敗しました。'
            END-EVALUATE.
               :

この例では，3.のSEND文実行でエラーが発生した場合に，1.のPERFORM文から，4.のエラー処理段落が実行されます。ここでCBLXMAPERRORサービスルーチンを呼び出し，エラー情報を取得します。2.のように通信文実行ごとに実行状態を退避しておくと，5.で，どの実行状態でエラーが発生したかがわかります。

30.　プログラミング上の留意点

この章では，処理速度が速く，移植性の良いプログラムを作成する上での留意点について説明します。

＜この章の構成＞

30.1　処理速度の速いプログラムの作成

30.2　移植性の良いプログラムの作成

30.3　COBOLプログラムが使用するスタック領域

30.1　処理速度の速いプログラムの作成

処理速度の速いプログラムを作成するためのチェック項目と，その理由などについて説明します。

＜この節の構成＞

30.1.1　チェック項目一覧

30.1.2　チェック項目の説明

30.1.1　チェック項目一覧

項番 | 分類 | チェック項目
1 | 演算，転記，比較 | 数字項目の定義や演算を工夫できないか。
2 | 添字は4バイトの符号付き2進項目で定義しているか。
3 | 添字は定数で指定できないか。
4 | 比較する項目の長さは同じか。
5 | 2進項目，指標データ項目，浮動小数点項目の境界は適切な位置にあるか。
6 | USAGE句項目の指定や，小数点以下のけた数は一致しているか。
7 | データ転送にむだはないか。
8 | 不要な小数点はないか。
9 | 可変長項目のあとに固定長項目を定義していないか。
10 | ファイル処理 | READ INTO，WRITE FROMを使っていないか。
11 | 領域 | 作業場所節および局所場所節で，一緒に使う項目は互いに近くで定義しているか。

30.1.2　チェック項目の説明

＜この項の構成＞

(1)　数字項目の定義や演算を工夫できないか

(2)　添字は4バイトの符号付き2進項目で定義しているか

(3)　添字は定数で指定できないか

(4)　比較する項目の長さは同じか

(5)　2進項目，指標データ項目，浮動小数点項目の境界は適切な位置にあるか

(6)　USAGE句項目の指定や，小数点以下のけた数は一致しているか

(7)　データ転送にむだはないか

(8)　不要な小数点はないか

(9)　可変長項目のあとに固定長項目を定義していないか

(10)　READ INTO，WRITE FROMを使っていないか

(11)　作業場所節および局所場所節で，一緒に使う項目は互いに近くで定義しているか

(1)　数字項目の定義や演算を工夫できないか

データ項目の属性変換が発生しないようにしたり，算術演算子を少なくしたりして中間結果のけた数を最小にすると処理速度が向上します。そのために留意する点を次に示します。

(a)　数字項目のけた拡張機能を使用しない場合

数字項目を定義する場合は，SYNC句指定のある符号付き2進項目（COMP）とし，また，けた数を必要以上に大きくしないようにします。

10進項目は演算に使わないようにします。例えば，入出力レコード中の10進のデータ項目を演算で頻繁に使うときは，データ項目を2進項目の作業領域に移してから演算するようにします。

属性の異なるもの同士の演算は避けます。例えば，2進項目と内部10進項目，2進項目と外部10進項目などの演算を避けます。

複雑なCOMPUTE文は分割するなどし，一つのCOMPUTE文中の算術演算子を少なくします。COMPUTE文中に多くの算術演算子を使うと，けたあふれも発生しやすくなります。

1バイト2進項目を使用する処理はできるだけ局所化し，演算に使用する項目には2バイト2進項目を使用するようにします。

(b)　数字項目のけた拡張機能を使用する場合

けた数が19～38けたの数字項目を定義する場合は，内部10進項目（COMP-3）とし，けた数を必要以上に大きくしないようにします。

けた数が19～38けたの数字項目や数字定数を使用する処理は，ソースファイルごとにできるだけ局所化します。

属性の異なるもの同士の演算は避けます。例えば，2進項目と内部10進項目，2進項目と外部10進項目などの演算を避けます。

複雑なCOMPUTE文は分割するなどし，一つのCOMPUTE文中の算術演算子を少なくします。COMPUTE文中に多くの算術演算子を使うと，けたあふれも発生しやすくなります。

1バイト2進項目を使用する処理はできるだけ局所化し，演算に使用する項目には2バイト2進項目を使用するようにします。

数字項目のけた拡張機能については，「28.　数字項目のけた拡張機能（HP-UX(IPF64)，AIX(64)，Linux(x64)で有効）」を参照してください。

(2)　添字は4バイトの符号付き2進項目で定義しているか

添字は4バイトの符号付き2進項目として処理されます。それ以外の形式のときは，データ変換命令が生成されるため処理速度が遅くなります。

(3)　添字は定数で指定できないか

添字を定数にすると，アドレス計算のための命令が生成されないので，処理速度が向上します。

（悪い例）

            :
          MOVE 3 TO J.
          MOVE A TO B(J).

（良い例）

            :
          MOVE A TO B(3).

(4)　比較する項目の長さは同じか

英数字項目を比較するときに項目の長さが異なると，コンパイラは長さの差の部分が空白かどうかを調べるオブジェクトコードを生成します。このため，項目の長さを同じにすると処理速度が向上します。

(5)　2進項目，指標データ項目，浮動小数点項目の境界は適切な位置にあるか

2進項目，指標データ項目，浮動小数点項目がそれぞれの適切な境界にないと，処理速度が遅くなります。境界については，マニュアル「COBOL2002　言語　標準仕様編　4.4.1(7) 実行用コードの効率を高めるための項目のけた詰め」を参照してください。

境界を合わせるには，SYNC句を指定する方法と，利用者がバイト数を計算して合わせる方法とがあります。ただし，SYNC句を使うと処理速度は向上しますが，多用すると実行可能プログラムが必要以上に大きくなることがあるので注意してください。

バイト数を計算して境界を合わせる例を次に示します。

（例）

      WORKING-STORAGE SECTION.
      01 DATA-SGROUPS.
         *> 境界合わせが必要なものをまとめ,境界合わせを
         *> 計算しながら並べる
        02 A PIC S9(12) USAGE COMP.
        02 B PIC S9(7) USAGE COMP.
        02 C PIC S9(7) USAGE COMP.
        02 D USAGE COMP-1.
        02 E USAGE COMP-1.
        02 F USAGE COMP-2.
        02 G PIC S9(14) USAGE PACKED-DECIMAL.
        02 H PIC S9(10) USAGE COMP.
        02 I USAGE INDEX.
         *> 境界合わせが不要なものをまとめる
        02 J PIC S9(10) DISPLAY.

(6)　USAGE句項目の指定や，小数点以下のけた数は一致しているか

USAGE句項目が一致していないと，データ変換命令が生成されるため処理速度が遅くなります。また，小数点以下のけた数が一致していないと，演算のときにけた数を合わせる命令が生成されるため処理速度が遅くなります。

（悪い例）

      WORKING-STORAGE SECTION.
      77 TOL PIC S9(3) USAGE COMP.
      77 NUM PIC S9(3)V99 USAGE PACKED-DECIMAL.
      77 AVE PIC S9(3)V9.
           :
      PROCEDURE DIVISION.
           :
          COMPUTE AVE = TOL / NUM.

（良い例）

      WORKING-STORAGE SECTION.
      77 TOL PIC S9(3)V9 USAGE PACKED-DECIMAL.
      77 NUM PIC S9(3)V9 USAGE PACKED-DECIMAL.
      77 AVE PIC S9(3)V9 USAGE PACKED-DECIMAL.
          :
      PROCEDURE DIVISION.
          :
          COMPUTE AVE = TOL / NUM.

(7)　データ転送にむだはないか

入力レコードを作業領域に転送するとき，むだなデータを転送することがよくあります。転記する文は，項目の長さに比例して時間が掛かります。複数のMOVE文に分けて実際に転送する長さを短くすると処理速度が向上します。

（悪い例1）

      01 A1.     *> 入力領域
        02 FILLER PIC X(300).
        02 B1     PIC X(5).
        02 FILLER PIC X(30).
        02 C1     PIC X(5).
      01 A2.     *> 作業領域
        02 FILLER PIC X(300).
        02 B2     PIC X(5).
        02 FILLER PIC X(30).
        02 C2     PIC X(5).
             :
      PROCEDURE DIVISION.
             :
          MOVE A1 TO A2.

（良い例1）

      01 A1.     *> 入力領域
        02 FILLER PIC X(300).
        02 B1     PIC X(5).
        02 FILLER PIC X(30).
        02 C1     PIC X(5).
      01 A2.     *> 作業領域
        02 FILLER PIC X(300).
        02 B2     PIC X(5).
        02 FILLER PIC X(30).
        02 C2     PIC X(5).
          :
      PROCEDURE DIVISION.
          :
          MOVE B1 TO B2.
          MOVE C1 TO C2.

（悪い例2）

      FILE SECTION.
      FD AFILE RECORDING MODE V.
      01 A1.
        02 L      PIC S9(5) USAGE COMP. *> 入力レコード長
        02 FILLER PIC X(4000).
           *> 最大レコードだけを定義している
          :
      WORKING-STORAGE SECTION.
      01 WK.
        02 詳細なレコード定義
          :
      PROCEDURE DIVISION.
          :
          MOVE A1 TO WK.

（良い例2）

      FILE SECTION.
      FD AFILE
      RECORD VARYING IN SIZE
              TO 4000
              DEPENDING ON CNT.
      01 A1 PIC X(4000).
              :
      WORKING-STORAGE SECTION.
      77 CNT PIC 9(4).
      01 WK.
        02 詳細なレコード定義
              :
      PROCEDURE DIVISION.
          :
          MOVE A1(1:CNT) TO WK(1:CNT).

(8)　不要な小数点はないか

小数点があると処理が複雑になることがあり，処理速度が遅くなります。

(9)　可変長項目のあとに固定長項目を定義していないか

可変長項目の長さは実行時に変化します。可変長項目のあとにある固定長項目を参照する文があると，コンパイラはアドレスづけのための特別なオブジェクトコードを生成します。このため，通常の固定長項目を参照するよりも処理速度が遅くなります。

また，可変長項目のあとにその可変長項目に従属する項目以外を記述することは，COBOL規格で禁止されています。そのため，このような記述をする場合は，COBOL規格外の記述として注意する必要があります。

（悪い例）

      WORKING-STORAGE SECTION.
      01 V-GROUP.
        02 C PIC X
           OCCURS …… DEPENDING  ON I.
        02 A PIC S9(5) USAGE COMP.
        02 B PIC 9(6).
              :

（良い例）

      WORKING-STORAGE SECTION.
      01 J-GROUP.
        02 A PIC S9(5) USAGE COMP.
        02 B PIC 9(6).
        02 C PIC X
          OCCURS …… DEPENDING ON I.
              :

(10)　READ INTO，WRITE FROMを使っていないか

READ INTO，WRITE FROMを使うと，レコードの入出力処理でプログラム内のレコード領域との間でデータ転送が発生し，処理速度が遅くなります。

(11)　作業場所節および局所場所節で，一緒に使う項目は互いに近くで定義しているか

このシステムでは，作業場所節および局所場所節で定義した項目は，定義した場所に確保されます。このため，一緒に使用する項目は近くに定義して参照を局所化すると処理速度が向上します。

30.2　移植性の良いプログラムの作成

移植性の良いプログラムを作成するためのチェック項目と，その理由などについて説明します。

＜この節の構成＞

30.2.1　チェック項目一覧

30.2.2　チェック項目の説明

30.2.1　チェック項目一覧

項番
分類
チェック項目

1
定数
半角かたかな文字は使わないようにできないか。

2
16進英数字定数は使わないようにできないか。

3
日本語文字データの転記，比較に英数字定数を使わないようにできないか。

4
日本語定数の中に空白を使わないようにしているか。

5
プログラム名
プログラム名には英小文字を使わないようにできないか。

6
文字比較
異なった文字集合間での順序の比較はしていないか。

7
内部表現
数値の内部表現を意識したコーディングをしていないか。

8
入出力
9xの入出力状態は利用しないようにできないか。

9
正書法
固定形式正書法の場合，日本語を含む原始プログラムの1行を，プログラム原文領域の2/3程度までで終わらせているか。

10
COPY文
REPLACE文
COPY文のREPLACING指定およびREPLACE文の作用対象に日本語を使わないようにできないか。

11
C言語との連携
CALL文で直接システム関数を呼び出していないか。

12
その他
システム固有の言語仕様を使わないようにできないか。

30.2.2　チェック項目の説明

＜この項の構成＞

(1)　半角かたかなは使わないようにできないか

(2)　16進英数字定数は使わないようにできないか

(3)　日本語文字データの転記，比較に英数字定数を使わないようにできないか

(4)　日本語定数の中に空白を含まないようにしているか

(5)　プログラム名には英小文字を使わないようにできないか

(6)　異なった文字集合間での順序の比較はしていないか

(7)　数値の内部表現を意識したコーディングをしていないか

(8)　9xの入出力状態は利用しないようにできないか

(9)　固定形式正書法の場合，日本語を含む原始プログラムの1行をプログラム原文領域の2/3程度で終わらせているか

(10)　COPY文のREPLACING指定およびREPLACE文の作用対象に日本語を使わないようにできないか

(11)　CALL文で直接システム関数を呼び出していないか

(1)　半角かたかなは使わないようにできないか

コンパイラがサポートするコード系には，シフトJIS（SJIS）コードまたは日本語EUCコード（UJIS）の２種類があり，どちらの種類のコード系を対象とするかは，システムによって異なります。

半角かたかな文字のバイト数が，シフトJISコードと日本語EUCコードでは次のように異なります。このため，半角かたかな文字は使わないで全角かたかなを使った方が移植性が良くなります。

(2)　16進英数字定数は使わないようにできないか

内部コードはシステムによって異なります。16進英数字定数を使うということは内部コードを意識しているということなので移植性が悪くなります。

(3)　日本語文字データの転記，比較に英数字定数を使わないようにできないか

システムによってはシフトコードを指定することで日本語文字データを区別しているものがあります。日本語定数を使わないで，英数字定数で日本語文字データを指定すると，英数字定数の長さが異なってきます。日本語文字データの転記，比較などは日本語定数を使った方が移植性が良くなります。

(4)　日本語定数の中に空白を含まないようにしているか

全角の空白を記述した場合，システムによってコード値が(2020)₁₆になったり，(8140)₁₆になったりします。このため，比較や転記などで使用する日本語定数の中に空白があると，生成されるオブジェクトコードが異なります。

(5)　プログラム名には英小文字を使わないようにできないか

システムによっては，プログラム名に英小文字を使えないものや英大文字と英小文字の等価規則が適用されないものがあります。このため，プログラム名段落やCALL文のプログラム名に英小文字を使わない方が移植性が良くなります。

(6)　異なった文字集合間での順序の比較はしていないか

異なった文字集合（例えば，かたかな文字と英数字文字）の順序は，システムによって異なります。このため，異なった文字集合間の比較をしない方が移植性が良くなります。

(7)　数値の内部表現を意識したコーディングをしていないか

数値の表現方法は，符号表現を含めてシステムに依存します。このため，数値の内部表現を意識したコーディングを避けた方が移植性が良くなります。

（悪い例）

      01 X.
        02 A PIC 9(2) USAGE COMP-X.
        02 B PIC X.
      01 FILLER REDEFINES X.
        02 AA PIC X.
        02 BB PIC 9(2) USAGE COMP-X.
          :
      PROCEDURE DIVISION.
          :
          MOVE 65 TO A.
          IF AA = 'A' THEN
              :

(8)　9xの入出力状態は利用しないようにできないか

9xの入出力状態はシステムによって異なります。このため，比較などに使わない方が移植性が良くなります。

9xを使う必要があるときは，90以上かどうかを問う比較にした方が，移植性が良くなります。

（悪い例）

          :
      SELECT A-FILE...
              FILE STATUS IS RTN.
          :
      PROCEDURE DIVISION.
          :
        IF RTN = '90'

（良い例）

          :
      SELECT A-FILE...
              FILE STATUS IS RTN.
          :
      PROCEDURE DIVISION.
          :
        IF RTN NOT < '90'

(9)　固定形式正書法の場合，日本語を含む原始プログラムの1行をプログラム原文領域の2/3程度で終わらせているか

システムによっては，シフトコードを指定することで日本語文字を区別しているものがあります。

日本語を含む1行でプログラム原文領域すべてを使った原始プログラムをほかのシステム（例えば，VOS3など）に移植すると，シフトコードを付加してプログラム原文領域をはみ出てしまうおそれがあります。このため，日本語を含む原始プログラムは，シフトコードを意識して1行を終わらせた方が移植性が良くなります。

(10)　COPY文のREPLACING指定およびREPLACE文の作用対象に日本語を使わないようにできないか

システムによっては，COPY文のREPLACING指定およびREPLACE文の作用対象に，日本語が指定できないものがあります。このため，COPY文のREPLACING指定およびREPLACE文の作用対象に日本語を使わない方が移植性が良くなります。

(11)　CALL文で直接システム関数を呼び出していないか

C言語のシステム関数は，#defineによって実際の関数名とは別の関数名で宣言され，マクロ展開後に置き換えられることがあります。COBOLではC言語のマクロは展開しないため，COBOLプログラムからC言語のシステム関数をCALL文で直接呼び出すと，COBOLからマクロ展開前の関数名を呼び出し，予期しない不具合が発生するおそれがあります。

COBOLプログラムからC言語のシステム関数を呼び出す場合は，直接呼び出さないで，システム関数を呼び出すCプログラムを作成し，このCプログラムを呼び出すようにしてください。

30.3　COBOLプログラムが使用するスタック領域

プログラムが実行時に異常終了する原因の一つに，スタックオーバフローがあります。スタックオーバフローを回避するには，プログラムが使用するスタック領域の量について事前に把握しておく必要があります。ここでは，COBOLプログラムがスタック領域に配置するデータの種類とサイズについて説明します。

＜この節の構成＞

30.3.1　スタック領域に配置されるデータ

30.3.2　プログラム実行時呼び出し関係に依存するスタック領域の消費量

30.3.3　スタック領域のサイズ変更方法

30.3.1　スタック領域に配置されるデータ

COBOLプログラム実行時にスタック領域に配置されるデータを次に示します。

局所場所節に定義したデータ項目

連絡節に定義したデータ項目

COBOLプログラムが内部的に使用するデータ

＜この項の構成＞

(1)　局所場所節に定義したデータ項目

(2)　連絡節に定義したデータ項目

(3)　COBOLプログラムが内部的に使用するデータ

(1)　局所場所節に定義したデータ項目

局所場所節に定義したデータ項目はスタック領域に配置します。データの配置については，マニュアル「COBOL2002　言語　標準仕様編　4.4.1 機種によらないデータ記述」を参照してください。局所場所節に非常にサイズの大きいデータを定義した場合，スタック領域が不足するおそれがありますので注意してください。

(2)　連絡節に定義したデータ項目

連絡節に定義したデータ項目はスタック領域に配置します。配置するサイズは，手続き部のUSING／RETURNING指定によって異なります。

(a)　BY REFERENCE指定のデータ項目

参照渡しの場合
配置するサイズはポインタサイズ（4バイト）※１となります。手続き部のUSINGに指定したデータの数だけポインタサイズを配置します。

内容渡しの場合
配置するサイズは，定義したデータ項目のサイズ（4バイト境界に切り上げ）※２とポインタサイズ（4バイト）※１を合計した値となります。
なお，サイズが非常に大きいデータを定義した場合は，スタック領域が不足するおそれがあるため注意してください。

注※1

HP-UX(IPF)，UNIX64の場合では8バイトとなります。

注※2

UNIX64の場合は8バイト境界に切り上げます。

(b)　BY VALUE／RETURNING指定のデータ項目

配置するサイズは，定義したデータ項目のサイズ（4バイト境界に切り上げ）※となります。スタック領域に定義したデータ項目の値をそのまま配置します。データの配置については，マニュアル「COBOL2002　言語　標準仕様編　4.4.1 機種によらないデータ記述」を参照してください。

なお，サイズが非常に大きいデータを定義した場合，スタック領域が不足するおそれがあるため注意してください。

注※

UNIX64の場合は8バイト境界に切り上げます。

(3)　COBOLプログラムが内部的に使用するデータ

COBOLプログラムで明示的に定義したデータ項目以外に，COBOLプログラムが内部的に使用するデータがあります。このデータはプログラムを実行するために必要なデータです。このデータはCOBOLコンパイラが内部的に自動生成するものであり，またプログラムの内容に依存します。

30.3.2　プログラム実行時呼び出し関係に依存するスタック領域の消費量

プログラム実行時に必要なスタック領域のサイズは，実行時要素の呼び出し関係やその属性に依存します。実行時要素が必要とするスタック領域のサイズは，スタック領域に配置されるデータの合計サイズです。スタック領域に配置されるデータについては，「30.3.1　スタック領域に配置されるデータ」を参照してください。

＜この項の構成＞

(1)　実行時要素の呼び出し関係

(2)　再帰属性プログラム

(1)　実行時要素の呼び出し関係

プログラム実行時に必要なスタック領域のサイズは，実行時要素の呼び出し関係に依存します。例えば，ある実行時要素が別の実行時要素を呼び出し，呼び出された実行時要素がまた別の実行時要素を呼び出します。このように実行時要素の呼び出しが入れ子になっている場合，実行時に必要なスタック領域のサイズは，各実行時要素が必要とするスタック領域のサイズの合計となります。

(2)　再帰属性プログラム

再帰属性プログラムが実行時に必要とするスタック領域のサイズは，プログラムが再帰的に呼び出される回数に依存します。再帰属性プログラムが実行時に必要とするスタック領域のサイズを次に示します。

再帰属性プログラムが一つの実行時要素として必要とするスタック領域のサイズ×再帰的に呼び出される回数

30.3.3　スタック領域のサイズ変更方法

プログラムが使用できるスタック領域のサイズは変更できます。規定の状態ではスタックオーバフローが起こるプログラムであっても，スタック領域のサイズを変更すると正常に実行できます。ただし，この対処方法はプログラムが使用するスタック領域の最大値があらかじめ予想できる場合だけ使用できます。

システムの設定値を変更して使用できるスタック領域のサイズを変更します。変更方法についてはシステムのマニュアルを参照してください。

31.　最適化機能

COBOL2002には，プログラムの実行効率を上げるための最適化機能があります。最適化をするためには，最適化オプションを指定してコンパイルします。この章では，指定するオプションと最適化の内容について説明します。

＜この章の構成＞

31.1　最適化のレベル

31.2　最適化の内容

31.1　最適化のレベル

＜この節の構成＞

31.1.1　最適化オプションの種類

31.1.1　最適化オプションの種類

最適化用のオプションには次に示す-Optimize,0，-Optimize,1，-Optimize,2，-Optimize,3の4種類があり，省略時は-Optimize,1が仮定されます。

＜この項の構成＞

(1)　-Optimize,0オプション

(2)　-Optimize,1オプション

(3)　-Optimize,2オプション

(4)　-Optimize,3オプション

(5)　注意事項

(1)　-Optimize,0オプション

最適化をしません。このため，コンパイル時間は最短になります。

(2)　-Optimize,1オプション

文の中で閉じた次の最適化をします。

命令レベルでの最適化（ピープホールによる不要命令の削除など）（ただし，Solaris(SPARC)ではピープホール最適化はサポートしていません）

(3)　-Optimize,2オプション

広域的な次の最適化をします。

命令レベルでの最適化（ピープホールによる不要命令の削除など）（ただし，Solaris(SPARC)ではピープホール最適化はサポートしていません）

不変式のループ外への移動

コピー伝播

定数の畳み込み

共通式の削除

演算の強さの軽減

そとPERFORM文のインライン展開

(4)　-Optimize,3オプション

-Optimize,2オプションでの最適化に加えて，10進項目を2進項目に変換します。

(5)　注意事項

最適化によって文または文の一部が移動または削除されると，実行時メッセージや異常終了時要約情報リストなどの行番号／欄の情報が正しく出力されないことがあります。
正しい行番号／欄の情報を出力するには，コンパイル時に-Optimize,0オプションを指定して最適化を抑止する必要があります。

-Optimize,3オプションを指定すると次のような副作用を伴うことがあります。

（例）

      01 A PIC S9(9) VALUE +123456789.
      01 B PIC S9(5).
      01 C PIC S9(9).
          :
      PROCEDURE DIVISION.
           :
          MOVE A TO B.
          MOVE B TO C.
          DISPLAY C.

-Optimize,3指定以外のときはデータ項目Cに+56,789が設定されますが，-Optimize,3指定の場合，+123,456,789が設定されます（-DigitsTrunc指定ありの場合を除く）。
また，演算よりも10進項目への代入の方が多いプログラムなど，プログラムによっては-Optimize,3オプションを指定すると実行速度がかえって低下する場合があります。

31.2　最適化の内容

＜この節の構成＞

31.2.1　そとPERFORM文のインライン展開

31.2.2　10進項目の2進項目化

31.2.3　不変式のループ外移動

31.2.4　コピー伝播

31.2.5　共通式の削除

31.2.6　定数の畳み込み

31.2.7　演算強さの軽減

31.2.1　そとPERFORM文のインライン展開

そとPERFORM文のインライン展開の規則について説明します。

なお，PERFORM文については，マニュアル「COBOL2002　言語　標準仕様編　10.8.31 PERFORM文」を参照してください。

＜この項の構成＞

(1)　対象となる節，段落

(2)　THRU指定のあるPERFORM文

(3)　呼ばれる節と段落

(4)　PERFORM文の位置

(5)　呼ばれる節と段落までの間にある文

(6)　呼ばれる節と段落までの間にある節と段落

(7)　注意事項

(1)　対象となる節，段落

手続き部分で定義された節と段落であることが必要です。宣言節で定義された節，段落はインライン化の対象となりません。

(2)　THRU指定のあるPERFORM文

THRU指定のあるPERFORM文の場合，次のどちらかの条件を満たしていなければなりません。

手続き名1と手続き名2の両方が節である

手続き名1と手続き名2の両方が段落である

例1のPERFORM文は，SECT-1が節，PARG-2-1が段落であるため，インライン化の対象となりません。

（例1）

          :
      PROCEDURE DIVISION.
          :
          PERFORM SECT-1 THRU PARG-2-1.
          SECT-1 SECTION.
          PARG-1-1.
          :
          SECT-2 SECTION.
          PARG-2-1.
          :

手続き名1と手続き名2が節の場合，手続き名2の節は手続き名1の節の直後に定義された節である

例2のPERFORM文は，SECT-2がSECT-1の直後に定義されています。

（例2）

              :
      PROCEDURE DIVISION.
              :
          PERFORM SECT-1 THRU SECT-2.
          SECT-1 SECTION.
          PARG-1-1.
              :
          SECT-2 SECTION.
          PARG-2-1.
              :

手続き名1と手続き名2が段落の場合，手続き名2の段落は手続き名1の段落の直後に定義された段落である

例3のPERFORM文は，PARG-1-3がPARG-1-1の直後に定義された段落ではないため，インライン化の対象となりません。

（例3）

           :
      PROCEDURE DIVISION.
           :
          PERFORM PARG-1-1 THRU PARG-1-3.
          SECT-1 SECTION.
          PARG-1-1.
           :
          PARG-1-2.
           :
          PARG-1-3.
           :

(3)　呼ばれる節と段落

呼ばれる節と段落が次の（a）（b）の条件を満たしていることが必要です。

(a)　THRU指定がある場合

手続き名1と手続き名2が節の場合，節または節に従属する段落を分岐文や複数のPERFORM文で参照してはなりません。

手続き名1と手続き名2が段落の場合，段落を分岐文や複数のPERFORM文で参照してはなりません。

例1のPERFORM文は，PARG-2-1がGO TO文によって参照されているため，インライン化の対象となりません。

（例1）

            :
      PROCEDURE DIVISION.
            :
          PERFORM SECT-1 THRU SECT-2.
            :
          GO TO PARG-2-1.
            :
          SECT-1 SECTION.
          PARG-1-1.
            :
          SECT-2 SECTION.
          PARG-2-1.
            :

例2の（1）のPERFORM文は，PARG-1-2とPARG-1-3が（2）のPERFORM文と（3）のGO TO文によって参照されているため，インライン化の対象となりません。

（例2）

           :
      PROCEDURE DIVISION.
           :
          PERFORM PARG-1-2 THRU PARG-1-3. …(1)
           :
          PERFORM PARG-1-1 THRU PARG-1-4. …(2)
           :
          GO TO SECT-1. …(3)
           :
          SECT-1 SECTION.
          PARG-1-1.
           :
          PARG-1-2.
           :
          PARG-1-3.
           :
          PARG-1-4.
           :

(b)　THRU指定がない場合

手続き名1が節の場合，節または節に従属する段落を分岐文や複数のPERFORM文で参照してはなりません。

手続き名1が段落の場合，段落を分岐文や複数のPERFORM文で参照してはなりません。

例1のPERFORM文は，PARG-1-2がGO TO文によって参照されているため，インライン化の対象となりません。

（例1）

           :
      PROCEDURE DIVISION.
           :
          PERFORM SECT-1.
           :
          GO TO PARG-1-2.
           :
          SECT-1 SECTION.
          PARG-1-1.
           :
          PARG-1-2.
           :
          SECT-2 SECTION.
           :

例2の（1）のPERFORM文は，PARG-1-2が（2）のPERFORM文と（3）のGO TO文によって参照されているため，インライン化の対象となりません。

（例2）

           :
      PROCEDURE DIVISION.
           :
          PERFORM PARG-1-2. …(1)
           :
          PERFORM PARG-1-1 THRU PARG-1-3. …(2)
           :
          GO TO SECT-1. …(3)
           :
          SECT-1 SECTION.
          PARG-1-1.
           :
          PARG-1-2.
           :
          PARG-1-3.
           :
          PARG-1-4.
           :

(4)　PERFORM文の位置

PERFORM文が記述されている位置が次の(a)(b)の条件を満たしていることが必要です。

(a)　THRU指定がある場合

手続き名1と手続き名2が節の場合，節または節に従属する段落の中に呼び出し元のPERFORM文があってはなりません。

手続き名1と手続き名2が段落の場合，段落の中に呼び出し元のPERFORM文があってはなりません。

例1のPERFORM文は，SECT-2の中に書かれているため，インライン化の対象となりません。

（例1）

           :
      PROCEDURE DIVISION.
           :
          SECT-1 SECTION.
           :
          SECT-2 SECTION.
          PARG-2-1.
           :
          PERFORM SECT-1 THRU SECT-2.
           :
          SECT-3 SECTION.
           :

例2のPERFORM文は，PARG-1-2中に書かれているため，インライン化の対象となりません。

（例2）

           :
      PROCEDURE DIVISION.
           :
          SECT-1 SECTION.
          PARG-1-1.
           :
          PARG-1-2.
           :
          PERFORM PARG-1-1 THRU PARG-1-2.
           :
          PARG-1-3.
           :

(b)　THRU指定がない場合

手続き名1が節の場合，節または節に従属する段落の中に呼び出し元のPERFORM文があってはなりません。

手続き名1が段落の場合，段落の中に呼び出し元のPERFORM文があってはなりません。

例1のPERFORM文はSECT-1中に書かれているため，インライン化の対象となりません。

（例1）

          :
      PROCEDURE DIVISION.
          :
          SECT-1 SECTION.
          PARG-1-1.
          :
          PERFORM SECT-1.
          :
          SECT-2 SECTION.
          :

例2のPERFORM文はPARG-1-1中に書かれているため，インライン化の対象となりません。

（例2）

           :
      PROCEDURE DIVISION.
           :
          SECT-1 SECTION.
          PARG-1-1.
           :
          PERFORM PARG-1-1.
           :
          SECT-2 SECTION.
           :

(5)　呼ばれる節と段落までの間にある文

呼び出し元のPERFORM文または手続き部先頭から（「(7)　注意事項」を参照），呼ばれる節と段落までの間にある文が次の二つの条件を満たしていることが必要です。

最上位レベルのSTOP RUN文（「(7)　注意事項」を参照）など，プログラムの実行を終了する文がなければなりません。
例1では，STOP RUN文が文のレベルの最上位でないため，インライン化の対象とはなりません。

（例1）

           :
      PROCEDURE DIVISION.
           :
          PERFORM SECT-1.
           :
          IF FLAG = 'ON' THEN
          STOP  RUN.
           :
          SECT-1 SECTION.
           :

文のレベルに関係なく，ENTRY文があってはなりません。
例1ではENTRY文があるため，インライン化の対象となりません。

（例1）

           :
      PROCEDURE DIVISION.
           :
          PERFORM SECT-1.
           :
          IF FLAG = 'ON' THEN
          ENTRY 'SUB01'.
           :
          SECT-1 SECTION.
           :

(6)　呼ばれる節と段落までの間にある節と段落

呼び出し元のPERFORM文または手続き部先頭から（「(7)　注意事項」を参照），呼ばれる節と段落までの間にある節と段落がGO TO文とALTER文の飛び先で参照されてはなりません。

例のPERFORM文は，1.のGO TO文によってSECT-1が参照されているため，インライン化の対象となりません。

（例）

           :
      PROCEDURE DIVISION.
           :
          GO TO SECT-1.  *> 1.
           :
          PERFORM SECT-2.
           :
          SECT-1 SECTION.
           :
          SECT-2 SECTION.
           :

(7)　注意事項

（5），（6）の適用範囲を次の図に示します。

PERFORM文の方が節と段落の定義より前に書かれたときは1.の範囲。

節と段落の定義の方がPERFORM文より前に書かれたときは2.の範囲。
[図データ]

STOP RUN文，-MainNotCBLオプションの指定，または内側のプログラムのEXIT PROGRAM文，EXIT METHOD文，EXIT FUNCTION文，GOBACK文を示します。宣言節中の節と段落は対象外となるため，EXIT USE文，GO TO MORE-LABELS文は対象となりません。

インライン展開された個所で例外が発生した場合，EXCEPTION-LOCATION関数で返される手続き名の値は，インライン展開されていない場合と相違があります。詳細については，「21.7.1　組み込み関数を使用した例外情報の参照」の「(2)　EXCEPTION-LOCATION関数」の注を参照してください。

31.2.2　10進項目の2進項目化

10進項目の2進項目化とは，作業場所節および局所場所節で定義された内部10進項目，外部10進項目を2進項目として扱うことをいいます。すなわち，USAGE句にBINARYが指定されているものとして扱います。-Bin1Byteオプションが指定されていても，けた数が1～2けたの10進項目なら2バイトの2進項目として扱います。ただし，次のどれかの条件に該当する場合は，2進項目化の対象にはなりません。

＜この項の構成＞

(1)　2進項目が指定できない個所に指定されているもの

(2)　2進化することでサイズが大きくなるもの

(3)　データを外部と入出力するもの

(4)　2進にすると長さが異なるもの

(5)　英数字転記／比較をするもの

(6)　外部10進，内部10進，2進で設定される値が異なるもの

(7)　10進項目を間接的に参照／更新するもの

(8)　2進化すると実行速度が遅くなるもの

(9)　ファクトリ定義およびインスタンス定義中の10進項目

(10)　その他

(1)　2進項目が指定できない個所に指定されているもの

画面機能（SCREEN SECTION）※のCURSOR データ名

BLANK WHEN ZERO句がある

SIGN句があるデータ名

サブスキーマ節のSTATUS データ名

サブスキーマ節のDETAIL CODE データ名

部分参照がある

字類条件 一意名

英字，英数字，英数字型関数，英数字編集，数字編集，ZERO以外の表意定数，英数字定数との比較条件（EVALUATEの選択主体と選択対象の比較も含む）

EXAMINE文 一意名1

INSPECT文 一意名1，一意名3～一意名n

STRING文 一意名1，2，3

TRANSFORM文 一意名1

UNSTRING文 一意名4

注※　HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Solaris(SPARC)で有効です。

(2)　2進化することでサイズが大きくなるもの

次の場合，2進化することでサイズが大きくなります。ただし，01／77レベルは除きます。

1けたの外部10進

1，5，10，11，12，13けたの内部10進

(3)　データを外部と入出力するもの

EXTERNAL属性

ADDR関数の引数

次の文に指定されたADDRESS OF 一意名

CALL文 REFERENCE 一意名

比較条件 一意名

SET文 送り出し側作用対象 一意名

SET文 受け取り側作用対象 一意名

ACCEPT文
ただし，次の一意名，データ名は除きます。

ACCEPT 一意名 FROM DATE／DAY／DAY-OF-WEEK／TIME

画面節（SCREEN SECTION）※でのACCEPT文のLINE／COLUMN 一意名

コマンド行の引数の個数を取得するACCEPT文の一意名9

DISPLAY文
ただし，次の一意名，データ名は除きます。

画面節（SCREEN SECTION）※でのDISPLAY文のLINE／COLUMN 一意名

コマンド行の引数の読み込み位置を設定するDISPLAY文の一意名7

CALL文 USING

CALL文 RETURNING

DISABLE文 一意名1

ENABLE文 一意名1

RECEIVE文 一意名1

SEND文 一意名1，2，3，4

TRANSCEIVE文 一意名1，2

INVOKE文 USING

INVOKE文 RETURNING

利用者定義関数

注※　HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Solaris(SPARC)で有効です。

(4)　2進にすると長さが異なるもの

LENGTH関数

次の文に指定されたLENGTH OF 一意名

CALL文 BY CONTENT 一意名

CALL文 BY VALUE 一意名

INVOKE文 BY CONTENT 一意名

INVOKE文 BY VALUE 一意名

(5)　英数字転記／比較をするもの

MOVE文の転記の規則に従って転記するWRITE FROM，REWRITE FROM，RELEASE FROM，報告書節（REPORT SECTION）のSOURCE句，画面節（WINDOW SECTION）※のSOURCE句などを含みます。

集団項目との比較（EVALUATEの選択主体と選択対象の比較も含む）

MOVE 2進項目 TO 集団項目

MOVE 集団項目 TO 2進項目

READ文 INTO 一意名

RETURN文 INTO 一意名

-H8SwitchオプションがあるときのMOVE 2進項目 TO 英数字／英数字編集項目

注※　HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Solaris(SPARC)で有効です。

(6)　外部10進，内部10進，2進で設定される値が異なるもの

MOVE WHEN-COMPILED TO 一意名

MOVE CURRENT-DATE TO 一意名

MOVE 外部10進項目／内部10進項目／2進項目／浮動小数点項目／数字編集項目以外の項目，英数字型関数 TO 一意名
（MOVE文の転記の規則に従って転記する場合も含む）

(7)　10進項目を間接的に参照／更新するもの

10進項目を含む集団項目が参照／更新されている

注

CORRESPONDING指定のあるADD文，SUBTRACT文，MOVE文，およびINITIALIZE文で指定した集団項目中の10進項目は2進化されません。

10進項目が再定義項目または被再定義項目となっている

10進項目を含む集団項目が再定義項目または被再定義項目となっている

10進項目にアドレス名指定がある

10進項目を含む集団項目にアドレス名指定またはVALUE句がある

再命名項目（RENAMES句がある）

被再命名項目（THRUなし）

被再命名項目（THRUあり）

被再命名項目（THRU範囲内の項目）

(8)　2進化すると実行速度が遅くなるもの

MOVE 2進 TO 数字編集項目（MOVE文の転記の規則に従って転記する場合も含む）

(9)　ファクトリ定義およびインスタンス定義中の10進項目

ファクトリ定義およびインスタンス定義中の10進項目

(10)　その他

作業場所節または局所場所節以外で定義されている

SYNCHRONIZED句がある

FILLER項目

特殊レジスタ

可変長集団項目中の10進項目

外部10進項目を含む集団項目にSIGN LEADING指定またはSIGN SEPARATE指定がある

PICTURE句の左端に「P」がある

CSV編成ファイルに対するWRITE文 FROM 一意名

31.2.3　不変式のループ外移動

繰り返し処理中で結果が常に同じになるような式や代入を繰り返し処理の前に移動することによって，繰り返し内の実行命令数を削減します。

（最適化前）

          :
          :
          :
      PERFORM VARYING I
        FROM 1 BY 1 UNTIL I = 100
          MULTIPLY A BY B GIVING C(I)
          MOVE 10 TO D
      END-PERFORM.

（最適化後）

         :
      MULTIPLY A BY B GIVING temp.
      MOVE 10 TO D.
      PERFORM VARYING I
        FROM 1 BY 1 UNTIL I = 100
          MOVE temp TO C(I)
      END-PERFORM.
         :

演算の最適化条件

四則演算である。

代入の最適化条件

代入元変数（この最適化によって前に出された式の結果の一時的記憶域を含む）がループ内で不変である。

代入先変数はループ内ではこの代入以外で変更されない。

代入元変数として代入先変数を参照している場合，必ずこの代入の結果を参照する。すなわち，ループ外で設定された値を参照することはない。

31.2.4　コピー伝播

変数1=定数

変数1=変数2

このような単純な代入文があったとき，次の変数1への代入までに現れた変数1の参照を定数や変数2で置き換えることによって，定数の畳み込みや無用命令の削除（代入があり，次の代入または終わりまでに参照がない場合，その代入は無用である）などをします。ただし，-Optimize,2オプション指定時には，ユーザが定義したデータ項目への代入に対する無用命令の削除はしません。

次の例では，A，Bはユーザ定義変数ではないものとします。

定数"23"を代入しているAは1.，2.で参照されているだけなので，1.，2.のAはそれぞれ定数"23"に変更されます。さらに，Bは2.で参照されているだけなので，Bも定数"23"に変更されます。なお，この例では2.のCOMPUTE文が定数の演算だけになるため，定数の畳み込みによって最終的に定数"50"に変更されます。

最適化条件

次の条件を満たす代入X=Yによってだけコピー伝播は行われます。

Xは添字指定を含まない。

Xに対する別名はない。

Yが定数なら，YはXのデータの型およびサイズに変換できる。

Yが変数なら，YはXのデータの型およびサイズに等しい。

31.2.5　共通式の削除

同一の式が複数ある場合，最初の式だけ計算をし，残りの式は最初の式の結果で置き換えることによって演算時間の短縮を図ります。

（最適化前）

COMPUTE C = A + B.
COMPUTE D(I) = A + B.
COMPUTE E = A + B + C.
MOVE D(I) TO F.

（最適化後）

ADD     A TO B GIVING C temp.
MOVE    temp TO D(I).
COMPUTE E = temp + C.
MOVE D(I) TO F.

最適化条件

二つの式XとYの間で式の共通化が行われる条件は次のとおりです。

式XはYの前にある。

式XまたはYがループ内にある場合，式YまたはXも同一ループ内にある。

式Yは代入を含まない。

式X，式Yの両方で参照である同じ演算項に対して，式間でこの演算項への代入がない。

31.2.6　定数の畳み込み

式の中に複数の定数があった場合，計算可能な範囲でコンパイラが定数同士の演算を計算することによって式を単純化します。

（最適化前）

COMPUTE C = 1 + 3.
COMPUTE D = 0.1415926 + 3.0000000 + A.

（最適化後）

MOVE    4 TO C.
COMPUTE D = 3.1415926 + A.

最適化条件

COBOLの演算順序に従った演算の過程で定数同士の演算が発生する場合だけ，この最適化は行われます。

31.2.7　演算強さの軽減

＜この項の構成＞

(1)　ループの削除

(1)　ループの削除

次のようなループを削除します。

ループ本体が空であり，かつループ制御変数が不要であるループ

ほかの最適化によってループ本体が空になったループ

最適化条件

ループ本体が空である。

ループ制御変数が不要なループである。

32.　COBOLソースの作成とコンパイル

この章では，COBOLソースの作成方法とコンパイル方法について，コンパイラ環境の設定方法や，コンパイル時の入出力構成，使用するファイル，登録集原文の使用方法なども含めて説明します。

＜この章の構成＞

32.1　コンパイル時の主な入出力ファイル

32.2　COBOLソースの作成方法

32.3　さまざまな形態のCOBOL原始プログラムのコンパイル

32.4　コンパイラの起動方法

32.5　コンパイラオプション

32.6　コンパイラ環境変数

32.7　コンパイラ付属機能

32.1　コンパイル時の主な入出力ファイル

プログラムをコンパイルするときの主な入出力の流れを次に示します。

図32-1　コンパイル時の入出力の流れ

ccbl2002コマンドを実行すると，COBOL2002コンパイラに制御が渡り，COBOLソースファイルからオブジェクトファイル（.o）が生成されます。

オブジェクトファイルがリンカに取り込まれ，実行可能ファイルが生成されます。

上記に示したファイルや，その他COBOL2002で使用するファイルの内容については，「付録D　COBOLで使用するファイル」を参照してください。

32.2　COBOLソースの作成方法

コンパイル対象のCOBOLソースファイルを作成するときの規則について説明します。

＜この節の構成＞

32.2.1　ソースファイル名と拡張子

32.2.2　原始プログラムの作成規則

32.2.3　正書法

32.2.1　ソースファイル名と拡張子

ソースファイル名，拡張子の指定規則を次に示します。

＜この項の構成＞

(1)　ソースファイル名

(2)　拡張子

(1)　ソースファイル名

ソースファイル名はUNIXのファイル名の規則に従って指定します。ただし，ccbl2002コマンドに指定するソースファイル名に次の文字を使用した場合の動作は保証しません。

ハイフン（-）

(2)　拡張子

COBOLソースファイルは，ファイル名のあとに次の拡張子を付けます。

固定形式正書法で書かれた原始プログラムをコンパイルする場合
.cbl，.CBL※，.cob，.ocb，または環境変数CBLFIXで指定した拡張子
注※
拡張子に等価規則は適用されません。

自由形式正書法で書かれた原始プログラムをコンパイルする場合
.cbf，.ocf，または環境変数CBLFREEで指定した拡張子

32.2.2　原始プログラムの作成規則

COBOL原始プログラムは次の規則に従って記述します。

各行は復帰改行文字で終了させます。

固定形式正書法の場合は，1行は80バイト以内とします。また，自由形式正書法の場合は，1行は255バイト以内とします。これらの制限を超えた分は無視されます。

タブ文字以外の制御文字（X'00'～X'1F'，およびX'7F'）は，使用できません。

タブ文字は，次のタブ位置まで空白として扱われます。タブを空白に置き換えるときの空白の個数は，環境変数CBLTABで設定できます。

32.2.3　正書法

ここでは，COBOLソースファイルの拡張子と正書法の関係，およびSOURCE FORMAT指令を使った正書法の切り替え方法について説明します。

正書法およびSOURCE FORMAT指令の文法規則については，マニュアル「COBOL2002　言語　標準仕様編　2. 正書法（Reference format）」および「COBOL2002　言語　標準仕様編　3.3.14 SOURCE FORMAT指令」を参照してください。

＜この項の構成＞

(1)　正書法の種類と概要

(2)　拡張子による正書法の指定

(3)　SOURCE FORMAT指令による正書法の切り替え

(4)　自由形式正書法で指定できないコンパイラオプション

(1)　正書法の種類と概要

正書法は，COBOL原始プログラムや登録集原文を記述するための規約です。COBOLには，自由形式正書法と固定形式正書法の二つの正書法があります。それぞれの正書法の特徴を，次に示します。

固定形式正書法
行の文字位置によって，一連番号領域，標識領域，プログラム記述領域などの用途がはっきり決められている書き方です。

自由形式正書法
一連番号領域，標識領域などはなく，プログラムを行中の任意の位置に記述できる書き方です。

また，SOURCE FORMAT指令を使用すると，2種類の正書法を原始プログラムや登録集原文の途中で切り替えることができます。

なお，正書法の言語仕様についてはマニュアル「COBOL2002　言語　標準仕様編　2. 正書法（Reference format）」を，SOURCE FORMAT指令の言語仕様についてはマニュアル「COBOL2002　言語　標準仕様編　3.3.14 SOURCE FORMAT指令」を，それぞれ参照してください。

(2)　拡張子による正書法の指定

(a)　ソースファイルの拡張子と正書法の種類の対応

COBOL2002のコンパイラは，拡張子によってCOBOLソースファイルの種類が固定形式正書法か，自由形式正書法かを区別します。

拡張子が.cbl，.CBL，.cob，.ocbのCOBOLソースファイル

固定形式正書法で記述されているものとして扱われます。

拡張子が.cbf，.ocfのCOBOLソースファイル

自由形式正書法で記述されているものとして扱われます。

また，上記以外の拡張子が付いたファイルであっても，環境変数CBLFIXまたはCBLFREEに設定しておくことで，それぞれ固定形式正書法，自由形式正書法で書かれたCOBOL原始プログラムとしてコンパイルできます。

環境変数CBLFIXまたはCBLFREEを使用して，COBOL原始プログラムの拡張子を指定する方法については，「32.6　コンパイラ環境変数」を参照してください。

(b)　正書法の決定の優先順位

COBOL原始プログラムの正書法

COBOL原始プログラムが，固定形式／自由形式のどちらの正書法としてコンパイルされるかは，次の1.～3.の判定順序に従って決定されます。

環境変数CBLFIXに設定した拡張子のファイルは，固定形式正書法で書かれたCOBOL原始プログラムとしてコンパイルされます。

環境変数CBLFREEに設定した拡張子のファイルは，自由形式正書法で書かれたCOBOL原始プログラムとしてコンパイルされます。

拡張子が.cbl，.CBL，.cob，.ocbのファイルは，固定形式正書法で書かれたCOBOL原始プログラムとしてコンパイルされます。また，拡張子が.cbf，.ocfのファイルは，自由形式正書法で書かれたCOBOL原始プログラムとしてコンパイルされます。

したがって，同じ拡張子を環境変数CBLFIX，環境変数CBLFREEの両方に指定した場合，環境変数CBLFIXの指定が有効となり，COBOL原始プログラムは固定形式正書法としてコンパイルされます。

登録集原文の正書法

登録集原文の正書法も，COBOL原始プログラムと同じ規則で決定されます。ただし，原文名定数に書かれた登録集原文ファイルの拡張子が，上記以外の拡張子の場合，登録集原文は，固定形式正書法で書かれたものとして扱われます。

登録集原文ファイルの検索

登録集原文ファイルは，次の1.～4.の順に検索されます。ただし，原文名定数で書かれた場合は，除きます。

環境変数CBLFIXに設定した拡張子の左から順に，その拡張子が付くファイル。

環境変数CBLFREEに設定された拡張子の左から順に，その拡張子が付くファイル。

.cbl，.CBL，.cob，.ocbの順に，その拡張子が付くファイル。

.cbf，.ocfの順に，その拡張子が付くファイル。

上記の検索順位は，登録集原文の複写元の原始プログラムの正書法とは関係しません。

例えば自由形式の原始プログラムTP001.cbfの中に「COPY ABC.」という記述があって，ABC.cblとABC.cbfという二つのファイルがある場合，ABC.cblの方が展開されます。

正書法の異なるプログラム間の複写

COPY文を使用して，固定形式正書法の原始プログラムから自由形式正書法の原始プログラムを取り込んだり，自由形式正書法の原始プログラムから固定形式正書法の原始プログラムを取り込んだりできます。

この場合，ファイルの拡張子で正書法が判断されるため，SOURCE FORMAT指令によって明示的に正書法を指定する必要はありません。

(3)　SOURCE FORMAT指令による正書法の切り替え

SOURCE FORMAT指令を使用すると，原始プログラムの正書法を切り替えられます。原始プログラムの先頭にSOURCE FORMAT指令を記述すると，原始プログラム全体の正書法を変更できます

また，原始プログラムの途中でSOURCE FORMAT指令を記述すると，SOURCE FORMAT指令の次の行から正書法を変更できます。

次に，SOURCE FORMAT指令の使用例を示します。

（例1）

固定形式正書法のCOBOLソースファイルに自由形式正書法を適用する場合

000100 >>SOURCE FORMAT IS FREE     …1.
IDENTIFICATION DIVISION.           …2.
PROGRAM-ID. FIX-FORM-EXAMPLE.
DATA DIVISION.
WORKING-STORAGE SECTION.
01 A-LONG-ITEM PIC X(100) VALUE 'THE FIRST PART CONTINUED'-
  ' ON THE NEXT LINE - SIMPLE ENOUGH'.
01 NUM-ITEM PIC 9(10).
PROCEDURE DIVISION.
A-PARAGRAPH-NAME.
 ：

SOURCE FORMAT指令が有効となるのは，SOURCE FORMAT指令の次の行からです。このため，「>>SOURCE FORMAT IS FREE」を指定している行自身は，固定形式正書法に従って記述する必要があります。

別のSOURCE FORMAT指令が現れるまで，1.の指定が有効となります。

（例2）

自由形式正書法のCOBOLソースファイルに固定形式正書法を適用する場合

>>SOURCE FORMAT IS FIXED                      …1.
000010 IDENTIFICATION DIVISION.               …2.
000020 PROGRAM-ID. FIX-FORM-EXAMPLE.
000030 DATA DIVISION.
000040 WORKING-STORAGE SECTION.
000050 01 A-LONG-ITEM PIC X(100) VALUE 'THE FIRST PART CONTINUED
000060- '  ON THE NEXT LINE - SIMPLE ENOUGH'.
000070 01 NUM-ITEM PIC 9(10).
 ：

SOURCE FORMAT指令が有効となるのは，SOURCE FORMAT指令の次の行からです。このため，「>>SOURCE FORMAT IS FIXED」を指定している行自身は，自由形式正書法に従って記述する必要があります。

別のSOURCE FORMAT指令が現れるまで，1.の指定が有効となります。

(4)　自由形式正書法で指定できないコンパイラオプション

次のオプションは，自由形式正書法で書かれたCOBOL原始プログラムとしてコンパイルされるプログラムには，指定できません。指定してコンパイルした場合，エラーとなってコンパイルが中止されます。

表32-1　自由形式正書法で指定できないコンパイラオプション

オプション名 | 機能
-StdVersion | 第1次規格／第2次規格の解釈でコンパイルする
-V3Rec | メインフレーム（VOS3）の固定長または可変長レコード形式のプログラムを，VOS3の日本語文字の扱いに合わせてコンパイルする
-CompatiV3 | VOS3 COBOL85互換を指定する
-StdMIA | MIA仕様の範囲外チェックをする
-Std85 | JIS仕様でチェックする
-EucPosition | EUCコード使用時，見かけ上の文字位置で固定形式正書法の境界を決定する

なお，固定形式正書法で書かれたソースの途中に「>>SOURCE FORMAT IS FREE」が指定されている場合も，これらのコンパイラオプションを指定するとエラーとなります。

32.3　さまざまな形態のCOBOL原始プログラムのコンパイル

＜この節の構成＞

32.3.1　原始文操作機能

32.3.2　スタックコンパイル機能（連続コンパイル機能）の利用

32.3.3　条件翻訳の利用

32.3.4　条件翻訳結果のコンパイルリスト

32.3.1　原始文操作機能

ここでは，COBOL2002の原始文操作機能について説明します。

＜この項の構成＞

(1)　COPY文による登録集原文の取り込み

(2)　登録集原文のファイル形式

(3)　COPY文の指定形式

(4)　登録集原文の検索順序

(1)　COPY文による登録集原文の取り込み

登録集原文（COPY登録集）は，プログラムでよく利用する標準化した手続き，ファイル記述，完全なプログラムなどを登録したファイルです。プログラム中にCOPY文を記述すると，この登録集原文を複写してコンパイルできます。

(2)　登録集原文のファイル形式

登録集原文は，ファイル単位に登録・複写します。

登録集原文を登録するファイルのファイル形式は，.cbl，.CBL，.cob，.ocb，.cbf，.ocfのどれかの拡張子の付いた形式とします。ただし，環境変数CBLFREEまたはCBLFIXで自由形式拡張子，固定形式拡張子が設定してあれば，該当する拡張子の付いた形式も有効です。

(3)　COPY文の指定形式

COPY文の指定形式を次に示します。COPY文の文法の詳細については，マニュアル「COBOL2002　言語　標準仕様編　3.2.2 COPY文」を参照してください。

原文名

原文名には，登録集原文が登録されているファイルの名称を，拡張子を付けないで指定します。

原文名には，かな文字と拡張コード文字は使用できません。また，原文名で英大文字と英小文字は区別されます。

原文名は，COBOL語の定義に従い31文字まで指定できます。ただし，-Compati85,Syntaxオプション指定時は，先頭の30文字までしか有効となりません。また，次のオプションを指定している場合は，先頭の8文字までしか有効となりません。
-V3Rec,Fixed　-V3Rec,Variable　-CompatiV3

原文名定数

原文名定数は，登録集原文を登録してあるファイルの絶対パス名を引用符で囲んで指定します。このとき，ファイル名には拡張子も付けます。

-V3ConvtNameオプションを指定したときの原文名定数の扱い

-V3ConvtNameオプションを指定する場合，原文名定数には登録集原文を登録してあるファイルのファイル名を引用符で囲んで指定します。

-V3ConvtNameオプションを指定すると，VOS3 COBOL85のソースファイルとの互換のため，原文名定数中の文字が変換されて検索されます。変換規則については，「32.5.12　他システムとの移行の設定」の「(11)　-V3ConvtNameオプション」を参照してください。

登録集名

登録集名は，登録集環境変数として次のように設定しておきます。

形式

登録集名=登録集検索ディレクトリ〔; …〕
export 登録集名

規則

登録集検索ディレクトリには，原文名に対応するファイルを検索する任意のディレクトリを絶対パスで指定します。このパス名に，原文名または原文名定数で指定したファイル名を連結して絶対パス名とします。

登録集環境変数名は，先頭が英大文字で始まる，英大文字と数字で構成される8文字以下の文字列でなければなりません。

登録集環境変数に設定するパス名は，複数指定できます。複数指定した場合，左側から指定した順番に検索されます。

(4)　登録集原文の検索順序

原文名で指定したファイルは，拡張子，ディレクトリの二つの条件で検索されます。それぞれの検索順序は次のようになっていて，両者のうちでは拡張子による検索順序が優先します。また，-V3ConvtNameオプションを指定した場合，原文名定数に指定したファイルは，ディレクトリによる検索順序で検索されます。

拡張子による検索順序

固定形式拡張子（環境変数CBLFIXで設定）

自由形式拡張子（環境変数CBLFREEで設定）

.cbl

.CBL

.cob

.ocb

.cbf

.ocf

ディレクトリによる検索順序

登録集環境変数で設定したディレクトリ

環境変数CBLLIBで指定したディレクトリ

カレントディレクトリ

例えば，固定形式拡張子，自由形式拡張子とも設定されていない場合，"ファイル名.cbl"で1.～3.の順にディレクトリを検索し，目的のファイルがなければ，次に"ファイル名.CBL"で同様に検索します。

32.3.2　スタックコンパイル機能（連続コンパイル機能）の利用

スタックコンパイル機能とは，複数個の翻訳単位のソース単位を含む翻訳グループを一つのコンパイル単位としてコンパイルする機能です。この機能には次のような利点があります。

一つのCOBOLソースファイルに主プログラム，副プログラムを含めることができます。このソースファイルから作成される実行可能ファイルと1対1で対応するため管理がしやすくなります。

一つのライブラリを構成する副プログラム群を，同じソースファイルにまとめることができます。

＜この項の構成＞

(1)　コンパイラオプションとの関係

(2)　主プログラム指定

(3)　スタックコンパイル（連続コンパイル）時の出現順序

(4)　コンパイルリスト

(5)　プログラム間連絡

(6)　ソースファイルと各種ファイルの関係

(7)　実行可能ファイルの作成単位

(1)　コンパイラオプションとの関係

主プログラム指定（-Main,System／-Main,V3）以外のオプションは，すべての翻訳単位のソース単位に対して有効となります。-Main,System，-Main,V3オプションとほかのオプションとの関係については，「32.5.5　最終生成物の種類の設定」を参照してください。

(2)　主プログラム指定

主プログラム指定（-Main,System／-Main,V3）を指定した場合は，ソースファイル中の先頭の最外側のプログラムが主プログラムとなります。したがって，制御プログラムからは先頭の最外側のプログラムだけが呼び出せます。2番目以降の最外側のプログラムは，呼び出せません。

(3)　スタックコンパイル（連続コンパイル）時の出現順序

クラス定義，インタフェース定義を含むソースファイルを，連続コンパイルできます。ただし，リポジトリ段落に指定された翻訳単位が別のソースファイルで定義されている場合，別のソースファイルを先にコンパイルしておく必要があります。詳細は，「33.　定義別のコンパイル方法とリポジトリファイル」を参照してください。

なお，インタフェース定義は，ほかのソース単位より先に記述されていてもかまいません。

(4)　コンパイルリスト

スタックコンパイルを実行したときのコンパイルリストについては，「付録C　コンパイルリスト」を参照してください。

(5)　プログラム間連絡

一つのコンパイル単位に最外側のプログラムが複数個含まれていても，これらの最外側のプログラムはすべて別のコンパイル単位のCALL文で呼び出せます。

(6)　ソースファイルと各種ファイルの関係

スタックコンパイル時にコンパイラが生成するファイルは，通常のコンパイル時に生成するファイルと同じです。

(7)　実行可能ファイルの作成単位

スタックコンパイル機能を使用した場合，オブジェクトファイルは，ソースファイル単位で作成されます。このため，ソースファイル中の複数のプログラムから，別々の実行可能ファイルを作成することはできません。

複数の最外側のプログラムを含むソースファイルをスタックコンパイルし，生成されたオブジェクトファイルの一部のプログラムだけを利用するような実行可能プログラムは，作成できます。ただし，使用しないプログラムを含んでいるため，必要以上に実行可能ファイルのサイズが大きくなります。

32.3.3　条件翻訳の利用

条件翻訳を使用すると，翻訳変数を用いた条件式の真偽に従って，ソースコードの有効／無効を制御できます。翻訳変数は，原始プログラム中にDEFINEを書いて定義する方法と，コンパイル時に-Defineオプションを指定して定義する方法があります。

翻訳指令の詳細な構文規則および一般規則については，マニュアル「COBOL2002　言語　標準仕様編　3. 翻訳指令機能」を参照してください。

条件翻訳の使用例を，次に示します。

（例1）IF指令の使用例

IF指令は，分岐の条件翻訳をしたい場合に使用します。

>>IFに続く条件式の真偽によって，プログラムテキストの有効・無効を指示できます。

000100*>IFとDEFINED条件の例
000200 IDENTIFICATION DIVISION.
000300 PROGRAM-ID. IF-SYNTAX.
000400 DATA DIVISION.
000500 >>DEFINE CHR01 AS 'ABCD'
000600 WORKING-STORAGE SECTION.
000700 PROCEDURE DIVISION.
000800 >>IF CHR01 IS DEFINED
000810     *> 翻訳変数CHR01は定義されているのでこちらが有効になる
000900     DISPLAY '--- CHR01 IS DEFINED ---'.
001000 >>ELSE
001100     *> こちらの行はコンパイルの結果無効となる
001100     DISPLAY '--- CHR01 IS NOT DEFINED ---'.
001200 >>END-IF

（例2）IF指令およびDEFINED条件と-Defineオプションの例

DEFINED条件は，指定された翻訳変数名が定義済みかどうかを判定する条件文です。

次の原始プログラムでは，翻訳変数DEBUGの定義の有無によって，IF指令の真偽が決定します。コンパイル時に「-Define DEBUG」を指定すると，翻訳変数DEBUGが定義され，IF指令が真となります。-Defineオプションを指定しない場合は，IF指令が偽となります。

000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. TEST001.
000300 PROCEDURE DIVISION.
000400
000500 >>IF DEBUG IS DEFINED
000600     DISPLAY 'this is debug message'.
000700 >>END-IF

デバッグ行を使用しても同様の処理ができますが，デバッグ行は第4次規格の廃要素であり，次回規格改訂時には削除される予定のため，条件翻訳を使用することを推奨します。

（例3）EVALUATE指令の例－書き方1

EVALUATE指令は，多方向分岐の条件翻訳をしたい場合に使用します。

WHEN以下の条件によって，有効となるプログラムテキストが選択されます。

000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. TEST001.
000300 DATA DIVISION.
000400 WORKING-STORAGE SECTION.
000500 PROCEDURE DIVISION.
000600 >>DEFINE EXD01 AS 10
000700
000800 >>EVALUATE EXD01 *> 翻訳変数 EXD01の値を評価する
000900   >>WHEN  3
001000     DISPLAY '--- 3          ---'.
001100   >>WHEN  15        
001200     DISPLAY '--- 15         ---'.
001300   >>WHEN  9  THRU 11 *> 9から11の間にある場合
001400     DISPLAY '---  9 THRU 11 ---'. *> ここが有効となる
001500   >>WHEN OTHER
001600     DISPLAY '--- WHEN OTHER ---'.
001700 >>END-EVALUATE

（例4）EVALUATE指令の例－書き方2

000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. DEFINE01.
000300 DATA DIVISION.
000400 WORKING-STORAGE SECTION.
000500 >>DEFINE LEVEL AS 2
000600 PROCEDURE DIVISION.
000700 >>EVALUATE TRUE
000800   >>WHEN LEVEL < 3  *> ここが真
000900     DISPLAY 'lower'.
001000   >>WHEN LEVEL > 5
001100     DISPLAY 'higher'.
001200   >>WHEN OTHER
001300     DISPLAY 'other'.
001400 >>END-EVALUATE

（例5）EVALUATE指令の例－書き方2

EVALUATE指令では，一度真の条件が現れた場合，それ以降にさらに真の条件があっても実行されません。

000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. DEFINE01.
000300 DATA DIVISION.
000400 WORKING-STORAGE SECTION.
000500 >>DEFINE LEVEL AS 2
000600 PROCEDURE DIVISION.
000700 >>EVALUATE TRUE
000800   >>WHEN LEVEL < 3 *> ここが真
000900     DISPLAY 'lower'.
001000   >>WHEN LEVEL > 5
001100     DISPLAY 'higher'.
001200   >>WHEN LEVEL < 5 *>ここも真だが，すでに真となるWHENが存在する。
001300     DISPLAY 'lower 2'. *> よってここは実行されない。
001400   >>WHEN OTHER
001500     DISPLAY 'other'.
001600 >>END-EVALUATE

（例6）-Defineオプションの使用例

次のプログラムを「ccbl2002 -Define CHR01=ABCD SAMPLE1.cbl」と指定してコンパイルした場合，「>>IF CHR01 = 'ABCD'」の条件が真となります。

ソースファイル名称：SAMPLE1.cbl
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. DEFINEOPTION.
000300 DATA DIVISION.
000400 WORKING-STORAGE SECTION.
000500 PROCEDURE DIVISION.
000600 >>IF CHR01 = 'ABCD'
000700     *> 翻訳変数CHR01は-DefineオプションでABCDと定義。
000750     *> よってこちらが真。
000800     DISPLAY '--- CHR01 IS "ABCD" ---'.
000900 >>ELSE
001000     *> こちらの行は偽
001100     DISPLAY '--- CHR01 IS NOT "ABCD" ---'.
001200 >>END-IF

注意事項

-Defineオプションでは，翻訳変数値を文字列として扱います。このため，数値は渡せません。

32.3.4　条件翻訳結果のコンパイルリスト

条件翻訳の結果，コンパイル対象とならなかった行を，無効行と呼びます。

COBOL2002では，コンパイルリスト上で，原始プログラム中の無効行となった部分を確認できます。また，コンパイルリストに無効行を出力しない機能もあります。

＜この項の構成＞

(1)　コンパイルリスト上の表示

(2)　無効行の定義

(1)　コンパイルリスト上の表示

条件翻訳の結果無効行となった行は，コンパイルリストに'X'が出力されます。

また，コンパイルリストに無効行を出力したくない場合は，-SrcListオプションにNoFalsePathサブオプションを付けて指定します。

コンパイルリストに関係するその他のオプションについては，「付録C.1　リストの出力」を参照してください。

コンパイルリストの例1

-SrcList,CopyAllオプションを指定した場合

D CP N ----+----1----+----2----+----3----+----4----+----5----+----6----+
      000100 IDENTIFICATION DIVISION.
      000200 >>DEFINE CMPVAR1 AS -123456
      000500 PROGRAM-ID. AAA.
      000900 PROCEDURE DIVISION.
      001000 >>IF CMPVAR1 IS DEFINED
      001100     DISPLAY '--- test (1) ---'.
      001200     DISPLAY '--- test (2) ---'.
      001300 >>ELSE
X      001400     DISPLAY '--- test (3) ---'.
X      001500     DISPLAY '--- test (4) ---'.
      001600 >>END-IF

（説明）

翻訳変数CMPVAR1が000200行で定義されているので，ELSE側である001400，001500行は無効行となります。そのため，これらの行の先頭にXが出力されます。

コンパイルリストの例2

-SrcList,CopyAll,NoFalsePathオプションを指定した場合

D CP N ----+----1----+----2----+----3----+----4----+----5----+----6----+
      000100 IDENTIFICATION DIVISION.  
      000200 >>DEFINE CMPVAR1 AS -123456
      000500 PROGRAM-ID. AAA.
      000900 PROCEDURE DIVISION.
      001000 >>IF CMPVAR1 IS DEFINED
      001100    DISPLAY '--- test (1) ---'.
      001200    DISPLAY '--- test (2) ---'.
      001300 >>ELSE
      001600 >>END-IF

（説明）

-SrcListオプションにNoFalsePathサブオプションを指定した場合，無効行となった001400，001500行は，コンパイルリストに出力されません。

その結果，001600行が詰められて，001300行の次に出力されます。

(2)　無効行の定義

無効行の定義を，次に示します。

条件翻訳として判定中の>>IF，>>ELSE，>>END-IF，>>EVALUATE，>>WHEN，>>END-EVALUATEが指定された行自身は，無効行とはなりません。

条件翻訳のための翻訳指令行でも，無効な領域にある場合は無効行となります。

>>SOURCE FORMATは，常に無効行となりません。

次に，各定義の例を示します。なお，例中の「X」は，その行が無効行となることを示します。

1.の例（その1）

>>IFの>>ELSE側が無効な場合，>>IFや>>ELSEなどは無効行となりません。

     >>DEFINE ABC 123
     >>IF ABC = 123
         DISPLAY 'OK'.
     >>ELSE
X         DISPLAY 'NG'.
     >>END-IF

1.の例（その2）

>>IFの>>ELSE側が有効な場合の例です。

     >>DEFINE ABC 123
     >>IF ABC = 12345
X         DISPLAY 'NG'.
     >>ELSE
         DISPLAY 'OK'.
     >>END-IF

1.の例（その3）

>>EVALUATEの例です。

     >>DEFINE CHAR01  AS  'ABCD'
     >>EVALUATE TRUE
       >>WHEN CHAR01 = 'ABCD'
         DISPLAY '0001'.
         DISPLAY '0002'.
       >>WHEN CHAR01 = 'XYZ'
X         DISPLAY '0003'.
X         DISPLAY '0004'.
       >>WHEN OTHER
X         DISPLAY 'OTHER'.
     >>END-EVALUATE

2.の例

無効な領域にある場合は，>>IFなどの翻訳指令行自身も無効行となります。

     >>DEFINE ABC 123
     >>IF ABC = 123
         DISPLAY 'OK'.
     >>ELSE
X         DISPLAY 'NG'.
X         >>IF ABC = 456
X           DISPLAY 'OK'.
X         >>ELSE
X           DISPLAY 'NG'.
X         >>END-IF
     >>END-IF

3.の例

無効な領域にある場合でも，>>SOURCE FORMAT指令は，無効行になりません（>>SOURCE FORMAT指令は，どこに指定されても有効となります）。

     >>DEFINE ABC 123
     >>IF ABC = 123
         DISPLAY 'OK'.
     >>ELSE
X         DISPLAY 'NG1'.
X         DISPLAY 'NG2'.
         >>SOURCE FORMAT IS FREE
X         DISPLAY 'NG3'.
X         DISPLAY 'NG4'.
     >>END-IF

32.4　コンパイラの起動方法

COBOL2002で作成したプログラムをコンパイルするには次の方法があります。

ccbl2002コマンドによる方法
ccbl2002コマンドを実行することで，COBOLソースファイルをコンパイル，リンクし，実行可能ファイルを生成できます。

ccblコマンドによる方法
ccblコマンドを使用することで，COBOL85形式のコンパイラオプションを指定して，プログラムのコンパイル，リンクができます。

＜この節の構成＞

32.4.1　ccbl2002コマンド

32.4.2　ccblコマンド（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC)で有効）

32.4.1　ccbl2002コマンド

ccbl2002コマンドの入力によって，COBOLソースファイル中のプログラムをコンパイルして，オブジェクトファイルや実行可能ファイルなどを出力できます。

ccbl2002コマンドの形式を次に示します。

形式

ccbl2002 〔オプション〔…〕〕 ファイル名〔…〕

オプション

コンパイラオプションを指定します。

コンパイラオプションの指定方法には，ccbl2002コマンドの引数に指定する方法と環境変数CBLCOPT2002で指定する方法の2種類があります。なお，ccbl2002コマンドの引数と環境変数CBLCOPT2002の両方にコンパイラオプションを指定した場合は，引数で指定したオプションの方が優先されます。

個々のコンパイラオプションの機能と使用方法については，「32.5　コンパイラオプション」を参照してください。

ファイル名

コンパイルするCOBOLソースファイルや，その他必要なファイルの名称を指定します。指定できるファイルの種類は次のとおりです。

COBOLソースファイル（.cblほか）

オブジェクトファイル（.o）

HTMLファイル※1（.htm，.html）

ライブラリファイル（共用ライブラリ）※2

注※1

HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効です。

注※2

ライブラリファイルやライブラリ検索パスの指定方法は，システムの規則に従ってください。

指定規則

各引数は，一つ以上の空白，タブ，または改行文字で区切ります。
ただし，ccbl2002コマンドに空白を含むファイル名を指定する場合は，ファイル名をアポストロフィ（'）で囲む必要があります。

コマンドライン上には，リンカに渡すオプションも指定できます。この場合，-Linkオプションを使用します。-Linkオプションの使い方については，「32.5　コンパイラオプション」を参照してください。

終了コード

ccbl2002コマンドは，次の終了コードを返します。

終了コード
意味
出力される
エラーメッセージのレベル

0
コンパイルは正常終了した。
Iレベルエラー
Wレベルエラー

1
重大エラーが発生した。
Sレベルエラー

2
回復不能エラーが発生した。
Uレベルエラー

なお，エラーの詳細については，コンパイルリストやエラーメッセージを参照してください。

ccbl2002コマンドのヘルプ

オプションもファイル名も指定しないで，ccbl2002コマンドだけが入力された場合，または-Helpオプションを指定された場合にccbl2002コマンドのヘルプを出力できます。

形式

ccbl2002 〔-Help〕

32.4.2　ccblコマンド（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC)で有効）

ccblコマンドは，COBOL85からCOBOL2002への移行を円滑にするために使用するコマンドです。

ccblコマンドを使用すると，COBOL85形式のコンパイラオプションを指定して，COBOLプログラムをコンパイルおよびリンクできます。これによって，既存のCOBOL85で作成した資産（コンパイル用のメイクファイルなど）をCOBOL2002で流用できます。ただし，COBOL2002で新たに追加されたコンパイラオプションは，ccblコマンドでは使用できません。したがって，通常は，ccbl2002コマンドを使用してください。

ccblコマンドは，オプションの指定形式がccbl2002コマンドとは異なりますが，以下の「注意事項」にある場合を除き，コンパイル結果や生成するオブジェクトは，ccbl2002と同じです。ただし，ccblコマンドによって生成したさまざまなファイル（オブジェクトファイル，実行可能ファイル，プログラム情報ファイルなど）はCOBOL85環境で使用することはできません。

形式

ccbl 〔オプション〔…〕〕 ファイル名〔…〕

ccblコマンドの形式，指定方法，および終了コードは，COBOL85のccblコマンドと同じです。また，コンパイラオプションの指定形式も，COBOL85と同じ形式です。

COBOL85形式のコンパイラオプションの詳細については，「付録G　COBOL85とCOBOL2002のコンパイラオプションの対応」を参照してください。

ccblコマンドのヘルプ

オプションもファイル名も指定せず，ccblコマンドだけが入力された場合，ccblコマンドのヘルプを出力できます。なお，COBOL85でサポートされているオプションだけが出力され，COBOL2002で新規に追加されたオプションは出力されません。

形式

ccbl

注意事項

ccblコマンドには，COBOL2002形式のコンパイラオプションを指定できません。また，COBOL2002で新規に追加されたコンパイラオプションは，ccblコマンドには指定できません。

コンパイルリストやコンパイラオプション詳細情報表示では，ccblコマンドに指定された旧形式のオプションは，新形式に変換されて表示されます。

ccblコマンドは，常に-Compati85,Allオプションを暗黙的に仮定して動作します。

32.5　コンパイラオプション

ここでは，ccbl2002コマンドに指定するコンパイラオプションについて説明します。なお，COBOL85のコンパイラオプションとCOBOL2002のコンパイラオプションとの対応については，「付録G　COBOL85とCOBOL2002のコンパイラオプションの対応」を参照してください。

＜この節の構成＞

32.5.1　構文規則

32.5.2　一般規則

32.5.3　コンパイラオプションの優先順位

32.5.4　コンパイラオプションの一覧

32.5.5　最終生成物の種類の設定

32.5.6　他製品との連携の設定

32.5.7　実行の設定

32.5.8　プログラムの最適化の設定

32.5.9　デバッグの設定

32.5.10　リンクの設定

32.5.11　規格の設定

32.5.12　他システムとの移行の設定

32.5.13　リスト出力の設定

32.5.14　その他の設定

32.5.1　構文規則

コンパイラオプションの構文規則について説明します。

＜この項の構成＞

(1)　オプション指定項

(2)　オプション指定項の構成

(1)　オプション指定項

コマンドライン上で，コンパイラオプションを指定する部分をオプション指定項と呼びます。

次の例の下線部分は，それぞれオプション指定項です。

ccbl2002 -Option,SubOption -AnotherOption filename.cbl

(2)　オプション指定項の構成

一つのオプション指定項を構成する要素，および構成要素の名称を次に示します。

-Option,SubOption Argument
  1.      2.        3.

1.をオプション名と呼びます。

2.をサブオプション名と呼びます。

3.をオプションの引数と呼びます。上記の例では，サブオプション名に引数が従属していますが，オプション名に直接引数が従属することもあります。

2.と3.を合わせて，サブオプションと呼びます。

1.～3.を合わせて，オプションと呼びます（オプションは，一つのオプション指定項全体を表します）。

規則

あるオプションOptionに従属するオプションのことを「Optionのサブオプション」と呼びます。また，説明の対象となるサブオプションがどのオプションに従属するか明確な場合には，主従関係を特定しないで単に「サブオプション」と呼びます。

SubOptionがOptionのサブオプションである場合，構文規則およびオプション指定項では，次のように記述します。
-Option,SubOption
また，複数のサブオプションを持つオプションは，次のように記述します。
-Option,SubOption1,SubOption2

オプションとサブオプションの区切りには，コンマ（,）を使用します。また，サブオプション同士の区切りにもコンマを使用します。

オプションには，サブオプションのほかに，ファイル名や数値などの値を引数として持つものもあります。
オプションOptionが引数Argumentを持つ場合は，次のように記述します。
-Option Argument

引数は，オプション一つにつき一つだけしか指定できません。

オプション名同士，およびオプション名と引数の区切りには，半角空白文字を使用します。

32.5.2　一般規則

コンパイラオプションの一般規則について説明します。

大文字小文字は，等価とみなされます。

オプション指定項の先頭文字は，ハイフン（-）となります。

オプションとサブオプションを区切るコンマの前後には，空白を入れてはいけません。

コンパイラオプションの指定に構文誤りがある場合，コンパイル時に回復不能（Uレベル）エラーとなり，コンパイルが中止されます。

32.5.3　コンパイラオプションの優先順位

複数のコンパイラオプションを指定した場合の，各オプションの優先順位を次に示します。

＜この項の構成＞

(1)　指定個所による優先順位

(2)　オプション間の優先順位

(3)　同じオプションを重複して指定した場合の規則

(4)　オプションの打ち消し指定

(1)　指定個所による優先順位

コンパイラオプションを指定した個所によって，優先順位が高くなります。

ccbl2002コマンドの場合

次の順序で，コンパイラオプションの優先順位が高くなります。

優先度 | 指定個所 | オプションの形式
1 | ccbl2002のコマンド行に指定したオプション | 新形式
2 | 環境変数CBLCOPT2002に指定したオプション | 新形式

ccblコマンドの場合

次の順序で，コンパイラオプションの優先順位が高くなります。

優先度 | 指定個所 | オプションの形式
1 | ccblのコマンド行に指定したオプション | 旧形式
2 | 環境変数CBLCOPTに指定したオプション | 旧形式
3 | ccblコマンドで暗黙的に仮定されるオプション | 新形式

環境変数CBLCOPT2002，CBLCOPTについては，「32.6　コンパイラ環境変数」を参照してください。

(2)　オプション間の優先順位

コンパイラオプションには，オプション同士が背反の関係となっていたり，あるオプションを指定するとほかのオプションが仮定されたりするものがあります。このようなオプション間の優先順位を，次に示します。

(a)　あとに指定した方のオプションが有効となる場合

次のオプションを同時に指定した場合，あとに指定した方のオプションが有効となります。

-DigitsTrunc／-Comp5

-V3Rec／-EquivRule

-CompatiV3／-EquivRule

(b)　オプションを指定すると，ほかのオプションが無効となる場合

次のコンパイラオプションを指定した場合，無効となるオプションがあります。

指定したオプション
無効となるオプション

-MainNotCBL

-Main

-Compile

-OutputFile

-Compile,CheckOnly

-DebugInf

-DebugCompati

-DebugData

-TDInf

-CVInf

-DebugRange

-TestCmd

-PIC

-Profile

-IdentCall

-StdMIA
-Std85
-Std2002

-V3Spec

-StdVersion

-CompatiV3

-H8Switch

-Cblctr

-IgnoreLCC

-JPN

-CmDol

-Comp5

-NumAccept

-V3Rec

-V3RecFCSpace

-V3RecEased

-EquivRule,NotAny

-SQL

-SQLDisp

-BinExtend

-MaxDigits38

-IntResult,DecFloat40

-LiteralExtend

-StdMIA

-EquivRule,StdCode

-Bin1Byte

-V3Spec

-Comp5

-CmAster

-BinExtend

-CBLVALUE

-Bin1Byte

-NumAccept

-CmDol

-MaxDigits38

-IntResult,DecFloat40

-LiteralExtend

-V3RecEased

-Repository,Gen

-Compile

-PIC

-Profile

-MultiThread

-Profile

-UniObjGen

-JPN

-CompatiV3※1

-V3Rec※1

-V3RecFCSpace※1

-V3RecEased※1

-Compati85,Syntax

-LiteralExtend

-IntResult,DecFloat40

-Compati85,Power（-Compati85,All指定時も含む）

-CompatiV3※2

-CompatiV3

-LiteralExtend

-SimMain
-SimSub
-SimIdent

-LiteralExtend

注※1

コンパイラ環境変数CBLV3UNICODEにYESを指定した場合，無効になりません。

注※2

Linux(x64)では無効になりません。

(c)　仕様チェックオプションを複数指定した場合

-StdMIAオプション，-Std85オプション，-Std2002オプションは，同時に指定できません。同時に指定した場合，警告のメッセージが出力され，次の優先順位で有効となります。

-Std2002オプション

-Std85オプション

-StdMIAオプション

(d)　オプションを指定することによって，仮定されるオプション

次のコンパイラオプションを指定した場合，仮定されるオプションがあります。

指定したオプション
仮定されるオプション

-V3Spec

-V3Rec,Variable※1

-CompatiV3

-JPN,Alnum※2

-V3Rec,Variable

-DebugCompati

-DebugInf

-DebugData

-DebugInf

-DebugRange

-DebugInf

-DebugCompati

-TestCmd

-DebugInf

-TDInf

-TDInf

-DebugInf

-TDInfと-Optimize,3を同時に指定

-Optimize,2
（-Optimize,3を指定しても-Optimize,2が仮定される）

-CVInf

-DebugInf

-StdMIA,14

-StdMIA,13

-PIC

-Compile,NoLink

-MaxDigits38および-IntResult,DecFloat40と-Optimize,3を同時に指定

-Optimize,2
（-Optimize,3を指定しても-Optimize,2が仮定される）

-SpaceAsZeroと-Optimize,3を同時に指定

-Optimize,2
（-Optimize,3を指定しても-Optimize,2が仮定される）

注※1

-V3Specオプションと-UniObjGenオプションを同時に指定した場合，-V3Rec,Variableオプションは仮定されません。

注※2

コンパイラ環境変数CBLV3UNICODEにYESを指定し，-UniObjGenオプションを指定した場合は，-CompatiV3オプションを指定しても-JPN,Alnumオプションは仮定されません。

(e)　ほかのオプションの指定を必要とするオプション

次のコンパイラオプションは，同時に指定する必要があるオプションを指定しない場合，無視されます。

指定したオプション | 同時に指定する必要があるオプション
-SQLDisp | -SQL,ODBC
-UniEndian | -UniObjGen
-V3RecFCSpace | -V3Rec
-V3RecEased | -V3Rec

次のコンパイラオプションは，同時に指定する必要があるオプションを指定しない場合，コンパイルエラーとなります。

指定したオプション | 同時に指定する必要があるオプション
-IntResult,DecFloat40 | -MaxDigits38
-MaxDigits38 | -IntResult,DecFloat40
-SpaceAsZero | -Compati85,All
-VOSCBL,OccursKey | -CompatiV3
-VOSCBL,ReportControl | -CompatiV3
-JPN,V3JPNSpace | -CompatiV3

(3)　同じオプションを重複して指定した場合の規則

同じオプションを重複して指定した場合，次の規則に従ってオプションが決定されます。なお，オプションごとのサブオプションの指定規則については，「32.5.4　コンパイラオプションの一覧」を参照してください。

(a)　背反関係にあるサブオプション同士を指定した場合

最後に指定されたオプションが有効となります。

（例）

-Compile,｛CheckOnly｜NoLink｝

に対して

-Compile,CheckOnly -Compile,NoLink

と指定した場合，-Compile,NoLinkが有効となります。

ただし，次の場合は，特定のサブオプションが有効となります。

-JPN,V3JPNSpaceオプションと-JPN,Alnumオプションを重複して指定した場合は，-JPN,V3JPNSpaceオプションが有効となります。

-JPN,V3JPNSpaceオプションと-JPN,V3JPNオプションを重複して指定した場合は，-JPN,V3JPNSpaceオプションが有効となります。

-JPN,Alnumオプションと-JPN,V3JPNオプションを重複して指定した場合は，-JPN,V3JPNオプションが有効となります。

-Std85,Highオプション，-Std85,Middleオプション，-Std85,Lowオプションを重複して指定した場合は，次の優先順位で有効となります。

-Std85,Lowオプション

-Std85,Middleオプション

-Std85,Highオプション

(b)　省略可能なサブオプション同士，または複数選択できるサブオプション同士を指定した場合

前に指定したサブオプションの指定を引き継ぎ，あとに指定したサブオプションの指定が追加で有効となります。

（例）

-ErrSup ｛,I｜,Ｗ｝+

に対して

-ErrSup,I -ErrSup,Ｗ

と指定した場合，IサブオプションとＷサブオプションの両方が有効となります。これは，「-ErrSup,I,Ｗ」を指定した場合と同じです。

(4)　オプションの打ち消し指定

デフォルト設定や環境変数などで指定済みのオプションを，コンパイル時に打ち消したい場合は，プリフィクス'no'の付いたコンパイラオプションを使用します。

例えば，環境変数CBLCOPT2002でオプション「-Details」が指定されている場合，コマンドラインで「ccbl2002 -noDetails …」と指定すると，環境変数CBLCOPT2002で設定済みのオプション「-Details」を打ち消せます。

規則

オプションにデフォルト値の設定がある場合，プリフィクス'no'は指定できません。この場合，オプションのデフォルト値を指定することで，オプションを打ち消します。
例えば，環境変数CBLCOPT2002でオプション「-Optimize,3」が指定されている場合，デフォルト値に戻したいときは，コマンドラインで「-Optimize,1」を指定します。

通常のオプションと打ち消しのオプションを同時に指定した場合は，あとに指定したオプションが有効となります。

注意事項

コンパイルリストに出力されるオプション一覧や，-Detailsオプションを指定した場合にコマンドラインへ出力されるコンパイラオプションの詳細情報表示では，no指定のコンパイラオプションは表示されません。コンパイラオプションとして有効となったオプションだけが表示されます。

32.5.4　コンパイラオプションの一覧

コンパイラオプションの一覧を次に示します。

＜この項の構成＞

(1)　最終生成物の種類

(2)　製品連携

(3)　実行

(4)　最適化

(5)　デバッグ

(6)　リンク

(7)　規格

(8)　移行

(9)　リスト出力

(10)　その他

(1)　最終生成物の種類

最終生成物※の種類を設定するコンパイラオプションを，次に示します。

注※

最終生成物とは，コンパイラが最終的に生成する実行可能ファイルのことを示します。

表中のコンパイラオプションの詳細については，「32.5.5　最終生成物の種類の設定」を参照してください。

オプション
機能
OS

F
H
A
B
J
K
L
S

-Main,｛System｜V3｝ ファイル名
先頭の最外側プログラムを主プログラムとして作成する。
○
○
○
○
○
○
○
○

-PIC,｛Std｜Expand｝
-noPIC
共用ライブラリに使う位置独立コードの作成
○
○
○
○
○
○
○
○

（凡例）

F：HP-UX(IPF)

H：HP-UX(IPF64)

A：AIX(32)

B：AIX(64)

J：Linux(x86)

K：Linux(x64)

L：Linux(IPF64)

S：Solaris(SPARC)

○：サポートしている

(2)　製品連携

他製品との連携を設定するコンパイラオプションを，次に示します。

表中のコンパイラオプションの詳細については，「32.5.6　他製品との連携の設定」を参照してください。

オプション
機能
OS

F
H
A
B
J
K
L
S

-SQL,｛XDM｜ODBC〔,NoCont〕｝※
-noSQL
埋め込みSQL文をXDM/RDまたはODBCインタフェース機能で使用できるようにする。
○
○
○
○
○
○
○
○

-SQLDisp
-noSQLDisp
埋め込みSQL文に用途（USAGE句）が表示用（DISPLAY）のデータ項目を指定できるようにする。
×
×
×
×
○
○
×
×

-RDBTran
-noRDBTran
HiRDBによる索引ファイル入出力機能を使用する。
○
○
○
○
×
×
○
○

-XMAP,LinePrint
-noXMAP
書式印刷機能を使用して，順編成ファイルをプリンタに出力する。
○
×
○
×
×
×
×
○

（凡例）

F：HP-UX(IPF)

H：HP-UX(IPF64)

A：AIX(32)

B：AIX(64)

J：Linux(x86)

K：Linux(x64)

L：Linux(IPF64)

S：Solaris(SPARC)

○：サポートしている

×：サポートしていない

注※

ODBCサブオプションは，Linux(x86)，Linux(x64)で有効です。

(3)　実行

実行時の動作を設定するコンパイラオプションを，次に示します。

表中のコンパイラオプションの詳細については，「32.5.7　実行の設定」を参照してください。

オプション
機能
OS

F
H
A
B
J
K
L
S

-NumAccept
-noNumAccept
ACCEPT文に数字項目を指定できるようにする。
○
○
○
○
○
○
○
○

-NumCsv
-noNumCsv
CSV編成ファイルで，セルデータを数値として入出力できるようにする。
○
○
○
○
○
○
○
○

-MultiThread
-noMultiThread
マルチスレッド対応COBOLプログラムを作成する。
○
○
○
○
○
○
○
○

-MainNotCBL
-noMainNotCBL
すべて副プログラムとして作成する。
○
○
○
○
○
○
○
○

（凡例）

F：HP-UX(IPF)

H：HP-UX(IPF64)

A：AIX(32)

B：AIX(64)

J：Linux(x86)

K：Linux(x64)

L：Linux(IPF64)

S：Solaris(SPARC)

○：サポートしている

(4)　最適化

プログラムの最適化を設定するコンパイラオプションを，次に示します。

表中のコンパイラオプションの詳細については，「32.5.8　プログラムの最適化の設定」を参照してください。

オプション | 機能 | OS
F | H | A | B | J | K | L | S
-Optimize,｛0｜1｜2｜3｝ | コンパイル時の最適化のレベルを指定する。 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○

（凡例）

F：HP-UX(IPF)

H：HP-UX(IPF64)

A：AIX(32)

B：AIX(64)

J：Linux(x86)

K：Linux(x64)

L：Linux(IPF64)

S：Solaris(SPARC)

○：サポートしている

(5)　デバッグ

デバッグを設定するコンパイラオプションを，次に示します。

表中のコンパイラオプションの詳細については，「32.5.9　デバッグの設定」を参照してください。

オプション
機能
OS

F
H
A
B
J
K
L
S

-DebugLine
-noDebugLine
デバッグ行を有効にする。
○
○
○
○
○
○
○
○

-DebugInf〔,Trace〕
-noDebugInf
異常終了時，エラー要約情報を出力する。
○
○
○
○
○
○
○
○

-DebugCompati
-noDebugCompati
実行時に次のチェックをする。

添字，指標名の繰り返し回数の範囲外チェック

プログラム間整合性チェック

○
○
○
○
○
○
○
○

-DebugData〔,ValueHex〕※
-noDebugData
データ例外を検出する。
○
○
○
○
○
○
○
○

-TDInf
-noTDInf
テストデバッグ情報を出力する。
○
○
○
○
○
○
○
○

-CVInf
-noCVInf
カバレージ情報を出力する。
○
○
○
○
○
○
○
○

-DebugRange
-noDebugRange
添字，指標名の繰り返し回数について，次元ごとの範囲外チェックをする。
○
○
○
○
○
○
○
○

-TestCmd｛,Full｜,Break｜,Sim｝+
-noTestCmd
TDコマンド格納ファイルに出力する情報の種類を指定する。
○
○
○
○
○
○
○
○

-SimMain プログラム名
-noSimMain
主プログラムをシミュレーションする。
○
○
○
○
○
○
○
○

-SimSub プログラム名
-noSimSub
副プログラムをシミュレーションする。
○
○
○
○
○
○
○
○

-SimIdent
-noSimIdent
副プログラム（一意名CALL文）をシミュレーションする。
○
○
○
○
○
○
○
○

（凡例）

F：HP-UX(IPF)

H：HP-UX(IPF64)

A：AIX(32)

B：AIX(64)

J：Linux(x86)

K：Linux(x64)

L：Linux(IPF64)

S：Solaris(SPARC)

○：サポートしている

注※

次のオプションは，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で使用できます。

-DebugData,ValueHex

(6)　リンク

リンクを設定するコンパイラオプションを，次に示します。

表中のコンパイラオプションの詳細については，「32.5.10　リンクの設定」を参照してください。

オプション
機能
OS

F
H
A
B
J
K
L
S

-Compile,｛CheckOnly｜NoLink｝
-noCompile
コンパイルの処理範囲を指定する。
○
○
○
○
○
○
○
○

-OutputFile ファイル名
-noOutputFile
生成する実行可能ファイル名を指定する。
○
○
○
○
○
○
○
○

-Link オプションの並び
-noLink
リンカに渡すオプションを指定する。
○
○
○
○
○
○
○
○

-DynamicLink,｛Call｜IdentCall｝
-noDynamicLink
ダイナミックリンクを使用する。
○
○
○
○
○
○
○
○

（凡例）

F：HP-UX(IPF)

H：HP-UX(IPF64)

A：AIX(32)

B：AIX(64)

J：Linux(x86)

K：Linux(x64)

L：Linux(IPF64)

S：Solaris(SPARC)

○：サポートしている

(7)　規格

規格仕様のチェックを設定するコンパイラオプションを，次に示します。

表中のコンパイラオプションの詳細については，「32.5.11　規格の設定」を参照してください。

オプション
機能
OS

F
H
A
B
J
K
L
S

-StdMIA｛,13｜,14｝+
-noStdMIA※
MIA仕様の範囲外チェックをする。
○
○
○
○
○
○
○
○

-Std85｛,｛High｜Middle｜Low｝｜,Obso｜,Report｝+
-noStd85※
JIS仕様をチェックする。
○
○
○
○
○
○
○
○

-Std2002｛,OutRange｜,Obso｜,Archaic｝+
-noStd2002
COBOL2002規格仕様をチェックする。
○
○
○
○
○
○
○
○

-StdVersion,｛1｜2｝
-noStdVersion※
第1次規格／第2次規格の解釈でコンパイルする。
○
○
○
○
○
○
○
○

（凡例）

F：HP-UX(IPF)

H：HP-UX(IPF64)

A：AIX(32)

B：AIX(64)

J：Linux(x86)

K：Linux(x64)

L：Linux(IPF64)

S：Solaris(SPARC)

○：サポートしている

注※

これらのオプションは，自由形式正書法で書かれたCOBOL原始プログラムとしてコンパイルするプログラムには指定できません。指定してコンパイルすると，エラーとなってコンパイルが中止されます。

(8)　移行

他システムとの移行を設定するコンパイラオプションを，次に示します。

表中のコンパイラオプションの詳細については，「32.5.12　他システムとの移行の設定」を参照してください。

オプション
機能
OS

F
H
A
B
J
K
L
S

-CompatiV3※1※2
-noCompatiV3
VOS3 COBOL85との互換機能を有効にする。
○
○
○
○
○
○
○
○

-Compati85｛,IoStatus｜,Linage｜,Call｜,Power｜,Syntax｜,IDParag｜,RsvWord｜,NoPropagate｜,All｝+
-noCompati85
COBOL85互換機能を有効にする。
○
○
○
○
○
○
○
○

-H8Switch
-noH8Switch
HITAC8000シリーズの仕様でコンパイルする。
○
○
○
○
○
○
○
○

-Cblctr
-noCblctr
CBL-CTR特殊レジスタを使用できるようにする。
○
○
○
○
○
○
○
○

-DigitsTrunc
-noDigitsTrunc
転記文で上位けたを切り捨てる。
○
○
○
○
○
○
○
○

-IgnoreLCC
-noIgnoreLCC
行送り制御文字を無視する。
○
○
○
○
○
○
○
○

-CmAster
-noCmAster
1カラム目が'*'の行を注記行とする。
○
○
○
○
○
○
○
○

-CmDol
-noCmDol
7カラム目が'$'の行を注記行とする。
○
○
○
○
○
○
○
○

-Comp5
-noComp5
COMP-5を指定できるようにする。
○
○
○
○
○
○
○
○

-V3Spec〔,CopyEased〕
-noV3Spec
VOS3 COBOL85に対するUNIX COBOL2002固有の構文をチェックする。
○
○
○
○
○
○
○
○

-V3ConvtName
-noV3ConvtName
VOS3 COBOL85からのソースファイル互換のため，COPY文の原文名定数中の'¥'と'@'を変換する。
○
○
○
○
○
○
○
○

-Switch,｛EBCDIC｜EBCDIK｝〔,Unprintable〕〔,noApplyJpnItem〕※3
-noSwitch
字類条件を指定する。
○
○
○
○
×
×
○
○

-V3Rec,｛Fixed｜Variable｝※1※2
-noV3Rec
メインフレーム（VOS3）の固定長または可変長レコード形式のプログラムを，VOS3の日本語文字の扱いに合わせてコンパイルする。
○
○
○
○
○
○
○
○

-V3RecFCSpace※1
-noV3RecFCSpace
空白に関する機能キャラクタの扱いをメインフレーム（VOS3）と同等にする。
×
×
○
○
○
○
×
×

-V3RecEased{,QuoteCheck|,WordCheck}+
-noV3RecEased
-V3Recオプション指定時の仕様チェックを緩和する。
×
×
○
○
○
○
×
×

-DoubleQuote
-noDoubleQuote
引用符（ " ）を分離符とみなしてコンパイルする。
○
○
○
○
○
○
○
○

-BigEndian｛,Bin｜,Float｝+
-noBigEndian
2進データ項目または浮動小数点データ項目をビッグエンディアン形式で処理する。
×
×
×
×
○
○
○
×

-International
-noInternational
インタナショナリゼーション機能を使用する。
○
○
○
○
○
○
○
○

-EucPosition※1
-noEucPosition
EUCコード使用時，見かけ上の文字位置でコンパイルする。
○
○
○
○
×
×
○
○

-VOSCBL｛,OccursKey｜,ReportControl｝+
-noVOSCBL
メインフレーム互換機能を有効にする。
×
×
○
○
○
○
×
×

-PortabilityCheck｛,Literal｜,Numeric｝+
-noPortabilityCheck
移行向けチェック機能を有効にする。
×
×
○
○
○
○
×
×

-IgnoreAPPLY,FILESHARE
-noIgnoreAPPLY
APPLY FILE-SHARE句を覚え書きとみなす。
×
×
○
○
○
○
×
×

（凡例）

F：HP-UX(IPF)

H：HP-UX(IPF64)

A：AIX(32)

B：AIX(64)

J：Linux(x86)

K：Linux(x64)

L：Linux(IPF64)

S：Solaris(SPARC)

○：サポートしている

×：サポートしていない

注※1

これらのオプションは，自由形式正書法で書かれたCOBOL原始プログラムとしてコンパイルするプログラムには指定できません。指定してコンパイルすると，エラーとなってコンパイルが中止されます。

注※2

Linux(x86)，Linux(x64)の場合，コンパイラ環境変数CBLV3UNICODEにYESを指定したときだけ有効です。

注※3

UnprintableおよびnoApplyJpnItemサブオプションは，AIX(32)，AIX(64)で有効です。

(9)　リスト出力

リスト出力の設定をするコンパイラオプションを，次に示します。

表中のコンパイラオプションの詳細については，「32.5.13　リスト出力の設定」を参照してください。

オプション
機能
OS

F
H
A
B
J
K
L
S

-SrcList,｛OutputAll｜CopyAll｜CopySup｜NoCopy｝〔,NoFalsePath〕〔,DataLoc〕※
-noSrcList
コンパイルリストを出力する。
○
○
○
○
○
○
○
○

-ErrSup｛,I｜,W｝+
-noErrSup
IレベルまたはWレベルエラーの出力を抑止する。
○
○
○
○
○
○
○
○

（凡例）

F：HP-UX(IPF)

H：HP-UX(IPF64)

A：AIX(32)

B：AIX(64)

J：Linux(x86)

K：Linux(x64)

L：Linux(IPF64)

S：Solaris(SPARC)

○：サポートしている

注※

DataLocサブオプションは，HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効です。

(10)　その他

その他の設定をするコンパイラオプションを，次に示します。

表中のコンパイラオプションの詳細については，「32.5.14　その他の設定」を参照してください。

オプション
機能
OS

F
H
A
B
J
K
L
S

-Bin1Byte
-noBin1Byte
1バイトの2進項目を有効にする（PICTURE句の指定で2けたまでは1バイトとして扱う）。
○
○
○
○
○
○
○
○

-JPN,｛Alnum｜V3JPN｜V3JPNSpace｝※1
-noJPN
日本語項目の扱いを指定する。
○
○
○※1
○※1
×
×
○
○

-EquivRule,｛NotExtend｜NotAny｜StdCode｝
-noEquivRule
文字の等価規則をどう変更するか指定する。
○
○
○
○
○
○
○
○

-UscoreStart
-noUscoreStart
先頭が下線のCALL定数を指定できるようにする。
○
○
○
○
○
○
○
○

-BinExtend
-noBinExtend
2進データ項目に指定できる初期値を拡張する。
○
○
○
○
○
○
○
○

-MinusZero
-noMinusZero
10進項目で負の符号を持つゼロを正の符号を持つゼロに変換する。
○
○
○
○
○
○
○
○

-TruncCheck〔,Binary〕
-noTruncCheck
転記でのデータ切り捨てをチェックする。
送り出し側作用対象が2進項目で，受け取り側作用対象が外部10進項目／内部10進項目のとき，2進項目は格納できる最大けた数で転記のけた数をチェックする。
○
○
○
○
○
○
○
○

-LowerAsUpper
-noLowerAsUpper
定数指定のCALLに指定された英小文字を英大文字に変換してプログラムを呼び出す。
○
○
○
○
○
○
○
○

-CBLVALUE
-noCBLVALUE
環境変数CBLVALUEを有効にする。
○
○
○
○
○
○
○
○

-Repository,｛Gen｜Sup｝
-noRepository
リポジトリファイルの生成時，強制的に出力するか，更新しないかを指定する。
○
○
○
○
○
○
○
○

-RepositoryCheck
-noRepositoryCheck
同じソースファイル中の翻訳単位の定義と外部リポジトリ中の情報に相違があるかどうかをチェックする。
○
○
○
○
○
○
○
○

-Define 翻訳変数名〔=値〕〔,翻訳変数名〔=値〕〕…
-noDefine
コンパイル時に有効となる，翻訳変数名とその値を定義する。
○
○
○
○
○
○
○
○

-Details
-noDetails
コンパイラオプションの詳細情報を出力する。
○
○
○
○
○
○
○
○

-OldForm '旧オプションの並び'
UNIX COBOL85のオプションを指定する。
○
○
○
○
○
○
○
○

-Help
ccbl2002コマンドのヘルプを出力する。
○
○
○
○
○
○
○
○

-Profile,｛Prof｜Gprof｝※2
-noProfile
profまたはgprofでのプロファイル用オブジェクトファイルを作成する。
○
○
○
○
○※2
○※2
○※2
○

-UniObjGen
-noUniObjGen
シフトJISのCOBOLソースからUnicodeのオブジェクトを生成する。
○
×
○
○
○
○
×
×

-UniEndian,｛Little｜Big｝
-noUniEndian
シフトJISで記述された日本語文字定数をUTF-16LE，またはUTF-16BEに変換する。
○
×
○
○
○
○
×
×

-Lx64ConventionCheck
-noLx64ConventionCheck
Linux(x64)でC言語との連携を行うときに問題となる可能性のあるコードがある場合，チェックする。
×
×
×
×
×
○
×
×

-ExternRef
-noExternRef
外部属性を持つデータ項目が8バイト境界に整列されていないことを想定したオブジェクトを生成する。
×
×
×
×
×
×
×
○

-MaxDigits38
数字項目および数字定数に指定できる最大けた数を18けたから38けたに拡張する。
×
○
×
○
×
○
×
×

-IntResult,DecFloat40
算術演算の中間結果の表現形式を40けたの10進浮動小数点形式にする。
×
○
×
○
×
○
×
×

-LiteralExtend,Alnum
-noLiteralExtend
英数字定数と定数指定のプログラム名の長さを拡張する。
×
×
○
○
○
○
×
×

-SpaceAsZero
-noSpaceAsZero
外部10進項目中の空白に対して特殊処理を行う。
×
×
○
○
○
○
×
×

（凡例）

F：HP-UX(IPF)

H：HP-UX(IPF64)

A：AIX(32)

B：AIX(64)

J：Linux(x86)

K：Linux(x64)

L：Linux(IPF64)

S：Solaris(SPARC)

○：サポートしている

×：サポートしていない

注※1

次のオプションは，AIXで使用できます。

-JPN,V3JPNSpace

注※2

次のオプションは，Linuxでは使用できません。

-Profile,Prof

32.5.5　最終生成物の種類の設定

最終生成物※の種類を設定するコンパイラオプションについて，説明します。

注※

最終生成物とは，コンパイラが最終的に生成する実行可能ファイルのことを示します。

＜この項の構成＞

(1)　-Mainオプション

(2)　-PICオプション

(1)　-Mainオプション

(a)　形式

-Main,｛System｜V3｝ ファイル名

(b)　機能

最外側のプログラムをアプリケーションの主プログラムとしてコンパイルします。

ファイル中に複数の最外側のプログラムがあるときは，先頭の最外側のプログラムを主プログラムとしてコンパイルします。

-Main,System ファイル名

最外側のプログラムをアプリケーションの主プログラムとしてコンパイルします。

このとき，主プログラムが制御プログラムから受け取る引数の形式を，システム固有のargc，argv形式に合わせます。

-Main,V3 ファイル名

最外側のプログラムをアプリケーションの主プログラムとしてコンパイルします。

このとき，主プログラムが制御プログラムから受け取る引数の形式を，メインフレーム（VOS3）に合わせます。

(c)　注意事項

-Main,Systemオプションまたは-Main,V3オプションの指定がない場合で，次の条件をすべて満たすときには，先頭のCOBOLソースファイルに-Main,Systemオプションを指定したものと仮定されます。

-Compileオプションの指定がなく，かつ，オブジェクトファイル（.o），Cソースファイル（.c），アセンブラソースファイル（.s）の指定がない。

環境変数CBLCCの指定がない。

-SimMainオプションの指定がない。

-Mainオプションと-MainNotCBLオプションを同時に指定した場合，-Mainオプションが無効となります。

（例）

-MainNotCBL -Main,System

と指定した場合，-MainNotCBLオプションが有効となり，-Mainオプションは無効となります。

-Main,Systemオプション，-Main,V3オプションについては，「16.2　引数の受け取りと外部スイッチ」の記述も参照してください。

このオプションは，直後に指定されたファイルをアプリケーションの主プログラムとして扱います。

ENTRY文の記述があるソースファイルに，このオプションを指定してもENTRY文に制御は渡りません。

-Main,V3オプションを指定して作成した実行可能ファイルを実行するとき，受け取れるコマンド引数は一つ（空白まで）です。コマンド引数に空白を含むときは，アポストロフィ（'）で囲みます。

(2)　-PICオプション

(a)　形式

-PIC,｛Std｜Expand｝
-noPIC

(b)　機能

-PIC,Std

共用ライブラリに使う位置独立（PIC）コードを作成する場合に指定します。

ただし，HP-UX(IPF)，HP-UX(IPF64)，およびLinux(IPF64)では位置独立コードが標準生成のため，-PIC,Std，-PIC,Expandオプションを指定したときと指定しないときに，生成されるオブジェクトは同じです。

-PIC,Expand

-PIC,Stdを指定した場合と同じコードを生成します。

-noPIC

-PICオプションの指定を打ち消します。

(c)　注意事項

-PICオプションを指定した場合，リンクできるオブジェクトファイル（.o）が作成されます（-Compile,NoLinkが仮定される）。

-PICオプションは，次のオプションと相反しています。同時に指定した場合は，このオプションを優先します。
-Profileオプション

-PICオプションは，共用ライブラリ化するCOBOLオブジェクトファイル作成のために指定します。実行可能ファイルにリンクするCOBOLオブジェクトファイルや，アーカイブファイル化するCOBOLオブジェクトファイルを作成する場合は，これらのオプションを指定しないでください。指定した場合，関数の呼び出し元への戻り制御が正常に動作しない場合があります。

Cコンパイラにも，位置独立コード（PIC）を作成するオプションがあります。Ｃコンパイラのオプションについては，システムのマニュアルを参照してください。

共用ライブラリは，ldコマンドで作成します。次に，共用ライブラリの作成例を示します。

（例）

オブジェクトファイル名：xxx.o

HP-UX(IPF)の場合（共用ライブラリ名：libucbl.so）

ld -b xxx.o -o libucbl.so -a archive -L/opt/HILNGcbl2k/lib -lcbl2kml

HP-UX(IPF64)の場合（共用ライブラリ名：libucbl.so）

ld -b xxx.o -o libucbl.so -a archive -L/opt/HILNGcbl2k64/lib -lcbl2kml

AIX(32)の場合（共用ライブラリ名：libucbl.a）

ld -o libucbl.a xxx.o -bpT:0x10000000
  -bpD:0x20000000 -bnoentry -bM:SRE -bE:libucbl.exp
  -L/opt/HILNGcbl2k/lib -lcbl2k -lcbl2kml -lm -lc

AIX(64)の場合（共用ライブラリ名：libucbl.a）

ld -o libucbl.a a.o b.o -b64 -bpT:0x100000000
  -bpD:0x110000000 -bnoentry -bM:SRE -bE:libucbl.exp
  -L/opt/HILNGcbl2k64/lib -lcbl2k64 -lcbl2kml64 -lm -lc

Linux(x86)，Linux(IPF64)の場合（共用ライブラリ名：libucbl.so）

ld -E xxx.o -o libucbl.so -shared -L/opt/HILNGcbl2k/lib -lcbl2kml

Linux(x64)の場合（共用ライブラリ名：libucbl.so）

ld -E xxx.o -o libucbl.so -shared -L/opt/HILNGcbl2k64/lib -lcbl2kml

Solaris(SPARC)の場合（共用ライブラリ名：libucbl.so）

ld -G xxx.o -o libucbl.so -Bstatic -L/opt/HILNGcbl2k/lib -lcbl2kml

オブジェクトファイルは複数指定できます。

32.5.6　他製品との連携の設定

他製品との連携を設定するコンパイラオプションについて，説明します。

＜この項の構成＞

(1)　-SQLオプション

(2)　-SQLDispオプション（Linux(x86)，Linux(x64)で有効）

(3)　-RDBTranオプション（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC)で有効）

(4)　-XMAPオプション（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）

(1)　-SQLオプション

(a)　形式

-SQL,｛XDM｜ODBC〔,NoCont〕｝
-noSQL

(b)　機能

-SQL,XDM

リレーショナルデータベース（XDM/RD）操作シミュレーション機能を使用する場合に指定します。このオプションを指定すると，VOS3 XDM/RDのSQLは覚え書きとみなされます。

-SQL,ODBC（Linux(x86)，Linux(x64)で有効）

埋め込みSQL文をODBCインタフェース機能で実行する場合に指定します。このオプションを指定すると，埋め込みSQL文を使用して，ODBCインタフェース機能でデータベースにアクセスします。

-SQL,ODBC,NoCont（Linux(x86)，Linux(x64)で有効）

埋め込みSQL文をODBCインタフェース機能で実行する場合で，SQL構文内の浮動継続指示子を有効としないときに指定します。

-noSQL

-SQLオプションの指定を打ち消します。

(c)　注意事項

Linux(x86)，Linux(x64)では，-SQL,XDMオプションと-SQL,ODBCオプションを同時に指定した場合，あとに指定したオプションが有効となります。

(2)　-SQLDispオプション（Linux(x86)，Linux(x64)で有効）

(a)　形式

-SQLDisp
-noSQLDisp

(b)　機能

-SQLDisp

埋め込みSQL文に，用途が表示用のデータ項目を指定できるようにします。

このオプションを指定すると，データベースアクセス機能で，埋め込み変数の定義に次に示すデータ記述項を指定できます。埋め込みSQL文では，これらの項目が占めるバイト数分と同じバイト数を占める，英数字項目の埋め込み変数として使用できます。

英字項目

〔SIGN IS〕 LEADING SEPARATE CHARACTERの指定がない外部10進形式の数字項目

英数字編集項目

数字編集項目

日本語項目

日本語編集項目

外部ブール項目

外部浮動小数点項目

-noSQLDisp

-SQLDispオプションの指定を打ち消します。

(3)　-RDBTranオプション（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC)で有効）

(a)　形式

-RDBTran
-noRDBTran

(b)　機能

-RDBTran

翻訳単位中に記述されたCOMMIT文，ROLLBACK文を，HiRDBによる索引編成ファイルに対して適用します。また，HiRDBによる索引編成ファイル入出力機能に対するライブラリのリンクを行います。詳細は，「6.9.6　プログラムのコンパイルと実行」を参照してください。

なお，このオプションを指定するとデータコミュニケーション（DC）機能，およびDCシミュレーション機能は使用できません。

また，このオプションを指定しないと，COMMIT文，ROLLBACK文は，DC機能に対して適用されます。

-noRDBTran

-RDBTranオプションの指定を打ち消します。

(4)　-XMAPオプション（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）

(a)　形式

-XMAP,LinePrint
-noXMAP

(b)　機能

-XMAP,LinePrint

XMAP3を使用して，順編成ファイルをプリンタに出力するときに指定します。このとき，次の印刷機能も使用できます。

書式オーバレイ（APPLY FORMS-OVERLAY句）

印刷制御付き（CHARACTER TYPE句）

COBOLプログラム中にAPPLY FORMS-OVERLAY句またはCHARACTER TYPE句があっても，-XMAP,LinePrintオプションの指定がなければ，これらの句は覚え書きとなります。

これらの印刷機能の詳細については，「8.　プリンタへのアクセス」の該当する節を参照してください。

-noXMAP

-XMAPオプションの指定を打ち消します。

32.5.7　実行の設定

実行の設定をするコンパイラオプションについて，説明します。

＜この項の構成＞

(1)　-NumAcceptオプション

(2)　-NumCsvオプション

(3)　-MultiThreadオプション

(4)　-MainNotCBLオプション

(1)　-NumAcceptオプション

(a)　形式

-NumAccept
-noNumAccept

(b)　機能

-NumAccept

ACCEPT文の一意名1に次の項目を指定できるようにします。

符号なし数字項目

符号あり数字項目

数字編集項目

外部浮動小数点数字項目

内部浮動小数点数字項目

数字項目を指定した場合，入力データは右詰めで格納され，残りの部分には左側に0が埋められます。数字編集項目を指定した場合，編集文字に合わせて右詰めで格納されます。浮動小数点数字項目を指定した場合，受け取りの有効けた数分の値が格納されます。

-noNumAccept

-NumAcceptオプションの指定を打ち消します。

(2)　-NumCsvオプション

(a)　形式

-NumCsv
-noNumCsv

(b)　機能

-NumCsv

CSV編成ファイルで，セルのデータを数値として入出力したい場合に指定するオプションです。詳細は，「6.8.5　セルデータを数値として入出力する機能」を参照してください。

-noNumCsv

-NumCsvオプションの指定を打ち消します。

(3)　-MultiThreadオプション

(a)　形式

-MultiThread
-noMultiThread

(b)　機能

-MultiThread

COBOLプログラムをマルチスレッド環境下で動作させたい場合に指定します。

詳細は，「26.2　マルチスレッド対応COBOLプログラムの生成」を参照してください。

-noMultiThread

-MultiThreadオプションの指定を打ち消します。

(c)　注意事項

-MultiThreadオプションと-Profileオプションを同時に指定した場合，-Profileオプションは無効となります。

(4)　-MainNotCBLオプション

(a)　形式

-MainNotCBL
-noMainNotCBL

(b)　機能

-MainNotCBL

実行中のプロセスで最初に呼び出されるCOBOLプログラムを，副プログラムとします。他言語で作成したアプリケーションのメインプログラムからCOBOLプログラムを呼び出す場合，このオプションを指定します。

-noMainNotCBL

-MainNotCBLオプションの指定を打ち消します。

(c)　注意事項

-Mainオプションと-MainNotCBLオプションを同時に指定した場合，-MainNotCBLオプションが有効となります。

32.5.8　プログラムの最適化の設定

プログラムの最適化を設定するコンパイラオプションについて，説明します。

＜この項の構成＞

(1)　-Optimizeオプション

(1)　-Optimizeオプション

(a)　形式

-Optimize,｛0｜1｜2｜3｝

(b)　機能

最適化のレベルを指定します。-Optimizeオプションの詳細については，「31.　最適化機能」を参照してください。

-Optimize,0

最適化しません。

-Optimize,1

文の中で閉じた次の最適化をします。

命令レベルでの最適化（ピープホールによる不要命令の削除など）（ただし，Solaris(SPARC)ではピープホール最適化はサポートしていません）

-Optimizeオプションを指定しなかった場合，このオプションが仮定されます。

-Optimize,2

広域的な次の最適化をします。

命令レベルでの最適化（ピープホールによる不要命令の削除など）（ただし，Solaris(SPARC)ではピープホール最適化はサポートしていません）

不変式のループ外への移動

コピー伝播

定数の畳み込み

共通式の削除

演算の強さの軽減

そとPERFORM文のインライン展開

-Optimize,3

-Optimize,2オプションでの最適化に加えて，10進項目を2進項目に変換します。

(c)　注意事項

最適化オプションを指定すると，データ項目の使用状況の解析や文の順番の入れ替えなどをするため，コンパイル時間が増加します。-Optimize,0指定時が最短で，-Optimize,3指定時が最長となります。

-Optimize,3オプションと-TDInfオプションを同時に指定すると，-Optimize,3オプションが無効になり，-Optimize,2オプションが仮定されます。

最適化の内容については，「31.　最適化機能」を参照してください。

-Optimize,3オプションを指定すると10進項目を2進項目化するため，アドレス操作機能を使用しているプログラムは正しく動作しないことがあります。

HP-UX(IPF64)，AIX(64)，Linux(x64)の場合，-Optimize,3オプション，-MaxDigits38オプション，および-IntResult,DecFloat40オプションを同時に指定したときは，-Optimize,3オプションは無効となり，-Optimize,2オプションが仮定されます。

32.5.9　デバッグの設定

デバッグを設定するコンパイラオプションについて，説明します。

＜この項の構成＞

(1)　-DebugLineオプション

(2)　-DebugInfオプション

(3)　-DebugCompatiオプション

(4)　-DebugDataオプション

(5)　-TDInfオプション

(6)　-CVInfオプション

(7)　-DebugRangeオプション

(8)　-TestCmdオプション

(9)　-SimMainオプション

(10)　-SimSubオプション

(11)　-SimIdentオプション

(12)　主／副プログラムシミュレーションで生成する擬似プログラム用プログラム情報ファイル

(1)　-DebugLineオプション

(a)　形式

-DebugLine
-noDebugLine

(b)　機能

-DebugLine

原始プログラム中のデバッグ行をコンパイルの対象とします。デバッグ行とは，原始プログラムの標識領域にデバッグ標識（「D」または「d」）が記述されているか，浮動デバッグ指示子（「>>D」）が記述されている行のことです。

このシステムでは，WITH DEBUGGING MODE句は覚え書きとみなされるので，デバッグ行を有効にするためにはこのオプションの指定が必要です。

-noDebugLine

-DebugLineオプションの指定を打ち消します。

(2)　-DebugInfオプション

(a)　形式

-DebugInf〔,Trace〕
-noDebugInf

(b)　機能

-DebugInf

実行時に異常終了した場合，または実行時エラーが発生した場合，異常終了時要約情報リストを出力します。異常終了時要約情報リストの詳細については，「36.2　異常終了時要約情報リスト」を参照してください。

-DebugInf,Trace

異常終了時要約情報リスト中にトレースバック情報を出力します。

-noDebugInf

-DebugInfオプションの指定を打ち消します。

(c)　注意事項

-DebugInfオプション，-TDInfオプション，-CVInfオプション，-DebugRangeオプション，-DebugCompatiオプション，-DebugDataオプション，および-TestCmdオプションを指定していない場合，エラー／デバッグ情報（異常終了時要約情報リストやデータ領域ダンプリスト）が出力されません。

-DebugInfオプションと-Compile,CheckOnlyオプションを同時に指定した場合，-DebugInfオプションが無効となります。

-DebugInf,Traceオプションを指定すると，実行時の処理速度が遅くなる可能性があります。このため，-DebugInf,Traceオプションは，デバッグの目的でコンパイルするときだけ指定してください。

(3)　-DebugCompatiオプション

(a)　形式

-DebugCompati
-noDebugCompati

(b)　機能

-DebugCompati

次のチェックをします。

表操作で使用する添字または指標名が指す表要素が表の範囲内であるかどうか。

部分参照の指定が一意名の範囲内であるかどうか。

プログラム間で整合性が取れているかどうか。

ただし，実行時環境変数CBLPRMCHKWにNOCHKを指定したときは，プログラム間で整合性が取れていなくてもエラーとしないで，実行を継続します。

詳細は，「36.5　プログラム間整合性チェック」を参照してください。

-noDebugCompati

-DebugCompatiオプションの指定を打ち消します。

(c)　注意事項

-DebugCompatiオプションと-Compile,CheckOnlyオプションを同時に指定した場合，-DebugCompatiオプションが無効となります。

-DebugCompatiオプションを指定すると，-DebugInfオプションが仮定されます。

-DebugCompatiオプションを指定すると，実行時の処理速度が遅くなる可能性があります。このため，-DebugCompatiオプションは，デバッグの目的でコンパイルするときだけ指定してください。

-DebugCompatiオプションを指定すると，一部の例外名に対するTURN指令が無効となります。詳細は「21.8.2　例外検出での注意事項」の「(4)　コンパイラオプションとの関連性」を参照してください。

(4)　-DebugDataオプション

(a)　形式

-DebugData〔,ValueHex〕
-noDebugData

(b)　機能

-DebugData

外部または内部10進項目に対して，格納値がデータ項目の属性と矛盾している場合，データ例外エラーを検出します。

詳細は，「36.7　データ例外検出機能」を参照してください。

-DebugData,ValueHex（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

データ例外検知機能でデータ例外が検出された場合，出力されるエラーメッセージにデータ項目の属性と矛盾している格納値を16進数で表示します。

詳細は，「36.7　データ例外検出機能」を参照してください。

-noDebugData

-DebugDataオプションの指定を打ち消します。

(c)　注意事項

-DebugDataオプションと-Compile,CheckOnlyオプションを同時に指定した場合，-DebugDataオプションが無効となります。

-DebugDataオプションを指定すると，-DebugInfオプションが仮定されます。

-DebugDataオプションを指定すると，実行時の処理速度が遅くなる可能性があります。このため，-DebugDataオプションは，デバッグの目的でコンパイルするときだけ指定してください。

ValueHexサブオプションを指定した場合，-noDebugDataオプションの指定がないかぎり，ValueHexサブオプションの指定は有効となります。ValueHexサブオプションの指定を打ち消すときは，-noDebugDataオプションを指定してください。
（例）

ccbl2002 -DebugData -DebugData,ValueHex -DebugData …
（コンパイル結果）
　-DebugData,ValueHex

ccbl2002 -DebugData,ValueHex -noDebugData -DebugData …
（コンパイル結果）
　-DebugData

(5)　-TDInfオプション

(a)　形式

-TDInf
-noTDInf

(b)　機能

-TDInf

デバッグ情報を含むプログラム情報ファイル（.cbp）を出力します。

-TDInfオプションを指定したプログラムをテストデバッガでデバッグする場合，-DebugCompatiオプションの指定の有無に関係なく，プログラム間の整合性がチェックされます。プログラム間の整合性チェックについては，「(3)　-DebugCompatiオプション」を参照してください。

-noTDInf

-TDInfオプションの指定を打ち消します。

(c)　注意事項

-TDInfオプションと-Compile,CheckOnlyオプションを同時に指定した場合，-TDInfオプションが無効となります。

-TDInfオプションを指定すると，-DebugInfオプションが仮定されます。

-TDInfオプションと-Optimize,3オプションを同時に指定すると，-Optimize,3オプションが無効になり，-Optimize,2オプションが仮定されます。

コンパイルとリンクを別々に実行する場合で，-TDInfオプションを指定してコンパイルしたときは，ccbl2002コマンドでリンクを実行するときにも，同じオプションを指定する必要があります。

-TDInfオプションを指定すると，実行時の処理速度が遅くなる可能性があります。このため，-TDInfオプションは，デバッグの目的でコンパイルするときだけ指定してください。

-TDInfオプションはテストデバッガのためにゼロによる除算チェックなど最適化に影響を与えるオブジェクトコードを生成します。これによって，-TDInfオプションを指定することで，異常終了時要約リストなどの行番号／欄の情報が変化することがあります。行番号／欄の情報を常に正しく保つためには，-Optimize,0オプションを指定する必要があります。

(6)　-CVInfオプション

(a)　形式

-CVInf
-noCVInf

(b)　機能

-CVInf

カバレージ情報を含むプログラム情報ファイル（.cbp）を出力します。

-noCVInf

-CVInfオプションの指定を打ち消します。

(c)　注意事項

-CVInfオプションと-Compile,CheckOnlyオプションを同時に指定した場合，-CVInfオプションが無効となります。

-CVInfオプションを指定すると，-DebugInfオプションが仮定されます。

コンパイルとリンクを別々に実行する場合で，-CVInfオプションを指定してコンパイルしたときは，ccbl2002コマンドでリンクを実行するときにも，同じオプションを指定する必要があります。

-CVInfオプションを指定すると，実行時の処理速度が遅くなる可能性があります。このため，-CVInfオプションは，デバッグの目的でコンパイルするときだけ指定してください。

-CVInfオプションを指定してカバレージ情報を出力できるのは，ccbl2002コマンドでコンパイルして出力したプログラム情報ファイルだけです。COBOL85で作成したプログラム情報ファイルを使用した場合，ccbl2002コマンドに-CVInfオプションを指定してコンパイルしても，プログラム情報ファイルにカバレージ情報を出力しません。

(7)　-DebugRangeオプション

(a)　形式

-DebugRange
-noDebugRange

(b)　機能

-DebugRange

表操作で使用する添字および指標名の値が，次元ごとにOCCURS句で指定した繰り返し回数の範囲内であるかどうかを，実行時に調べます。

-noDebugRange

-DebugRangeオプションの指定を打ち消します。

(c)　注意事項

-DebugRangeオプションと-Compile,CheckOnlyオプションを同時に指定した場合，-DebugRangeオプションが無効となります。

-DebugRangeオプションを指定すると，-DebugInfオプションおよび-DebugCompatiオプションが仮定されます。

-DebugRangeオプションを指定すると，実行時の処理速度が遅くなる可能性があります。このため，-DebugRangeオプションは，デバッグの目的でコンパイルするときだけ指定してください。

-DebugRangeオプションを指定すると，一部の例外名に対するTURN指令が無効となります。詳細は「21.8.2　例外検出での注意事項」の「(4)　コンパイラオプションとの関連性」を参照してください。

(8)　-TestCmdオプション

(a)　形式

-TestCmd｛,Full｜,Break｜,Sim｝+
-noTestCmd

(b)　機能

TDコマンド格納ファイルに出力する情報の種類を指定します。

-TestCmd,Full

中断点情報，シミュレーション情報のTDコマンドをTDコマンド格納ファイル（.tdi）に出力します。

-TestCmd,Break

中断点情報のTDコマンドをTDコマンド格納ファイル（.tdi）に出力します。

-TestCmd,Sim

シミュレーション情報のTDコマンドをTDコマンド格納ファイル（.tds）に出力します。

-noTestCmd

-TestCmdオプションの指定を打ち消します。

(c)　注意事項

-TestCmd,Fullオプションと-TestCmd,Breakオプション，または-TestCmd,Fullオプションと-TestCmd,Simオプションを重複して指定した場合，-TestCmd,Fullオプションが有効となります。

-TestCmdオプションを指定すると，-DebugInfおよび-TDInfオプションが仮定されます。

コンパイルとリンクを別々にする場合で，コンパイル時に-TestCmdオプションを指定したときは，ccbl2002コマンドでのリンク時に-TDInfオプションを指定する必要があります。

(9)　-SimMainオプション

(a)　形式

-SimMain プログラム名
-noSimMain

(b)　機能

-SimMain プログラム名

テストデバッガの主プログラムシミュレーション機能を使用します。

プログラム名には，主プログラムシミュレーションの対象となる副プログラムの名称（最外側のプログラムのプログラム名段落で指定した名称）を指定します。

このオプションを指定すると，主プログラムシミュレーション用の一時的なCOBOLソースファイル（擬似主プログラム）が内部的に生成され，コンパイルされます。コンパイルによって生成されたオブジェクトファイルは，リンク時に取り込まれます。ここで生成されたソースファイル，およびオブジェクトファイルは，コンパイル終了時に消去されます。

また，テストデバッガで必要な擬似主プログラム用のプログラム情報ファイル（.cbs）が生成されます。テストデバッガの主プログラムシミュレーション機能を使用するとき，生成されたプログラム情報ファイル（.cbs）をテストデバッガ環境に指定してください。生成するプログラム情報ファイルの名称については，「(12)　主／副プログラムシミュレーションで生成する擬似プログラム用プログラム情報ファイル」を参照してください。

擬似主プログラムを生成するCOBOLソースファイルの情報は，プログラム情報ファイル（.cbp）から取得されます。このため，このオプションを指定する場合は，次のどちらかをする必要があります。

-TDInfオプションを同時に指定してコンパイルする。

副プログラムを含むCOBOLソースファイルを-TDInfオプションを指定してコンパイルし，生成された.cbpファイルを，環境変数CBLPIDIRで指定したディレクトリまたはカレントディレクトリに入れておく。

-OutputFileオプションで実行可能ファイル名を指定しないと，生成される主プログラムの実行可能ファイル名はa.outとなります。

-noSimMain

-SimMainオプションの指定を打ち消します。

(c)　注意事項

下記に示すデータ項目を主プログラムシミュレーションの対象となる副プログラムの手続き部見出しに指定することはできません。

プロパティ項目

関数一意名

-SimMainオプションを指定した場合，コンパイラのバージョンが03-01未満で作成したプログラム情報ファイル（.cbp）は使用できません。使用した場合は，コンパイルエラーとなり，コンパイルを中止します。

共用ライブラリやアーカイブライブラリを使用しての主プログラムシミュレーションはできません。

-LiteralExtendオプションと同時に指定した場合は，-LiteralExtendオプションが無効となります。

(10)　-SimSubオプション

(a)　形式

-SimSub プログラム名〔,…〕
-noSimSub

(b)　機能

-SimSub プログラム名〔,…〕

テストデバッガの副プログラムシミュレーション機能を使用します。

プログラム名には，副プログラムシミュレーションの対象となる副プログラムの名称（CALL文で指定した名称）を指定します。ただし，副プログラムの呼び出し方法は，CALL文の定数指定呼び出しでなければなりません。

このオプションを指定すると，副プログラムシミュレーション用の一時的なCOBOLソースファイル（擬似副プログラム）が内部的に生成され，コンパイルされます。コンパイルによって生成されたオブジェクトファイルは，リンク時に取り込まれます。ここで生成されたソースファイル，およびオブジェクトファイルは，コンパイル終了時に消去されます。

また，テストデバッガで必要な擬似副プログラム用のプログラム情報ファイル（.cbs）が生成されます。テストデバッガの副プログラムシミュレーション機能を使用するとき，生成されたプログラム情報ファイル（.cbs）をテストデバッガ環境に指定してください。生成するプログラム情報ファイルの名称については，「(12)　主／副プログラムシミュレーションで生成する擬似プログラム用プログラム情報ファイル」を参照してください。

擬似副プログラムを生成するCOBOLソースファイルの情報は，プログラム情報ファイル（.cbp）から取得されます。このため，このオプションを指定する場合は，次のどちらかをする必要があります。

-TDInfオプションを同時に指定してコンパイルする。

副プログラムを呼び出しているCOBOLソースファイルを-TDInfオプションを指定してコンパイルし，生成された.cbpファイルを，環境変数CBLPIDIRで指定したディレクトリまたはカレントディレクトリに入れておく。

-noSimSub

-SimSubオプションの指定を打ち消します。

(c)　注意事項

下記に示すデータ項目を副プログラムシミュレーションの対象となるプログラムに指定したCALL文の引数に指定することはできません。

プロパティ項目

関数一意名

-SimSubオプションを指定した場合，コンパイラのバージョンが03-01未満で作成したプログラム情報ファイル（.cbp）は使用できません。使用した場合は，コンパイルエラーとなり，コンパイルを中止します。

共用ライブラリやアーカイブライブラリを使用しての副プログラムシミュレーションはできません。

-LiteralExtendオプションと同時に指定した場合は，-LiteralExtendオプションが無効となります。

(11)　-SimIdentオプション

(a)　形式

-SimIdent
-noSimIdent

(b)　機能

-SimIdent

テストデバッガの副プログラムシミュレーション機能を使用します。この場合，副プログラムシミュレーションの対象となるのは，一意名呼び出しのCALL文を指定したプログラムです。

このオプションを指定すると，副プログラムシミュレーション用の一時的なCOBOLソースファイルが内部的に生成され，コンパイルされます。コンパイルによって生成されたオブジェクトファイルは，リンク時に取り込まれます。ここで生成されたソースファイル，およびオブジェクトファイルは，コンパイル終了時に消去されます。

また，テストデバッガで必要な擬似副プログラム用のプログラム情報ファイル（.cbs）が生成されます。テストデバッガの副プログラムシミュレーション機能を使用するとき，生成されたプログラム情報ファイル（.cbs）をテストデバッガ環境に指定してください。生成するプログラム情報ファイルの名称については，「(12)　主／副プログラムシミュレーションで生成する擬似プログラム用プログラム情報ファイル」を参照してください。

擬似副プログラムを生成するCOBOLソースファイルの情報は，プログラム情報ファイル（.cbp）から取得されます。このため，このオプションを指定する場合は，次のどちらかをする必要があります。

-TDInfオプションを同時に指定してコンパイルする。

副プログラムを呼び出しているCOBOLソースファイルを-TDInfオプションを指定してコンパイルし，生成された.cbpファイルを，環境変数CBLPIDIRで指定したディレクトリまたはカレントディレクトリに入れておく。

注意事項

下記に示すデータ項目を副プログラムシミュレーションの対象となるプログラムに指定したCALL文の引数に指定することはできません。
・プロパティ項目
・関数一意名

共用ライブラリやアーカイブライブラリを使用しての副プログラムシミュレーションはできません。

-noSimIdent

-SimIdentオプションの指定を打ち消します。

(c)　注意事項

下記に示すデータ項目を副プログラムシミュレーションの対象となるプログラムに指定したCALL文の引数に指定することはできません。

プロパティ項目

関数一意名

-SimIdentオプションを指定した場合，コンパイラのバージョンが03-01未満で作成したプログラム情報ファイル（.cbp）は使用できません。使用した場合は，コンパイルエラーとなり，コンパイルを中止します。

共用ライブラリやアーカイブライブラリを使用しての副プログラムシミュレーションはできません。

-LiteralExtendオプションと同時に指定した場合は，-LiteralExtendオプションが無効となります。

(12)　主／副プログラムシミュレーションで生成する擬似プログラム用プログラム情報ファイル

主／副プログラムシミュレーションでは，テストデバッガで必要な情報である擬似プログラム用プログラム情報ファイル（.cbs）が生成されます。擬似プログラム用プログラム情報ファイル（.cbs）は，カレントディレクトリ，または環境変数CBLPIDIRで指定したディレクトリに出力されます。

生成される擬似プログラム用プログラム情報ファイル（.cbs）の名称規則を，次に示します。

-SimMainオプションによって，擬似主プログラムシミュレーションする場合
SimMain@（-SimMainオプションで指定したプログラム名）.cbs

-SimSubオプションによって，定数指定のCALL文の擬似副プログラムシミュレーションする場合
SimSub@（-SimSubオプションで指定したプログラム名※）.cbs

注※

プログラム名を複数指定した場合，先頭のプログラム名が使用されます。

-SimIdentオプションによって，一意名指定のCALL文の擬似副プログラムシミュレーションする場合
SimIdent@001.cbs

32.5.10　リンクの設定

リンクを設定するコンパイラオプションについて，説明します。

＜この項の構成＞

(1)　-Compileオプション

(2)　-OutputFileオプション

(3)　-Linkオプション

(4)　-DynamicLinkオプション

(1)　-Compileオプション

(a)　形式

-Compile,｛CheckOnly｜NoLink｝
-noCompile

(b)　機能

プログラムのコンパイル時，オブジェクトファイル（.o），および実行可能ファイルの生成を抑止します。

-Compile,CheckOnly

このオプションを指定すると，実行可能ファイルを生成しないため，コンパイル速度が向上します。単にエラーチェックだけをしたい場合に指定します。

-Compile,NoLink

オブジェクトファイルは出力しますが，実行可能ファイルは生成しません。出力したオブジェクトファイルは，あとでリンカを使用して実行可能ファイルにできます。

-noCompile

-Compileオプションの指定を打ち消します。

(c)　注意事項

-Compileオプションを指定した場合，-OutputFileオプションの指定は無効となります。
また，-Compile,CheckOnlyオプションを指定した場合，アプリケーションデバッグ機能に関連するオプション（-DebugInf，-DebugCompati，-DebugData，-TDInf，-CVInf，-DebugRange，または-TestCmdオプション）が指定されても，無効となります。

-Compile,CheckOnlyオプションを指定した場合，-PICオプション，-Profileオプション，-IdentCallオプションが指定されても無効となります。

(2)　-OutputFileオプション

(a)　形式

-OutputFile ファイル名
-noOutputFile

(b)　機能

-OutputFile ファイル名

生成する実行可能ファイルの名称を指定します。

ファイル名には，生成する実行可能ファイルの名称を指定します。

このオプションの指定がない場合，実行可能ファイルの名称は，a.outとなります。

実行可能ファイルをカレントディレクトリに出力する場合の指定例を，次に示します。

（例）

ccbl2002 -OutputFile TEST1 -Main,System source.cbl

実行可能ファイルは，TEST1という名称で出力されます。

実行可能ファイルを任意のディレクトリに出力する場合の指定例を，次に示します。

（例）

ccbl2002 -Main,System TEST1.cbl -OutputFile /usr/user1/TEST1.out

実行可能ファイルは，/usr/user1ディレクトリにTEST1.outという名称で出力されます。パスプレフィックスの指定が省略された場合，実行可能ファイルは，カレントディレクトリに出力されます。

-OutputFileオプションと-Compileオプションを同時に指定した場合，-OutputFileオプションは，無効となります。

-noOutputFile

-OutputFileオプションの指定を打ち消します。

(3)　-Linkオプション

(a)　形式

-Link オプションの並び
-noLink

(b)　機能

-Link オプションの並び

リンカに渡すオプションの並びを指定します。オプションとオプションの間は，空白で区切ります。

-noLink

-Linkオプションの指定を打ち消します。

(c)　注意事項

-Linkオプション以降の文字は，ほかのオプション名，ファイル名なども含めすべてリンカに渡されます。したがって，このオプションは最後に指定してください。

-Linkオプションは，-Detailsオプションでのコンパイラオプションの詳細情報表示の対象にはなりません。

-Linkオプションに指定した文字列は，そのままccコマンドに渡されるため，指定するリンカオプションは，ccコマンドのオプションとなります。ただし，OSがAIX(32)またはAIX(64)でCコンパイラが組み込まれていない場合は，ldコマンドが直接起動されます。この場合，-Linkオプション以降の文字列には，ldコマンドのオプションを指定してください。

(4)　-DynamicLinkオプション

(a)　形式

-DynamicLink,｛Call｜IdentCall｝
-noDynamicLink

(b)　機能

-DynamicLink,Call

プログラムを呼び出す場合，呼び出されるプログラムが静的にリンクされていない場合，動的なリンク（ダイナミックリンク）が設定されます。詳細は「18.　プログラムの呼び出し」を参照してください。

-DynamicLink,IdentCall

一意名指定のCALL文でプログラムを呼び出す場合，動的なリンク（ダイナミックリンク）を行います。定数指定のCALL文は，静的なリンク（スタティックリンク）となります。詳細は「18.　プログラムの呼び出し」を参照してください。

-noDynamicLink

-DynamicLinkオプションの指定を打ち消します。

32.5.11　規格の設定

規格との仕様チェックを設定するコンパイラオプションについて，説明します。

＜この項の構成＞

(1)　-StdMIAオプション

(2)　-Std85オプション

(3)　-Std2002オプション

(4)　-StdVersionオプション

(1)　-StdMIAオプション

(a)　形式

-StdMIA｛,13｜,14｝+
-noStdMIA

(b)　機能

仕様チェック機能として，MIA仕様※を範囲外チェックします。

仕様範囲外の記述があると，警告レベルのエラーメッセージが出力されます。

注※

MULTIVENDOR INTEGRATION ARCHITECTURE VERSION 1.3および1.4（日本電信電話株式会社）の仕様（JIS X 3002-1988　電子計算機プログラムCOBOLの仕様が前提）

-StdMIA,13

MIAバージョン1.3仕様を範囲外チェックします。

-StdMIA,14

MIAバージョン1.4仕様を範囲外チェックします。

なお，このオプションを指定すると，-StdMIA,13サブオプションを仮定します。

-noStdMIA

-StdMIAオプションの指定を打ち消します。

(c)　注意事項

-StdMIAオプション，-Std85オプション，-Std2002オプションは，同時に指定できません。同時に指定した場合は，警告のメッセージが出力され，次の優先順位に従ってオプションが有効となります。

-Std2002オプション

-Std85オプション

-StdMIAオプション

次のオプションは，-StdMIAオプションと背反となるため，同時に指定できません。同時に指定した場合は，-StdMIAオプションが有効となり，次のオプションが無効となります。
-V3Spec　-StdVersion　-CompatiV3　-H8Switch
-Cblctr　-IgnoreLCC　-JPN　-CmDol　-Comp5　-NumAccept
-V3Rec　-EquivRule,NotAny　-SQL　-BinExtend　-MaxDigits38
-IntResult,DecFloat40　-LiteralExtend　-V3RecFCSpace　-SQLDisp

-StdMIA,13オプションは，次のオプションと背反となるため，同時に指定できません。同時に指定した場合は，-StdMIA,13オプションが有効となり，次のオプションが無効となります。
-EquivRule,StdCode　-Bin1Byte

このオプションは，自由形式正書法で書かれたCOBOL原始プログラムをコンパイルする場合には指定できません。指定した場合，エラーとなってコンパイルが中止されます。

(2)　-Std85オプション

(a)　形式

-Std85｛,｛High｜Middle｜Low ｝｜,Obso｜,Report｝+
-noStd85

(b)　機能

仕様チェック機能として，JIS仕様※の範囲外チェックや廃要素をチェックします。

仕様範囲外の記述や廃要素があると，警告レベルのエラーメッセージが出力されます。

注※

JIS X 3002-1992　電子計算機プログラムCOBOLの仕様

-Std85,High

JIS仕様の範囲外チェックをします。

-Std85,Middle

JIS仕様の中位集合範囲外（上位集合，JIS仕様の範囲外）チェックをします。

-Std85,Low

JIS仕様の下位集合範囲外（中位集合，上位集合，JIS仕様の範囲外）チェックをします。

-Std85,Obso

JIS仕様の廃要素をチェックします。

-Std85,Report

JIS仕様の報告書作成機能をチェックします。

-noStd85

-Std85オプションの指定を打ち消します。

(c)　注意事項

-Std85オプションは，次のオプションと背反となるため，同時に指定できません。同時に指定した場合は，-Std85オプションが有効となり，次のオプションが無効となります。
-V3Spec　-StdVersion　-CompatiV3　-H8Switch　-Cblctr
-IgnoreLCC　-JPN　-CmDol　-Comp5　-NumAccept　-V3Rec
-EquivRule,NotAny　-SQL　-BinExtend　-MaxDigits38
-IntResult,DecFloat40　-LiteralExtend　-V3RecFCSpace　-SQLDisp

このオプションは，自由形式正書法で書かれたCOBOL原始プログラムをコンパイルする場合には指定できません。指定した場合，エラーとなってコンパイルが中止されます。

(3)　-Std2002オプション

(a)　形式

-Std2002｛,OutRange｜,Obso｜,Archaic｝+
-noStd2002

(b)　機能

仕様チェック機能として，COBOL2002仕様の範囲外チェックや廃要素をチェックします。

仕様範囲外の記述や廃要素があると，警告レベルのエラーメッセージが出力されます。

-Std2002,OutRange

COBOL2002仕様の範囲外チェックをします。

-Std2002,Obso

COBOL2002仕様の廃要素をチェックします。

-Std2002,Archaic

COBOL2002仕様の古典的要素をチェックします。

-noStd2002

-Std2002オプションの指定を打ち消します。

(c)　注意事項

-Std2002オプションは，次のオプションと背反関係にあり同時に指定した場合は，-Std2002オプションを有効とします。
-V3Spec　-StdVersion　-CompatiV3　-H8Switch　-Cblctr
-IgnoreLCC　-JPN　-CmDol　-Comp5　-NumAccept　-V3Rec
-EquivRule,NotAny　-SQL　-BinExtend　-MaxDigits38
-IntResult,DecFloat40　-LiteralExtend　-V3RecFCSpace　-SQLDisp

(4)　-StdVersionオプション

(a)　形式

-StdVersion,｛1｜2｝
-noStdVersion

(b)　機能

第1次または第2次規格の言語仕様の解釈でコンパイルするためのオプションです。このオプションを指定しないときは，第3次規格以降の解釈でコンパイルされます。

-StdVersion,1

第1次規格（JIS72，ISO72，ANSI68）の解釈でコンパイルします。

-StdVersion,2

第2次規格（JIS80，ISO78，ANSI74）の解釈でコンパイルします。

-noStdVersion

-StdVersionオプションの指定を打ち消します。

このオプションを指定した場合，第3次規格以降の解釈※でコンパイルします。

注※

第3次規格以降の解釈とは，次の二つの規格の解釈を指します。

第3次規格（ISO85，ANSI85，JIS88，JIS92）

第4次規格（ISO/IEC 1989:2002，JIS X3002:2011）

-StdVersionオプション指定時，および未指定時の言語仕様の相違を，次に示します。

差異の生じる言語仕様
第1次規格
第2次規格
第3次規格以降

比較条件の略記法のNOT
略記法の条件の中のNOTが比較演算子の一部とも取れるときには論理演算子とみなす。
NOTの直後にGREATER，>，LESS，<，EQUAL，=，>=，<=のどれかが続くとき，NOTは比較条件の一部となる。これ以外のNOTは論理演算子とみなす。

MOVE文の位取り
送り出し側作用対象が位取りした整数項目（PICTURE句の右端文字がP）で，受け取り側作用対象が英数字編集項目の場合，あとに続くゼロを切り捨てて空白とする。
左記の場合，あとに続くゼロを切り捨てない。

UNSTRING文のDELIMITED BY ALL指定
複数の連続する区切り文字が現れた場合，区切り文字の受け取り領域に入るだけ区切り文字を移す。
左記の場合，区切り文字の受け取り領域には1個（1組）の区切り文字しか移さない。

COPY文の展開
第1次規格の仕様に従った書き方は旧仕様として展開する。
第2次規格以降の仕様に従ってCOPY文を展開する。

JUST句の処理
JUST句の指定がある英数字，英字，英数字編集にVALUE句で初期値を与える場合，JUST句の機能を働かせる。
左記の場合，JUST句の機能を働かせない。

WRITE文のADVANCINGの仮定
1ファイルに対する複数個のWRITE文でADVANCING指定があるものとないものを混用した場合，ADVANCING指定のないものに対してはBEFORE ADVANCING 1かAFTER ADVANCING 1のどちらかを仮定する。どちらを仮定するかはWRITE文の指定の内容による。
左記の場合，常にAFTER ADVANCING 1を仮定する。

PERFORM文のVARYING
AFTER指定がある場合の反復制御変数を初期化する位置

TEST AFTER指定時
外側のループの反復制御変数をBY指定の値で増加させてから，内側のループの反復制御変数をFROM指定の変数で再び初期化する。

TEST BEFORE指定時
内側のループの反復制御変数FROM指定の変数で初期化してから，外側のループの反復制御変数をBY指定の値で増加させる。

TEST AFTER指定時もTEST BEFORE指定時も，外側のループの反復制御変数をBY指定の値で増加させてから，内側の反復制御変数をFROM指定で再び初期化する。

SELECT OPTIONAL句
覚え書きとする。
覚え書きとしない。

CURRENCY SIGN句に指定できる定数
"="，"/"が指定できる。
"="，"/"は指定できない。

(c)　注意事項

このオプションは，自由形式正書法で書かれたCOBOL原始プログラムをコンパイルする場合には指定できません。指定した場合，エラーとなってコンパイルが中止されます。

32.5.12　他システムとの移行の設定

他システムとの移行に関連するコンパイラオプションについて，説明します。

＜この項の構成＞

(1)　-CompatiV3オプション

(2)　-Compati85オプション

(3)　-H8Switchオプション

(4)　-Cblctrオプション

(5)　-DigitsTruncオプション

(6)　-IgnoreLCCオプション

(7)　-CmAsterオプション

(8)　-CmDolオプション

(9)　-Comp5オプション

(10)　-V3Specオプション

(11)　-V3ConvtNameオプション

(12)　-Switchオプション（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC)で有効）

(13)　-V3Recオプション

(14)　-V3RecFCSpaceオプション（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(15)　-V3RecEasedオプション（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(16)　-DoubleQuoteオプション

(17)　-BigEndianオプション（Linuxで有効）

(18)　-VOSCBLオプション（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(19)　-PortabilityCheckオプション（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(20)　-IgnoreAPPLY,FILESHAREオプション（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(21)　-Internationalオプション

(22)　-EucPositionオプション（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC)で有効）

(1)　-CompatiV3オプション

(a)　形式

-CompatiV3
-noCompatiV3

(b)　機能

-CompatiV3

メインフレーム（VOS3）COBOL85との互換を指定するオプションです。-CompatiV3オプションは，VOS3 COBOL85で開発したCOBOLプログラムをUNIX環境に移行することを目的として提供しているオプションで，日立拡張機能の中で使用頻度の高いものを対象としています。

このオプションを指定した場合，指定しない場合と比べて次の点が異なります。

ASSIGN句で指定した外部装置名に関連する環境変数名が，次のように変更されます。

（書き方）

SYSnnn〔-装置クラス〕〔-装置名〕〔-編成〕〔-ファイル定義名〕
または，〔装置クラス-〕〔装置名-〕〔編成-〕ファイル定義名

-CompatiV3オプション指定時の環境変数名
次のどちらかとなる。
CBL_SYSnnn
CBL_ファイル定義名

-CompatiV3オプション未指定時の環境変数名
次のどちらかとなる。
CBL_SYSnnn〔_装置クラス〕〔_装置名〕〔_編成〕〔_ファイル定義名〕
CBL_〔装置クラス_〕〔装置名_〕〔編成_〕ファイル定義名

OPEN I-Oで開かれた順ファイルに対してWRITE文が指定できます。このとき，次の条件をすべて満たすと，WRITE文はREWRITE文として扱われます。

（条件）

-CompatiV3オプションの指定がある。

EXTERNAL句が指定されているか，またはOPEN I-Oで開かれている。

WRITE文にADVANCING指定がない。

LINAGE句の指定がない。

-CompatiV3オプションを指定した場合，次のオプションが仮定されます。

（仮定されるオプション）

-V3Rec,Variable
可変長形式の原始プログラムのコンパイルを，メインフレームの日本語項目の扱いに合わせるオプションです。
なお，固定長形式でコンパイルする場合，-CompatiV3オプションと-V3Rec,Fixedオプションを指定する必要があります。

-JPN,Alnum
日本語項目，日本語編集項目，および日本語文字定数を，それぞれ英数字項目，英数字編集項目，および英数字定数として扱うオプションです。
VOS3 COBOL85でXCOBOL=(N)を指定したときと同じ動作となります。

VOS3 COBOL85上で使用できる報告書作成機能を記述したプログラムをコンパイルできます。
なお，-CompatiV3オプションを指定しない場合，UNIX COBOL85と同じ言語仕様の報告書作成機能を使用します。

通信節による画面機能で，複数プログラムで通信文が実行された場合，一つの仮想端末を複数のプログラム間で共用し，送受信します。

DIVIDE文書き方4および書き方5の，除算の剰余を計算するのに使う商は，商を計算したときの中間結果と同じけた数，同じ小数点位置，同じ符号の有無を持ちます。

（例）

DIVIDE A BY B GIVING C REMAINDER D.

上記の例のDIVIDE文は，下記のような連続した操作に変換されます（ただし，TMP1，TMP2，TMP3はコンパイラによって作成された中間結果の記憶場所を表します）。

A/B → TMP1
TMP1 → TMP2
A - (B * TMP2) → TMP3
TMP1 → C
TMP3 → D

-CompatiV3オプションを指定したときは，TMP2はTMP1と同じけた数，同じ小数点位置，同じ符号になります。

-CompatiV3オプション未指定のときは，TMP2は商（C）と同じけた数，同じ小数点位置，同じ符号になります。

-CompatiV3オプションを指定した場合，英数字定数の分離符には，アポストロフィ（'）だけが使用できます。

-CompatiV3オプションと-EquivRuleオプションは，同時に指定できません。指定した場合，あとに指定したオプションが有効となります。

-CompatiV3オプションと-IntResult,DecFloat40オプションを同時に指定したとき，算術式と算術文に対する-CompatiV3オプションの仕様（DIVIDE文の書き方4および書き方5）は無効となります。この場合，-IntResult,DecFloat40オプション指定時での演算を行います。-IntResult,DecFloat40オプションについては，「(22)　-IntResult,DecFloat40オプション（HP-UX(IPF64)，AIX(64)，Linux(x64)で有効）」を参照してください。

-noCompatiV3

-CompatiV3オプションの指定を打ち消します。

-CompatiV3オプションを指定した場合，-V3Rec,Variableオプションおよび-JPN,Alnumオプションが仮定されますが，-noCompatiV3オプションを指定しても，仮定された-V3Rec,Variableオプションおよび-JPN,Alnumオプションは打ち消されません。

(c)　注意事項

このオプションは，自由形式正書法で書かれたCOBOL原始プログラムをコンパイルする場合には指定できません。指定した場合，エラーとなってコンパイルが中止されます。

このオプションを指定した場合，連結式を記述できません。

AIX(32)，AIX(64)，Linux(x86)，Linux(x64)の場合，コンパイラ環境変数CBLV3UNICODEにYESを指定し，-UniObjGenオプションを指定した場合，-CompatiV3オプションを指定しても-JPN,Alnumオプションは仮定されません。

このオプションを指定した場合，特殊名段落の定数10が有効になります。ただし，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)の場合，コンパイラ環境変数CBLV3UNICODEにYESを指定すると，-UniObjGenオプションと-CompatiV3オプションの同時指定が可能となるため，Unicodeで多バイトになる文字を指定した場合，コンパイルエラーとなります。

(2)　-Compati85オプション

(a)　形式

-Compati85｛,IoStatus｜,Linage｜,Call｜,Power｜,Syntax｜,IDParag｜,RsvWord｜,NoPropagate｜,All｝+
-noCompati85

(b)　機能

-Compati85,IoStatus

入出力状態1x，2xに対する処理をCOBOL85と同様にします。

-Compati85,Linage

LINAGE値が不正なときの処理をCOBOL85と同様にします。

-Compati85,Call

CALL文のON EXCEPTION，またはON OVERFLOW指定の無条件文を実行するエラーの条件をCOBOL85と同様にします。

-Compati85,Power

べき乗演算でのエラー時の処理をCOBOL85と同様にします。また，べき乗演算の精度を，同一システムのCOBOL85（製品が存在する場合だけ）と同様にします。べき乗演算と-Compati85,Powerオプションとの関係については，「21.3.3　例外チェックが無効な場合の動作」の「(1)　手続き文の実行中にエラーが発生し，例外を検出した場合」を参照してください。

-Compati85,Syntax

次の機能について，コンパイル時の解釈をCOBOL85と同様にします。

COPY文のREPLACING指定での置換位置

見出し部注記項（-Compati85,IDParagオプション指定時と同等の解釈をする）

部の見出し，節名，段落名，END PROGRAMなどの開始位置チェック

直前のピリオドが省略されたA領域に置かれた語の解釈

COBOL語の最大長（30文字とする）

予約語（COBOL85では予約語で，COBOL2002では文脈依存語に変更されたものを予約語に戻す）
なお，COBOL85で予約語だったものがCOBOL2002で文脈依存語となっているのは，次の語です。
ONLY　PREVIOUS　RECURSIVE

プログラム名の長さ（30バイトとする）

自由形式正書法の1行の長さ（80文字とする）

-Compati85,IDParag

見出し部の構文チェックを緩和します。

このオプションを指定すると，見出し部にAUTHOR段落，INSTALLATION段落，DATE-WRITTEN段落，DATE-COMPILED段落，SECURITY段落，およびREMARKS段落が記述できます。

-Compati85,RsvWord

予約語のうちCOBOL2002で新たに追加されたものを除き，COBOL85の予約語と同じ範囲でコンパイルします。

-Compati85,NoPropagate

CALL文，INVOKE文，および利用者定義関数で伝播を抑止します。

次のプログラムを呼び出す場合，例外が伝播することはないため，このオプションを指定するとオブジェクトファイルサイズを縮小できます。

PROPAGATE指令が指定されていないプログラム

COBOL85で作成したプログラム

Cプログラムなど，COBOL言語以外の言語を使用したプログラム

COBOL2002で使用できるサービスルーチン

OpenTP1，XMAP3（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）などの関連プログラムが提供している関数など

ただし，条件によっては，自動的に呼び出し元プログラムへの伝播が抑止される場合があります。その場合は，このオプションを指定する必要はありません。詳細は，「21.5.3　例外を受け取れないプログラムに例外を伝播させた場合の動作」を参照してください。

-Compati85,All

-Compati85オプションのすべてのサブオプションを仮定します。

-Compati85,Allを指定した場合，-Compati85オプションのすべてのサブオプションを指定したものとみなします。

-noCompati85

-Compati85オプションの指定を打ち消します。

(c)　注意事項

-Compati85オプションは，単独で指定できません。必ずサブオプションを指定する必要があります。

-Compati85,IDParagオプションを指定した場合，見出し部中にCOPY文，REPLACE文，およびINCLUDE文を記述できません。注記項中にCOPY文，REPLACE文，またはINCLUDE文を記述した場合，そのCOPY文，REPLACE文，またはINCLUDE文を注記とみなします。

-Compati85,IDParagオプションを指定した場合，注記項中に継続行を表す標識（-）が現れたときは，コンパイルエラーとなります。

-Compati85,IDParagオプションを指定した場合，見出し部には，COBOL85で指定できる段落見出し（PROGRAM-ID，AUTHOR，INSTALLATION，DATE-WRITTEN，DATE-COMPILED，SECURITY，およびREMARKS）以外を指定できません。

-Compati85,Syntaxオプションを指定した場合に適用される予約語は，COBOL2002の予約語およびONLY，PREVIOUS，RECURSIVE の三つの語となります。
-Compati85,RsvWordオプションを指定した場合に適用される予約語は，COBOL85の予約語だけとなります。

-Compati85,RsvWordオプションを指定した場合，COBOL2002で新しく追加された構文が利用できなくなります。このため，既存プログラムにCOBOL2002の新機能を加えて拡張することが困難になります。既存プログラムにCOBOL2002の新しい予約語が使われている場合，新しい予約語とは異なる語に置き換えることを推奨します。COBOL2002で追加された新しい予約語については，マニュアル「COBOL2002　言語　標準仕様編　4.8 予約語」を参照してください。

-Compati85オプションのうち次のオプションを指定した場合，COBOLソース中にTURN指令を指定できません。指定した場合，コンパイルエラーとなります。

-Compati85,IoStatus

-Compati85,Linage

-Compati85,Call

-Compati85,Power

-Compati85,NoPropagate

-Compati85,NoPropagateオプションは，CALL文のほかにINVOKE文，および利用者定義関数の呼び出しの場合にも，伝播が抑止されます。なお，CALL文，INVOKE文，および利用者定義関数を使用していない場合，このオプションは意味を持ちません。

-Compati85,Syntaxオプションは，-LiteralExtendオプションと同時に指定すると，-Compati85,Syntaxオプションが有効となり，-LiteralExtendオプションは無効となります。

(3)　-H8Switchオプション

(a)　形式

-H8Switch
-noH8Switch

(b)　機能

-H8Switch

HITAC8000シリーズの仕様でコンパイルするためのオプションです。

次の文で，送り出し側作用対象が数字項目（または固定小数点数字定数）で，受け取り側作用対象が英数字項目（または英数字編集項目）の場合，数字項目を英数字項目とみなして転記します。

MOVE

WRITE FROM

REWRITE FROM

RELEASE FROM

ACCEPT FROM DAY

ACCEPT FROM DATE

ACCEPT FROM TIME

ACCEPT FROM DAY-OF-WEEK

また，比較条件で，両辺の組み合わせが数字項目（または固定小数点数字定数）と英数字項目（または英数字編集項目，英字項目，英数字定数）の場合，数字項目を英数字項目とみなして比較します。

このオプションを指定しなかった場合，数字項目は数字項目として転記，比較されます。

-noH8Switch

-H8Switchオプションの指定を打ち消します。

(4)　-Cblctrオプション

(a)　形式

-Cblctr
-noCblctr

(b)　機能

-Cblctr

報告書作成機能を使用するときに指定します。このオプションを指定すると，CBL-CTR特殊レジスタが生成され，COBOLプログラムと報告書作成機能間で連絡ができるようになります。

詳細は，マニュアル「COBOL2002　言語　拡張仕様編　7. 報告書作成機能の拡張」を参照してください。

-noCblctr

-Cblctrオプションの指定を打ち消します。

(5)　-DigitsTruncオプション

(a)　形式

-DigitsTrunc
-noDigitsTrunc

(b)　機能

-DigitsTrunc

原始プログラム中の転記文で受け取り側作用対象が2進項目の場合，送り出し側作用対象のけたが受け取り側作用対象よりも大きいときに，上位のけたを切り捨てます。

（例）次のプログラムの実行結果を示します。

      77 A PIC S9(4) USAGE COMP VALUE +123.
      77 B PIC S9(2) USAGE COMP.
          :
          MOVE A TO B.

-DigitsTruncオプションを指定した場合 …… +23

-DigitsTruncオプションを指定しない場合 … +123

このオプションを指定しなかった場合，原始プログラム中の転記文で受け取り側作用対象が2進項目のとき，送り出し側作用対象の有効けた数が受け取り側作用対象よりも大きいと，入り切らない部分が切り捨てられます。

-noDigitsTrunc

-DigitsTruncオプションの指定を打ち消します。

(c)　注意事項

-DigitsTruncオプションと-Comp5オプションを同時に指定した場合，あとに指定したオプションだけが有効となります。

(6)　-IgnoreLCCオプション

(a)　形式

-IgnoreLCC
-noIgnoreLCC

(b)　機能

-IgnoreLCC

WRITE～ADVANCING／POSITIONING文で書き出すレコードの先頭1バイトを出力しないことを指定します。

あらかじめ，レコード記述項で行送り制御文字用の1バイト分の領域を確保しておいたプログラムをコンパイルするときに指定します。ただし，次の場合には-IgnoreLCCオプションの指定があっても，レコードの先頭から出力されます。

順ファイル以外のファイルの場合

順ファイルのWRITE文に行送りの指定（ADVANCING，POSITIONING）がない場合

順ファイルのファイル記述項にLINAGE句の指定がある場合

-noIgnoreLCC

-IgnoreLCCオプションの指定を打ち消します。

(7)　-CmAsterオプション

(a)　形式

-CmAster
-noCmAster

(b)　機能

-CmAster

固定形式正書法のとき，行の先頭文字（1カラム目の文字）が標準コードの星印（*）である行を注記行とします。

ただし，このオプションは固定形式正書法で記述されたCOBOLソースファイルをコンパイルするときだけ有効となります。

-noCmAster

-CmAsterオプションの指定を打ち消します。

(8)　-CmDolオプション

(a)　形式

-CmDol
-noCmDol

(b)　機能

-CmDol

固定形式正書法のとき，行の先頭から7カラム目の文字が「$」記号である行を注記行とします。

ただし，このオプションは固定形式正書法で記述されたCOBOLソースファイルをコンパイルするときだけ有効となります。

-noCmDol

-CmDolオプションの指定を打ち消します。

(9)　-Comp5オプション

(a)　形式

-Comp5
-noComp5

(b)　機能

-Comp5

COBOLプログラム中のUSAGE句のCOMP-5を使用できるようにするオプションです。

このオプションを指定すると，COMP-5は，COMPを指定した場合と同様に処理されます。このオプションを指定しなかった場合，USAGE句にCOMP-5が指定されているとエラーになります。

COMP-5は，-BigEndian,Binオプションの対象にはなりません。（Linuxで有効）

COMP-5を指定できる場所は，COMPを指定できる場所と同じです。また，COMP-5は，COMPと同じ仕様となるため，PICTURE句のけた数，データのバイト数，および実際に格納できる数値は次のとおりです。

表32-2　COMP-5で実際に格納できる数値

PICTURE句のけた数 | データのバイト数 | 実際に格納できる数値
符号あり | 符号なし
1～4けた | 2バイト | -2¹⁵～2¹⁵-1 | 0～2¹⁵-1
5～9けた | 4バイト | -2³¹～2³¹-1 | 0～2³¹-1
10～18けた | 8バイト | -2⁶³～2⁶³-1 | 0～2⁶³-1

-noComp5

-Comp5オプションの指定を打ち消します。

(c)　注意事項

-Comp5オプションと-DigitsTruncオプションを同時に指定した場合，あとに指定したオプションだけが有効となります。

(10)　-V3Specオプション

(a)　形式

-V3Spec〔,CopyEased〕
-noV3Spec

(b)　機能

-V3Spec

VOS3 COBOL85でサポートされていない，UNIX固有の言語仕様に対して構文チェックするためのオプションです。

VOS3 COBOL85 09-00を対象として，ほぼ同等の言語仕様で構文チェックをし，VOS3 COBOL85ではサポートされていないUNIX固有の言語仕様に対して警告メッセージを出力します。

出力するオブジェクトファイルは，このオプションの影響を受けません。

このオプションは，VOS3 COBOL85互換機能です。

-V3Spec,CopyEased

-V3Specオプションで指定された構文チェックの範囲を緩和し，COPY文，REPLACE文の一部のエラーチェックをしません。

このオプションは，VOS3 COBOL85互換機能です。

-noV3Spec

-V3Specオプションの指定を打ち消します。

-V3Specオプションを指定した場合，-V3Rec,Variableオプションが仮定されますが，-noV3Specオプションを指定しても，仮定された-V3Rec,Variableオプションは打ち消されません。

(c)　注意事項

日本語項目の部分参照については，VOS3 COBOL85のXCOBOL=(-N)オプションを指定した状態を対象とします。

-V3Specオプションと-CompatiV3オプションを同時に指定した場合，一部のチェック項目が重複するため，-CompatiV3オプションのエラーメッセージが出力され，このオプションのエラーメッセージは出力されません。

-V3Specオプションを指定すると，-V3Rec,Variableオプションが仮定されます。このため，固定長形式でコンパイルする場合は-V3Rec,Fixedオプションを同時に指定する必要があります。

-V3Specオプションと次のオプションを同時に指定すると，-V3Specオプションが有効になり，次のオプションは無効になります。
-Comp5　-CmAster　-BinExtend　-CBLVALUE　-Bin1Byte
-NumAccept　-CmDol　-MaxDigits38　-IntResult,DecFloat40
-LiteralExtend

-V3Specオプションと-UniObjGenオプションを同時に指定した場合，-V3Rec,Variableオプションは仮定されません。-V3Recオプションを有効とするときは，環境変数CBLV3UNICODEを指定してください。

(11)　-V3ConvtNameオプション

(a)　形式

-V3ConvtName
-noV3ConvtName

(b)　機能

-V3ConvtName

原文名定数の「¥」を「_」に，「@」を「!」に変換した名称で登録集原文を検索する場合，このオプションを指定します。このオプションは，COPY文およびINCLUDE文で有効になります。また，原文名定数の末尾の拡張子を省略した場合は，「.cbl」が仮定されます。なお，原文名指定の場合は，このオプションの対象となりません。

（例1）原文名定数に¥，@が含まれる場合

原文名定数中に¥，@が含まれる場合は，-V3ConvtNameオプションを指定してコンパイルします。

COPY '¥ABC'.
_ABC.cblを登録集原文として検索します。

COPY '@ABC'.
!ABC.cblを登録集原文として検索します。

（例2）原文名に¥，@が含まれる場合

¥，@，#は，COBOL2002では原文名に使用できない文字のため，コンパイルエラーとなります。この場合は，¥，@を含む原文名を定数指定に変更してから-V3ConvtNameオプションを指定してコンパイルします。※

COPY ¥ABC.　→　COPY '¥ABC'.
_ABC.cblを登録集原文として検索します。

COPY @ABC.　→　COPY '@ABC'.
!ABC.cblを登録集原文として検索します。

-V3ConvtNameオプションを使用しない場合は，¥，@を¥，@，#以外の文字に変更してください。

注※

#を含む原文名は，原文名定数に変更するだけで使用できます。

COPY文での登録集原文の利用については，「32.3.1　原始文操作機能」を参照してください。

このオプションは，VOS3 COBOL85互換機能です。

-noV3ConvtName

-V3ConvtNameオプションの指定を打ち消します。

(12)　-Switchオプション（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC)で有効）

(a)　形式

-Switch,｛EBCDIC｜EBCDIK｝〔,Unprintable〕〔,noApplyJpnItem〕
-noSwitch

(b)　機能

照合順序および字類条件をEBCDICコードまたはEBCDIKコードに切り替えるためのオプションです。

-Switch,EBCDIC

英数字の照合順序および字類条件をEBCDICコードに切り替えます。ただし，1バイトで印字できないコードは，照合順序としてX'FF'に割り付けられます。

-Switch,EBCDIK

英数字の照合順序および字類条件をEBCDIKコードに切り替えます。ただし，1バイトで印字できないコードは，照合順序としてX'FF'に割り付けられます。

-Switch,xxxxx,Unprintable（AIX(32)，AIX(64)で有効）

英数字の照合順序を，xxxxxに指定したコードに切り替えます。

1バイトで印字できないコードも，照合順序として固有の文字位置に割り付けます。詳細は，「(c)　注意事項」を参照してください。

xxxxxは，EBCDIC，EBCDIKのどちらかを指定します。

-Switch,xxxxx,noApplyJpnItem（AIX(32)，AIX(64)で有効）

英数字の照合順序を，xxxxxに指定したコードに切り替えます。

日本語項目を-Switchオプションの適用対象外とします。

xxxxxは，EBCDIC，EBCDIKのどちらかを指定します。

-noSwitch

-Switchオプションの指定を打ち消します。

(c)　注意事項

字類条件の判断基準と文字の大小関係

プログラムに記述した字類条件に対するコードの判断基準と文字の大小関係を，次に示します。

表32-3　字類条件の判断基準と文字の大小関係

条件 | ASCII | EBCDIC | EBCDIK
字類の判断基準 | ALPHABETIC | a～z，A～Z | A～Z，a～z | A～Z
ALPHABETIC-UPPER | A～Z | A～Z | A～Z
ALPHABETIC-LOWER | a～z | a～z | －
文字の大小関係 | a～z＞A～Z | a～z＜A～Z | a～z＜A～Z
組み込み関数の結果 | UPPER-CASE | a～z→A～Z | a～z→A～Z | a～z→A～Z
LOWER-CASE | A～Z→a～z | A～Z→a～z | A～Z→a～z

（凡例）

－：字類条件が真になる事はない

＞：大きい（a＞b　aはbより大きい）

＜：小さい（a＜b　aはbより小さい）

→：置換（a→b　aをbに置換する）

PROGRAM COLLATING SEQUENCE句と-Switchオプションの指定値の対応を次に示します。

PROGRAM COLLATING SEQUENCE句の符号系名 | -Switchオプション
EBCDICサブオプションを指定した場合 | EBCDIKサブオプションを指定した場合
指定なし | EBCDICコード | EBCDIKコード
EBCDIC | EBCDICコード | Sレベルエラー
EBCDIK | Sレベルエラー | EBCDIKコード
EBCDIC，EBCDIK以外 | Sレベルエラー | Sレベルエラー

-Switchオプションの対象

-Switchオプションの対象を次に示します。

機能 | 対象の字類
比較条件 | 英字，英数字，日本語※
整列併合 | 英字，英数字

注※

AIX(32)，AIX(64)では，noApplyJpnItemサブオプションを指定している場合，対象の字類が日本語のときは-Switchオプションの対象となりません。

照合順序

比較のときに使用する照合順序として，1バイトの印字可能文字は対応する文字位置に割り付けられ，その他の印字できないコードはすべてX'FF'に割り付けられます。

ただし，AIX(32)，AIX(64)で，Unprintableサブオプションが有効な場合は，印字できないコードに，印字可能文字が割り付けられていない固有の文字位置が割り付けられます。Unprintableサブオプションの有無での照合順序の違いを次に示します。

文字コード種別
Unprintableサブオプション

無効
有効

印字可能文字
対応する文字の文字位置に割り付けられます。

印字できないコード
すべてX'FF'に割り付けられます。
印字可能文字が割り付けられていない固有の文字位置に割り付けられます。
ただし，印字できないコードの大小関係は保証しません。

Unprintableサブオプションが有効な場合，JIS8単位コードが，EBCDICコードまたはEBCDIKコードのどの位置に割り付けられるかをそれぞれ次に示します。なお，表中の網掛けは，印字できないコードを示します。

図32-2　EBCDICコードとJIS8単位コードの対応表

図32-3　EBCDIKコードとJIS8単位コードの対応表

Unprintableサブオプションが有効でない場合の照合順序の対応表については，マニュアル「COBOL2002　言語　標準仕様編　付録B 計算機文字集合」を参照してください。

-Switchオプションを指定したプログラムでの比較結果

-Switchオプションを指定したプログラムでは，特定のデータ種別の比較結果で注意が必要です。

次のように，1バイトで印字できないコード（日本語データや数字データなど）を含む作用対象（データ項目や定数）を比較条件に指定している場合は，値が異なるのに等しいと解釈されたり，-Switchオプション未指定時とは大小関係が逆転したりすることがあります。

データ種別

日本語データ（英数字項目や日本語項目※に日本語文字が格納されている場合など）

数字データ（集団項目の従属項目に，用途（USAGE句）がDISPLAY以外の数字項目（2進項目，内部10進項目，内部浮動小数点項目）がある場合など）

注※

AIX(32)，AIX(64)では，noApplyJpnItemサブオプションが無効の場合です。

比較結果

日本語データや数字データで，1バイトの印字できないコードでは，等しいと解釈されることがあります。
ただし，AIX(32)，AIX(64)では，Unprintableサブオプションが有効な場合は，コードの一致および不一致を判定できます。なお，Unprintableサブオプションが有効な場合でも，照合順序が切り替わることで，大小関係が-Switchオプション未指定時とは逆転することがあります。

日本語データや数字データ中の印字可能文字は，照合順序が切り替わることで，-Switchオプション未指定時とは大小関係が逆転することがあります。

(13)　-V3Recオプション

(a)　形式

-V3Rec,｛Fixed｜Variable｝
-noV3Rec

(b)　機能

メインフレーム（VOS3）COBOL85の固定長または可変長レコード形式のプログラムを，VOS3 COBOL85の日本語文字の扱いに合わせてコンパイルするためのオプションです。

-V3Rec,Fixed

VOS3 COBOL85の固定長レコード形式のCOBOL原始プログラムを，VOS3 COBOL85の日本語文字の扱いに合わせてコンパイルします。

-V3Rec,Variable

VOS3 COBOL85の可変長レコード形式のCOBOL原始プログラムを，VOS3 COBOL85の日本語文字の扱いに合わせてコンパイルします。

-V3Rec,Variableオプションは，-CompatiV3オプションと同時に指定できます。また，-CompatiV3オプションを指定すると，-V3Rec,Variableオプションが仮定されます。

-noV3Rec

-V3Recオプションの指定を打ち消します。

(c)　注意事項

-V3Recオプションと-EquivRuleオプションを重複指定した場合，あとに指定したオプションを優先します。

このオプションを指定した場合，このシステムの標準コードと拡張コードの等価規則は適用されません。また，日本語文字定数に標準コードの空白を書いてもエラーとはなりません。ただし，日本語文字定数に空白以外の標準コード文字を書けますが，警告レベルのエラーとなります。なお，日本語文字定数の標準コード文字数は偶数としてください。日本語文字定数の標準コード文字数が奇数の場合，警告レベルのエラーとし，日本語文字定数に標準コードの空白を追加します。

日本語空白は半角空白2個と等価とみなし，機能キャラクタが付加されたものとみなす対象としません。日本語空白を使用しているメインフレームの固定長形式の原始プログラムを-V3Rec,Fixedオプションを指定してコンパイルする場合は，カラムずれなどの影響がないか確認する必要があります。機能キャラクタについては，マニュアル「COBOL2002　言語　拡張仕様編　25.3.3(2) 文字集合」を参照してください。また，日本語空白を拡張コードとして扱いたいときは，-V3Recオプションと合わせて-V3RecFCSpaceオプションを指定してください。-V3RecFCSpaceオプションの詳細については，「(14)　-V3RecFCSpaceオプション（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）」を参照してください。

VOS3 COBOL85の固定長レコード形式の原始プログラムと可変長レコード形式の原始プログラムは，このオプションを指定したときだけコンパイルできます。
したがって，COPY文で複写した原始プログラムを含め，固定長レコード形式の原始プログラムと可変長レコード形式の原始プログラムは同時にコンパイルできません。

このオプションを指定した場合，72カラムより前に改行文字があるCOBOL原始プログラムは，改行文字から72カラムまで空白に置き換えてコンパイルされます。

このオプションは，自由形式正書法で書かれたCOBOL原始プログラムをコンパイルする場合には指定できません。指定した場合，エラーとなってコンパイルが中止されます。

このオプションを指定した場合，英数字定数の分離符には，アポストロフィ（'）だけが使用できます。

(14)　-V3RecFCSpaceオプション（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(a)　形式

-V3RecFCSpace
-noV3RecFCSpace

(b)　機能

-V3RecFCSpace

-V3Recオプションでの空白に関する機能キャラクタの扱いを，VOS3 COBOL85と同等にします。機能キャラクタが付加されたものとみなす条件については，「(d)　機能キャラクタが付加されたものとみなす条件」を参照してください。

-noV3RecFCSpace

-V3RecFCSpaceオプションの指定を打ち消します。

(c)　注意事項

-V3RecFCSpaceオプションの指定は，-V3Recオプションの指定が有効な場合にだけ有効となります。

(d)　機能キャラクタが付加されたものとみなす条件

このコンパイラは，-V3Recオプションの指定が有効な場合に，-V3RecFCSpaceオプションの有無で，空白に関する機能キャラクタの扱いが異なります。次の条件文中の太字の部分は，-V3RecFCSpaceオプションの有無での相違点です。

なお，これ以降「KEISコード開始」と「EBCDIKコード開始」を表す2バイトの機能キャラクタをそれぞれ，[漢]と[E]で表します。また，改行を[改行]で表します。

-V3RecFCSpaceオプション指定がない場合

日本語空白を除く日本語文字列の先頭文字の直前に[漢]が付加されたものとみなします。

直前に[漢]が付加されたものとみなした日本語文字列のあとに，最初に現れた半角空白以外の半角文字の直前に[E]が付加されたものとみなします。

[漢]が付加されたものとみなしたあとは，[E]が付加されたものとみなすまで，同じ行には[漢]が付加されたものとみなしません。

-V3RecFCSpaceオプション指定がある場合

日本語空白を含む日本語文字列の先頭文字の直前に[漢]が付加されたものとみなします。

直前に[漢]が付加されたものとみなした日本語文字列のあとに，最初に現れた半角空白以外の半角文字の直前に[E]が付加されたものとみなします。また，日本語文字列の直後が改行か日本語文字列と改行との間が半角空白だけのとき，日本語文字列の直後に[E]が付加されたものとみなします。

[漢]が付加されたものとみなしたあとは，[E]が付加されたものとみなすまで，同じ行には[漢]が付加されたものとみなしません。

-V3Recオプションの指定が有効な場合に，-V3RecFCSpaceオプションの有無での機能キャラクタが付加されたものとみなした状態を次の例に示します。

（例1）日本語空白に関する機能キャラクタの扱い

COBOL原始プログラム

000100 01△DATA1△PIC△N(5)△VALUE△N'▲あいう▲'.

-V3Rec,Fixedオプション指定ありで， -V3RecFCSpaceオプション指定がない場合

000100 01△DATA1△PIC△N(5)△VALUE△N'▲[漢]あいう▲[E]'.

-V3Rec,Fixedオプション指定ありで，-V3RecFCSpaceオプション指定がある場合

000100 01△DATA1△PIC△N(5)△VALUE△N'[漢]▲あいう▲[E]'.

（凡例）

▲：日本語空白

△：半角空白

-V3RecFCSpaceオプション指定がない場合，日本語空白を日本語文字列の先頭文字と扱いません。このため，日本語空白以外の先頭文字「あ」の直前に[漢]が付加されたものとみなします。また，直前に[漢]が付加されたものとみなした日本語文字列「あいう」のあとで最初に現れた半角空白以外の半角文字「'」の直前に[E]が付加されたものとみなします。

-V3RecFCSpaceオプション指定がある場合，日本語空白を日本語文字列の先頭文字と扱い，直前に[漢]が付加されたものとみなします。また，直前に[漢]が付加されたものとみなした日本語文字列「▲あいう▲」のあとで最初に現れた半角空白以外の半角文字「'」の直前に[E]が付加されたものとみなします。

（例2）空白と改行に関する機能キャラクタの扱い

COBOL原始プログラム

000100 01△DATA1△PIC△N(5)△VALUE△N'あいう△△[改行]
000200-'△△'.

-V3Rec,Fixedオプション指定ありで， -V3RecFCSpaceオプション指定がない場合

000100 01△DATA1△PIC△N(5)△VALUE△N'[漢]あいう△△[改行]
000200-'△△'.

-V3Rec,Fixedオプション指定ありで，-V3RecFCSpaceオプション指定がある場合

000100 01△DATA1△PIC△N(5)△VALUE△N'[漢]あいう[E]△△[改行]
000200-'△△'.

（凡例）

▲：日本語空白

△：半角空白

-V3RecFCSpaceオプション指定がない場合，日本語文字列「あいう」のあとには，半角空白以外の半角文字がないため[E]が付加されたものとみなしません。

-V3RecFCSpaceオプション指定がある場合，日本語文字列「あいう」と[改行]の間が半角空白だけであるため，日本語文字列「あいう」の直後に[E]が付加されたものとみなします。

(15)　-V3RecEasedオプション（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(a)　形式

-V3RecEased｛,QuoteCheck｜,WordCheck｝+
-noV3RecEased

(b)　機能

-V3RecEased,QuoteCheck

-CompatiV3または-V3Recオプションを指定したとき，定数の分離符のチェックを緩和します。

-V3RecEased,QuoteCheckオプションが有効な場合，-DoubleQuoteオプションに関係なく，定数の分離符は，アポストロフィ（'）と引用符（"）のどちらでも指定できます。

-V3RecEased,WordCheck

-CompatiV3または-V3Recオプションを指定したとき，語またはPICTURE文字列の制限値のチェックを緩和します。

-V3RecEased,WordCheckオプションが有効な場合，語またはPICTURE文字列の制限値を超えたときのコンパイルエラーを，重大エラーから警告エラーに緩和できます。

-noV3RecEased

-V3RecEasedオプションの指定を打ち消します。

(c)　注意事項

-V3RecEasedオプションと-V3Specオプションを同時に指定したとき，-V3RecEasedオプションの指定は無効になります。

-V3RecEasedオプションの指定は，-V3Recオプションの指定が有効な場合にだけ有効です。

-V3RecEased,QuoteCheckオプションの指定に関係なく，SQL文中の定数の分離符はアポストロフィ（'）だけ使用できます。

-V3RecEased,QuoteCheckオプションは，翻訳指令に対しても有効です。

(16)　-DoubleQuoteオプション

(a)　形式

-DoubleQuote
-noDoubleQuote

(b)　機能

-DoubleQuote

VOS3 COBOL85互換に関連するオプションである-V3Rec，-CompatiV3のどちらかを指定したときに，英数字定数の分離符として引用符（ " ）を用いることを指定するオプションです。このオプションを指定しないときは，アポストロフィ（ ' ）を分離符として用います。

-V3Recオプション，-CompatiV3オプションのどちらも指定していない場合は，-DoubleQuoteオプションを指定しても無効となります。この場合は，引用符（ " ），アポストロフィ（ ' ）のどちらも分離符として使用できます。

ただし，SQL文中の定数の分離符は，-DoubleQuoteオプションの指定に関係なく，常にアポストロフィ（ ' ）を使用します。

また，QUOTE表意定数は，-V3Recオプション，-CompatiV3オプションの指定に関係なく，-DoubleQuoteオプション指定時は引用符（ " ）を意味し，-DoubleQuoteオプション指定なしのときはアポストロフィ（ ' ）を意味します。

なお，このオプションは，翻訳指令に対しても有効となります。

-noDoubleQuote

-DoubleQuoteオプションの指定を打ち消します。

(17)　-BigEndianオプション（Linuxで有効）

(a)　形式

-BigEndian｛,Bin｜,Float｝+
-noBigEndian

(b)　機能

用途（USAGE句）が2進または浮動小数点のデータ項目の形式を，ビッグエンディアン形式にするためのオプションです。

-BigEndian,Bin

用途が2進（BINARY，COMP，COMP-4）のデータ項目の形式を，ビッグエンディアン形式にします。

このオプションを指定した場合，2進項目を演算などで参照すると，実行性能が劣化します。このため，必要のないかぎりこのオプションは指定しないでください。

-BigEndian,Float

用途が浮動小数点（COMP-1，COMP-2）のデータ項目の形式を，ビッグエンディアン形式にします。

このオプションを指定した場合，浮動小数点を演算などで参照すると，実行性能が劣化します。このため，必要のないかぎりこのオプションは指定しないでください。

-noBigEndian

-BigEndianオプションの指定を打ち消します。

(c)　注意事項

ビッグエンディアン形式とリトルエンディアン形式との違い

コンピュータで扱うバイナリ形式のデータ（2進データ，内部浮動小数点数字データ）には，ビッグエンディアン形式とリトルエンディアン形式の2種類があります。

これは，マイクロプロセッサのアーキテクチャの違いによるもので，システムによって採用されるエンディアン形式が異なります。システムごとのエンディアン形式を次に示します。

システム
エンディアン形式

Windows
Linux
リトルエンディアン

HP-UX(IPF)
HP-UX(IPF64)
AIX(32)
AIX(64)
Solaris(SPARC)
ビッグエンディアン

ビッグエンディアン形式とリトルエンディアン形式では，バイナリデータがメモリ上に配置されるときの順序が次の例のように逆になります。

（例）

10（=H'0000000A'）が4バイトのメモリに配置された場合の違い

ビッグエンディアン形式では左側から右側へ1バイトずつ配置されるのに対して，リトルエンディアン形式では右側から左側へ1バイトずつ配置されます。このため，ビッグエンディアン形式のシステムとリトルエンディアン形式のシステムで同じデータを扱う場合でも，参照のしかたによっては違った結果になることがあります。-BigEndianオプションは，このような場合にデータを正しく処理できるようにするために使用します。

-BigEndianオプションの使い方

リトルエンディアン形式のシステムで2進データをそのまま参照したり，リトルエンディアン形式のシステムで作成したファイルを参照したりする場合は，このオプションを指定する必要はありません。しかし，REDEFINES句などで英数字データを2進データとして参照したり，ビッグエンディアン形式のシステムで作られたファイル（可変長ファイルは対象外）を参照したりする場合は，ビッグエンディアン形式のシステムとリトルエンディアン形式のシステムで2進データ，内部浮動小数点数字データの表現形式が異なるため，このオプションを指定する必要があります。このオプションは次のような場合に指定してください。

ビッグエンディアン形式のシステム上で開発した2進データや内部浮動小数点数字データのメモリ上での配置を意識しているようなプログラムをリトルエンディアン形式のシステム上に移植する場合

ビッグエンディアン形式のシステム上で作成した2進データや内部浮動小数点数字データを含むファイルをそのままリトルエンディアン形式のシステム上へ移行し，リトルエンディアン形式のシステム上のプログラムで参照する場合

ビッグエンディアン形式のシステム上で開発したREDEFINES句でほかの形式のデータ項目を2進データとして参照するようなプログラムをリトルエンディアン形式のシステム上に移植する場合

使用上の注意

-BigEndianオプションの使用上の注意を次に示します。

C言語と連携している場合，-BigEndian,Binオプション指定時には，Cプログラムとインタフェースを取る2進データはCOMP-5で定義してください。

コマンド行に指定した引数を受け取る場合（16.2.2　引数の受け取り方法（C言語インタフェースに従った形式の場合）または16.2.3　引数の受け取り方法（VOS3インタフェースに従った形式の場合）を参照）-BigEndian,Bin指定時には，連絡節の2進データは，COMP-5で定義してください。

2進項目を引数とするサービスルーチンは，受け取る項目をCOMP-5で定義してください。

CALL文でLENGTH OF 一意名を指定した場合，呼び出し先プログラムは，受け取る項目をCOMP-5で定義してください。

HP-UX(IPF)，AIX(32)，またはSolaris(SPARC)でXMAP3を使用する場合は，XMAP3のオプションと合わせる必要があります。

索引ファイル，および整列併合機能で使用するキーデータ項目の2進データ項目は，リトルエンディアン形式でキーを大小比較します。このため，このオプションを指定したビッグエンディアン形式では，正常に動作できません。
キーデータ項目の2進データ項目はCOMP-5で定義するか，またはリトルエンディアン形式データとしてください。

(18)　-VOSCBLオプション（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(a)　形式

-VOSCBL｛,OccursKey｜,ReportControl｝+
-noVOSCBL

(b)　機能

メインフレーム互換機能を有効にします。

-VOSCBL,OccursKey

OCCURS句のKEY IS指定のデータ名の名前の有効範囲を，そのOCCURS句のある記述項または，それに従属する記述項とします。

OCCURS句のKEY IS指定のデータ名は，修飾してもその修飾は無視されます。

（例1）

      WORKING-STORAGE SECTION.
        01 DAT0.
          02 DAT1 PIC X.   ・・・・・・・・・・・・・・(1)
        01 DAT2.
          02 DAT3 OCCURS 10 ASCENDING KEY DAT1.  ・・・(2)
            03 DAT1  PIC X.      ・・・・・・・・・・・(3)
            03 DAT5  PIC X.

-VOSCBL,OccursKeyオプションの指定がある場合は，（2）のDAT1は修飾しなくても，（2）の従属項目として定義された（3）のDAT1が参照されます。

-VOSCBL,OccursKeyオプションの指定がない場合は，DAT1が（1）と（3）にあるため，名前が一意になりません。一意に参照するためには，（2）のDAT1を「OF DAT3」で修飾する必要があります。

（例2）

      WORKING-STORAGE SECTION.
        01 DAT0.
          02 DAT1 PIC X.     ・・・・・・・・・・・・・・・(1)
        01 DAT2.
          02 DAT3 OCCURS 10 ASCENDING KEY DAT1 OF DAT0.・・(2)
            03 DAT1  PIC X.      ・・・・・・・・・・・・・(3)
            03 DAT5  PIC X.

-VOSCBL,OccursKeyオプションの指定がある場合は，（2）のDAT1を修飾（OF DAT0）してもその修飾は無視されるため，（2）のDAT1は，（2）の従属項目として定義された（3）のDAT1が参照されます。

-VOSCBL,OccursKeyオプションの指定がない場合は，（2）のDAT1の修飾（OF DAT0）を無視されないため，（1）のDAT1が参照されます。しかし，KEY IS指定のデータ名は，OCCURS句のある記述項または，それに従属する記述項でなければなりません。
したがって，（1）のDAT1は（2）の従属項目でないため，（2）の修飾を「OF DAT3」に変更する必要があります。

-VOSCBL,ReportControl

制御脚書きの印刷中に改ページが起こった場合，ページの頭書きでSOURCE句によって制御用データ項目を参照しているときは，その制御用データ項目の値を元の値で参照します。

-noVOSCBL

-VOSCBLオプションの指定を打ち消します。

(c)　注意事項

このオプションは，-CompatiV3オプションと同時に指定してください。-CompatiV3オプションの指定がない場合は，エラーメッセージが出力されます。

次のオプションは-CompatiV3オプションを無効とするため，このオプションおよび-CompatiV3オプションと次のオプションを同時に指定しないでください。-CompatiV3オプションの指定が無効となり，Uレベルのエラーになります。
-StdMIA　-Std85　-Std2002

このオプションと-UniObjGenオプション，および-CompatiV3オプションを同時に指定する場合，-CompatiV3オプションが有効となるよう，コンパイラ環境変数CBLV3UNICODEを指定してください。

(19)　-PortabilityCheckオプション（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

メインフレームから移行する場合，ユーザが注意すべき個所にお知らせメッセージ（Iレベルメッセージ）を出力し，ユーザの移行作業を支援します。このオプションを指定すると，COBOL2002とメインフレームで動作の異なる可能性がある個所を対象に，お知らせメッセージを出力します。

なお，このオプションは，Sレベル以上のエラーがないプログラムに適用してください。Sレベル以上のエラーがあるプログラムで適用した場合の動作は，保証しません。

(a)　形式

-PortabilityCheck｛,Literal｜,Numeric｝+
-noPortabilityCheck

(b)　機能

-PortabilityCheck,Literal

-UniObjGenオプション指定時，英数字定数および日本語文字定数中の日本語または半角かたかなにお知らせメッセージを出力します。

次に示す16進定数にお知らせメッセージを出力します。
16進英数字定数，16進数字定数，16進日本語文字定数

-PortabilityCheck,Numeric

RECORD KEY句，ALTERNATE RECORD KEY句の2進項目，内部浮動小数点項目にお知らせメッセージを出力します。

浮動小数点の演算が発生する個所にお知らせメッセージを出力します。
浮動小数点の演算が発生する個所は次を対象とします。

算術式，算術文に指定された浮動小数点項目や浮動小数点定数
算術式が記述できる場所に書かれた単項の浮動小数点項目や浮動小数点定数も含みます。
ただし，受け取り項目など，演算に関係しない浮動小数点項目は除外します。

べき乗の場合，べき数に指定されたデータ項目および算術式が小数点を持つ場合，または，べき数が小数点を含む数字定数である場合

次の組み込み関数
ACOS，ASIN，ATAN，COS，LOG，LOG10，MOD，RANDOM，REM，SIN，SQRT，STANDARD-DEVIATION，TAN，VARIANCE

次のどれかが引数に指定されている組み込み関数
浮動小数点項目※，べき乗が含まれる算術式，または除算が含まれる算術式
注※
　ADDR関数，およびLENGTH関数を除きます。

-noPortabilityCheck

-PortabilityCheckオプションの指定を打ち消します。

(20)　-IgnoreAPPLY,FILESHAREオプション（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(a)　形式

-IgnoreAPPLY,FILESHARE
-noIgnoreAPPLY

(b)　機能

-IgnoreAPPLY,FILESHARE

入出力管理記述項のAPPLY FILE-SHARE句を覚え書きとみなします。覚え書きとみなしたときは，コンパイル時にお知らせメッセージを出力します。

-noIgnoreAPPLY

-IgnoreAPPLYオプションの指定を打ち消します。

(21)　-Internationalオプション

(a)　形式

-International
-noInternational

(b)　機能

-International

インターナショナリゼーション機能を使用するときに指定します。インターナショナリゼーション機能の適用範囲は，ロケールが日本語または英語に対応するときだけです。インターナショナリゼーション機能を使用すれば，通貨記号を自動的に変換できます。

-noInternational

-Internationalオプションの指定を打ち消します。

(22)　-EucPositionオプション（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC)で有効）

(a)　形式

-EucPosition
-noEucPosition

(b)　機能

-EucPosition

EUCコード使用時，見かけ上の文字位置で固定形式正書法の境界を決定するときに指定します。このオプションを指定した場合の半角かたかな文字の扱いは，正書法の境界を決定するときには見かけ上の1バイトとして扱われますが，文字定数中の半角かたかな文字は2バイトとして扱われます。

-noEucPosition

-EucPositionオプションの指定を打ち消します。

(c)　注意事項

-EucPositionオプションは，EUCコード使用時，固定形式正書法のCOBOLソースファイルに対してだけ有効です。

-EucPositionオプションを指定した場合，次の項目中に3バイトコード文字は使用できません。

COBOLソースファイル，および登録集原文中

COBOLソースファイルのファイル名

カレントディレクトリ，およびCOBOLソースファイルがあるディレクトリのパス名

登録集名の環境変数，および環境変数CBLLIBに指定したディレクトリのパス名

環境変数CBLFIX，および環境変数CBLFREEに指定したサフィックス名

32.5.13　リスト出力の設定

リスト出力を設定するコンパイラオプションについて，説明します。

＜この項の構成＞

(1)　-SrcListオプション

(2)　-ErrSupオプション

(1)　-SrcListオプション

(a)　形式

-SrcList,｛OutputAll｜CopyAll｜CopySup｜NoCopy｝〔,NoFalsePath〕〔,DataLoc〕
-noSrcList

注※

DataLocサブオプションは，HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効です。

(b)　機能

コンパイルリストの出力形式を指定するオプションです。このオプションを指定しなかった場合，コンパイルリストは，出力されません。

出力されるリストの内容については，「付録C　コンパイルリスト」を参照してください。また，コンパイルリストに関連する翻訳指令については，「2.3.4　コンパイルリストに関連する翻訳指令」を参照してください。

-SrcList,OutputAll

すべての情報を出力します。

原始プログラム中に，COPY文のSUPPRESS指定やLISTING OFF指令がある場合でも，すべてのソースをコンパイルリストに展開します。

-SrcList,CopyAll

SUPPRESS指定を無視して，すべてのCOPY文を強制的に展開します。

-SrcList,CopySup

プログラムにSUPPRESS指定があるときだけ，COPY文の展開を抑止します。SUPPRESS指定がないCOPY文は，すべて展開します。

-SrcList,NoCopy

すべてのCOPY文の展開を抑止します。

-SrcList,xxxxx,NoFalsePath

条件翻訳の無効行を出力しません。

xxxxxには，CopyAll，CopySup，NoCopyのどれかを指定します。

-SrcList,OutputAll,NoFalsePathと指定した場合は，OutputAllサブオプションが有効となり，NoFalsePathサブオプションは無効になります。

-SrcList,xxxxx,DataLoc（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

コンパイルリスト（原始プログラムリスト）にデータ項目の相対位置と長さ（バイト）を16進数で表示します。相対位置は，データ部のファイル節／作業場所節／局所場所節の各節の先頭からの位置を表示します。

xxxxxには，OutputAll，CopyAll，CopySup，NoCopyのどれかを指定します。

Sレベル／Uレベルのコンパイルエラーが発生した場合は，指定があっても相対位置は表示しません。なお，相対位置の表示については，「付録C.2　リストの見方」の「(4)　相対位置表示時の原始プログラムリスト（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）」を参照してください。

-noSrcList

-SrcListオプションの指定を打ち消します。

(c)　注意事項

NoFalsePathサブオプションまたは，DataLocサブオプションを指定した場合，-noSrcListオプションの指定がないかぎり，NoFalsePathサブオプション，およびDataLocサブオプションの指定は有効となります。

NoFalsePathサブオプション，およびDataLocサブオプションの指定を打ち消すときは，-noSrcListオプションを指定してください。

（例1） NoFalsePathサブオプション，およびDataLocサブオプション指定が打ち消されない場合

ccbl2002 -SrcList,OutputAll,NoFalsePath,DataLoc,-SrcList,CopyAll …

（コンパイル結果）

-SrcList,CopyAll,NoFalsePath,DataLoc

ccbl2002 -SrcList,OutputAll,NoFalsePath -SrcList,CopySup -SrcList,CopyAll,DataLoc

-SrcList,CopySup -SrcList,CopyAll …

（コンパイル結果）

-SrcList,CopyAll,NoFalsePath,DataLoc

（例2）NoFalsePathサブオプション，およびDataLocサブオプション指定が打ち消される場合

ccbl2002 -SrcList,CopySup,NoFalsePath,DataLoc,-noSrcList -SrcList,CopyAll …

（コンパイル結果）

-SrcList,CopyAll

(2)　-ErrSupオプション

(a)　形式

-ErrSup｛,I｜,W｝+
-noErrSup

(b)　機能

コンパイル時にIレベルまたはWレベルメッセージの出力を抑止します。

-ErrSup,I

コンパイル時にIレベル（お知らせ）メッセージの出力を抑止します。

-ErrSup,W

コンパイル時にWレベル（警告）メッセージの出力を抑止します。

-noErrSup

-ErrSupオプションの指定を打ち消します。

(c)　注意事項

-ErrSup,Wオプションを指定した場合，利用者が注意する必要があるエラー（コンパイラによる解釈の変更や，中間結果けた数制限の適用など）の出力が抑止されます。このため，必要な場合以外は，-ErrSup,Wオプションを指定しないようにしてください。

-ErrSupオプションを指定してエラーメッセージの出力を抑止した場合，標準エラーおよびコンパイルリストにも，該当レベルのエラーが出力されません。

抑止されたエラーメッセージは，コンパイルリストに出力されるエラー件数にはカウントされません。

コマンドライン上の記述誤りに対するWレベルメッセージは，抑止されません。

32.5.14　その他の設定

その他のコンパイラオプションについて，説明します。

＜この項の構成＞

(1)　-Bin1Byteオプション

(2)　-JPNオプション（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC)で有効）

(3)　-EquivRuleオプション

(4)　-UscoreStartオプション

(5)　-BinExtendオプション

(6)　-MinusZeroオプション

(7)　-TruncCheckオプション

(8)　-LowerAsUpperオプション

(9)　-CBLVALUEオプション

(10)　-Repositoryオプション

(11)　-RepositoryCheckオプション

(12)　-Defineオプション

(13)　-Detailsオプション

(14)　-OldFormオプション

(15)　-Helpオプション

(16)　-Profileオプション

(17)　-UniObjGenオプション（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(18)　-UniEndianオプション（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(19)　-Lx64ConventionCheckオプション（Linux(x64)で有効）

(20)　-ExternRefオプション（Solaris(SPARC)で有効）

(21)　-MaxDigits38オプション（HP-UX(IPF64)，AIX(64)，Linux(x64)で有効）

(22)　-IntResult,DecFloat40オプション（HP-UX(IPF64)，AIX(64)，Linux(x64)で有効）

(23)　-LiteralExtendオプション（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(24)　-SpaceAsZeroオプション（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(1)　-Bin1Byteオプション

(a)　形式

-Bin1Byte
-noBin1Byte

(b)　機能

-Bin1Byte

1バイトの2進項目を有効にします。

-noBin1Byte

-Bin1Byteオプションの指定を打ち消します。

(2)　-JPNオプション（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC)で有効）

(a)　形式

-JPN,｛Alnum｜V3JPN｜V3JPNSpace｝
-noJPN

(b)　機能

-JPN,Alnum

日本語項目，日本語編集項目，および日本語文字定数をそれぞれ英数字項目，英数字編集項目，および英数字定数として扱います。

これは，VOS3 COBOL85のLANGOPT=(-D)オプションとXCOBOL=(N)オプションを同時に指定したときと同じ動作になります。

なお，-CompatiV3オプションを指定すると，このオプションが仮定されます。

-JPN,V3JPN

日本語項目，日本語編集項目，および日本語文字定数をそれぞれ英数字項目，英数字編集項目，および英数字定数として扱うようにするためのオプションです。ただし，LENGTH関数の引数※，STRING文，UNSTRING文，またはINSPECT文では日本語項目，日本語編集項目，および日本語文字定数はそのままの属性として扱います。

また，日本語項目または日本語編集項目の部分参照は，英数字項目または英数字編集項目として扱いますが，最左端の文字位置と長さは日本語文字数を表します。これは，VOS3 COBOL85のLANGOPT=(-D)オプションとXCOBOL=(-N)オプションを同時に指定したときと同じ動作になります。

注※

VOS3 COBOL85では，LENGTH関数の引数に日本語項目，日本語編集項目，および日本語文字定数は指定できません。

-JPN,V3JPNSpace（AIX(32)，AIX(64)で有効）

-CompatiV3オプションと同時に指定した場合，日本語項目，日本語編集項目および日本語文字定数をそのままの属性で扱います。これは，VOS3 COBOL85のLANGOPT=(D)オプションとXCOBOL=(-N)オプションを同時に指定したときと同じ動作になります。

VOS3 COBOL85でLANGOPT=(D)オプションを指定した場合とCOBOL2002での動作の相違については，マニュアル「COBOL2002　言語　拡張仕様編　付録B LANGOPT=(D)オプションと-JPN,V3JPNSpaceオプションを指定した場合の仕様の相違」を参照してください。

このオプションを指定してコンパイルすると，日本語項目および日本語編集項目に対して，次に示すとおりに扱います。

表意定数SPACE（SPACES）の扱い
日本語項目および日本語編集項目に対する表意定数SPACE（SPACES）は，日本語空白（X'8140'）となります。

日本語項目および日本語編集項目同士の転記の扱い
日本語項目および日本語編集項目同士の転記で，受け取り側のけた数が送り出し側のけた数より長い場合，受け取り側の右側に日本語空白（X'8140'）を補います。

日本語項目および日本語編集項目同士の比較の扱い
日本語項目および日本語編集項目同士の比較で，作用対象のけた数が等しくない場合，短い方の作用対象の右側に，長い方の作用対象のけた数に等しくなるまで日本語空白（X'8140'）があるものとみなして比較します。

-noJPN

-JPNオプションの指定を打ち消します。

(c)　注意事項

-JPN,Alnumオプションと-JPN,V3JPNオプションを重複して同時に指定した場合，-JPN,V3JPNオプションが有効になり，-JPN,Alnumオプションが無効になります。

コンパイラ環境変数CBLV3UNICODEにYESを指定し，かつ-UniObjGenオプションを指定すると，-CompatiV3オプションを指定しても-JPN,Alnumオプションは仮定されません。

-JPN,V3JPNSpaceオプションを指定するとき，-CompatiV3オプションを同時に指定する必要があります。-CompatiV3オプションの指定がない場合，コンパイルエラーとなります。

-JPN,V3JPNSpaceオプションと-JPN,Alnumオプション，-JPN,V3JPNオプションを同時に指定すると，-JPN,Alnumオプション，-JPN,V3JPNオプションは無効となります。
また，-JPN,V3JPNSpaceオプションと-CompatiV3オプションを同時に指定すると，-CompatiV3オプションが仮定する-JPN,Alnumオプションは無効となります。

-JPN,V3JPNSpaceオプションと-UniObjGenオプションを同時に指定すると，-JPN,V3JPNSpaceオプションは無効となります。

-JPN,Alnumオプションを指定するとき，動的長基本項目はすべて字類を英数字として扱います。また，PIC Nが指定された動的長基本項目のLIMIT指定の値は，その2倍の値が指定されたものと仮定します。

(3)　-EquivRuleオプション

(a)　形式

-EquivRule,｛NotExtend｜NotAny｜StdCode｝
-noEquivRule

(b)　機能

拡張コード文字と標準コード文字を等価とみなさないようにするためのオプションです。

標準コードおよび拡張コードについては，マニュアル「COBOL2002　言語　標準仕様編　付録I 用語の定義（Terms and Definitions）」を参照してください。

-EquivRule,NotExtend

拡張コード文字と標準コード文字を等価とみなしません。

-EquivRule,NotAny

拡張コード文字と標準コード文字を等価とみなしません。さらに，標準コードの英大文字と標準コードの英小文字も等価とみなしません。

この場合，予約語および文脈依存語はすべて標準コードの英大文字で記述してください。

-EquivRule,StdCode

拡張コード文字と標準コード文字を等価とみなしません。さらに，日本語文字定数中に標準コードの空白を書いてもエラーとしません。ただし，日本語文字定数中に空白以外の標準コード文字を書いた場合は，警告レベルのエラーとなります。なお，日本語文字定数の標準コード文字数は偶数としてください。日本語文字定数の標準コード文字数が奇数の場合，警告レベルのエラーとし，日本語文字定数に標準コードの空白を追加します。

また，72カラムより前に改行文字があるCOBOL原始プログラムは，改行文字から72カラムまでを空白に置き換えてコンパイルします。

-noEquivRule

-EquivRuleオプションの指定を打ち消します。

(4)　-UscoreStartオプション

(a)　形式

-UscoreStart
-noUscoreStart

(b)　機能

-UscoreStart

先頭が下線のCALL定数を指定できるようにします。

先頭が下線のプログラム名をCALL定数で指定した場合，定数の先頭から'_'または'__'（下線2個）を除いた名称でプログラムを呼び出します。

-noUscoreStart

-UscoreStartオプションの指定を打ち消します。

(5)　-BinExtendオプション

(a)　形式

-BinExtend
-noBinExtend

(b)　機能

-BinExtend

用途（USAGE句）が2進（BINARY，COMP，COMP-4）のデータ項目に指定できる初期値（VALUE句の値）を拡張します。

PICTURE句で指定したけた数とVALUE句に指定できる値との対応は次のとおりです。

PICTURE句で指定したけた数 | VALUE句に指定できる値
1～4けた | -2¹⁵～2¹⁵-1
5～9けた | -2³¹～2³¹-1
10～18けた | -999,999,999,999,999,999～999,999,999,999,999,999

-noBinExtend

-BinExtendオプションの指定を打ち消します。

(6)　-MinusZeroオプション

(a)　形式

-MinusZero
-noMinusZero

(b)　機能

符号付き内部10進項目または符号付き外部10進項目への転記で切り捨てが発生した結果，負の符号を持つゼロ（以下，-0と表記します）が発生することがあります。この-0は演算や比較で数値として参照する場合は，正の符号を持つゼロ（以下，+0と表記します）と同じに扱われ，プログラムの動作には影響しません。しかし，DISPLAY文で表示したり，上位の集団項目で参照したり，REDEFINES句で別の属性として参照した場合に，実行結果が異なることがあります。-MinusZeroオプションは，符号付き内部10進項目および符号付き外部10進項目に，ほかのデータ項目の値や演算結果を転記する場合に発生した-0を強制的に+0に変換して，-0の発生を防止するオプションです。他システムや他社のCOBOLとのデータの互換性や移行性が向上します。

（例1）

      01 A PIC S9(5) USAGE DISPLAY.
      01 B PIC S9(5) USAGE DISPLAY VALUE 0.
          COMPUTE A = B - 0.1.

右辺の式の結果は-0.1になり，それをAに格納する際に，小数部が切り捨てられて-0となる。※-MinusZeroオプションを指定すると，-0が+0に変換されてAに格納される。

注※

ただし，演算結果が必ず-0になるとは限りません。

（例2）

      01 A PIC S9(4) USAGE DISPLAY.
      01 B PIC S9(5) USAGE DISPLAY VALUE -10000.
          MOVE B TO A.

Aに格納する際に，10,000の最上位けたの1が切り捨てられて-0となる。

-MinusZeroオプションを指定すると，-0が+0に変換されてAに格納される。

-MinusZero

負の符号を持つゼロ（-0）を強制的に正の符号を持つゼロ（+0）に変換します。

-noMinusZero

-MinusZeroオプションの指定を打ち消します。

(c)　注意事項

-MinusZeroオプションは，符号付き外部10進項目への転記および符号付き内部10進項目への転記に対してだけ有効です。したがって，-MinusZeroオプションを指定していても，REDEFINES句や集団項目名で，10進項目を10進項目以外の項目として転記した場合，-0（例えば，内部10進数3けたの場合にはX'000D'）がそのまま転記されます。

(7)　-TruncCheckオプション

(a)　形式

-TruncCheck〔,Binary〕
-noTruncCheck

(b)　機能

-TruncCheck

転記での送り出し側作用対象のサイズをチェックします。

送り出し側作用対象のけた数が受け取り側作用対象のけた数より大きい場合は，メッセージが出力されます。

-TruncCheck,Binary

-TruncCheckオプションのチェックに加え，送り出し側作用対象が2進項目で，受け取り側作用対象が外部10進項目／内部10進項目のとき，送り出し側作用対象の2進項目は格納可能な最大けた数でチェックします。

-noTruncCheck

-TruncCheckオプションの指定を打ち消します。

(c)　-TruncCheckオプションのチェック対象

-TruncCheckオプションは，次の項目について，転記での送り出し側作用対象のサイズをチェックします。

チェック対象となる項目

外部10進項目

内部10進項目

2進項目（1バイト2進項目を含む）

数字定数（16進数字定数を含む）

固定長集団項目

英数字項目

英数字定数（16進英数字定数を含む）

ALL英数字定数

数字型，整数型，または英数字型の，組み込み関数※および利用者定義関数

注※

送り出し側が英数字型の組み込み関数で，かつ次に示す条件の場合はチェックしません。

引数が部分参照されていて，長さが可変である。
長さが可変になるのは次のどちらかのときです。
・部分参照の長さがデータ名指定である
・部分参照の開始位置がデータ名指定で，長さが省略されている

組み込み関数がMAX関数またはMIN関数で，データ名の引数が複数指定されている。

組み込み関数がTRIM関数またはSUBSTRING関数である。

チェック対象となる転記の個所

VALUE句

画面節（WINDOW SECTION）のSOURCE句※2

ACCEPT文の書き方2（日付と時刻を取得するACCEPT文）

INITIALIZE文のREPLACING指定

MOVE文

READ文のINTO指定

RELEASE文のFROM指定

RETURN文のINTO指定

SET文の書き方4（条件設定のSET文）

WRITE文のFROM指定

COMPUTE文（送り出し側作用対象が単一の数字項目や数字定数の場合）

上記以外の算術文（中間結果のけた数※¹が受け取り側作用対象のけた数より大きい場合※3）

注※1

中間結果のけた数については，「5.2.4　演算の中間結果」を参照してください。

注※2

HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Solaris(SPARC)で有効です。

注※3

HP-UX(IPF64)，AIX(64)，Linux(x64)の場合，-MaxDigits38オプションおよび-IntResult,DecFloat40オプションを指定しているときは，常に中間結果のけた数の方が大きいと判定します。

受け取り側作用対象が英数字の場合

受け取り側作用対象が固定長集団項目のときはバイト数で比較されます。

送り出し側作用対象が数字で，受け取り側作用対象が英数字のときは，送り出し側作用対象はけた数（小数けたを含む）で比較します。

-H8Switchオプションが指定してあり，送り出し側作用対象が数字で受け取り側作用対象が英数字のときは，数字項目はバイト数で比較されます。

受け取り側作用対象が数字の場合

整数けた数で比較します。

次のすべての条件を満たすときはチェックしません。
・-DigitsTruncオプションの指定がある
・-MaxDigits38オプションおよび-IntResult,DecFloat40オプションを指定していない（HP-UX(IPF64)，AIX(64)，Linux(x64)）
・受け取り側作用対象が2進項目である
・VALUE句の転記ではない

送り出し側作用対象が18けた※を超える英数字項目のときはチェックしません。

注※

HP-UX(IPF64)，AIX(64)，Linux(x64)の場合，-MaxDigits38オプションおよび-IntResult,DecFloat40オプションを指定しているときは，38けたとなります。

送り出し側が2進項目で，受け取り側が外部10進項目／内部10進項目の場合の規則（-TruncCheck,Binaryオプション指定時のチェック項目）

整数けた数の比較で，送り出し側作用対象のけた数が大きいときは，メッセージを出力します（-TruncCheckと同じチェック）。

整数けた数の比較で，送り出し側作用対象のけた数が大きくなく，次に示す2進項目に格納可能な最大けた数が，受け取り側作用対象の整数けた数より大きいときは，メッセージを出力します（-TruncCheck,Binary固有のチェック）。

PICTURE句のけた数※1
2進項目に格納できる最大けた数※2

1～2けた
5けた
（-Bin1Byte指定時は3けた）

3～4けた
5けた

5～9けた
10けた

10～18けた
19けた

注※1

整数部と小数部のけた数の合計値です。

注※2

小数部があるときは，小数部のけた数を除いたけた数です。

（例）

01 A PIC 9(4)V9(2) COMP.

上記の場合，整数部と小数部のPICTURE句のけた数の合計値は6けたになります。2進項目ではPICTURE句のけた数6けたで格納できる最大けた数は，10けたになりますが，これから小数部のけた数2を除いた8けたを使用します。

-TruncCheckオプションと-TruncCheck,Binaryオプションの相違点

次に-TruncCheckオプションと-TruncCheck,Binaryオプションの相違点を示します。

項目 | -TruncCheck | -TruncCheck,Binary
MOVE B5 TO E6※ | ノーエラー | お知らせのメッセージを出力する
MOVE B6 TO E6※ | ノーエラー | お知らせのメッセージを出力する
MOVE B7 TO E6※ | お知らせのメッセージを出力する | お知らせのメッセージを出力する

注※

      01 B5  PIC 9(5) COMP.
      01 B6  PIC 9(6) COMP.
      01 B7  PIC 9(7) COMP.
      01 E6  PIC 9(6).

(8)　-LowerAsUpperオプション

(a)　形式

-LowerAsUpper
-noLowerAsUpper

(b)　機能

-LowerAsUpper

CALL定数の英小文字を英大文字に変換した名称でプログラムを呼び出します。

-noLowerAsUpper

-LowerAsUpperオプションの指定を打ち消します。

(9)　-CBLVALUEオプション

(a)　形式

-CBLVALUE
-noCBLVALUE

(b)　機能

-CBLVALUE

環境変数CBLVALUEを有効にするためのオプションです。

環境変数CBLVALUEの詳細については，「32.6.3　コンパイラ環境変数の詳細」の「(15)　CBLVALUE」を参照してください。

-noCBLVALUE

-CBLVALUEオプションの指定を打ち消します。

(10)　-Repositoryオプション

(a)　形式

-Repository,｛Gen｜Sup｝
-noRepository

(b)　機能

-Repository,Gen

ソースファイルからリポジトリファイルを作成するときに指定します。この場合，オブジェクトファイルは作成されません。

なお，翻訳単位（プログラム定義を除く）が未完成でも，シグニチャと呼ばれるインタフェース部分が決まっていれば，リポジトリファイルを作成できます。詳細は，「33.3.2　リポジトリファイルの単独生成」を参照してください。

注意事項

クラス定義，インタフェース定義，および関数定義が一つも格納されていないファイルに-Repository,Genオプションを指定した場合，オプションの指定が無効となります。

-Repository,Genオプションと-Compileオプションが同時に指定された場合，-Repository,Genオプションが有効になり，-Compileオプションが無効になります。

-Repository,Sup

リポジトリファイルを更新しません。

ただし，リポジトリファイルがない場合は，新規に作成します。

また，オブジェクトファイルは，生成されます。

-noRepository

-Repositoryオプションの指定を打ち消します。

(11)　-RepositoryCheckオプション

(a)　形式

-RepositoryCheck
-noRepositoryCheck

(b)　機能

-RepositoryCheck

同じソースファイル中の翻訳単位の定義と外部リポジトリ中の情報に相違があるかどうかをチェックし，相違がある場合には警告メッセージを出力します。-RepositoryCheckオプションを指定した場合，リポジトリファイルは更新されません。

詳細は，「33.2.3　リポジトリファイルの生成方法」を参照してください。

-noRepositoryCheck

-RepositoryCheckオプションの指定を打ち消します。

(12)　-Defineオプション

(a)　形式

-Define 翻訳変数名〔=値〕〔,翻訳変数名〔=値〕〕…
-noDefine

(b)　機能

-Define 翻訳変数名〔=値〕〔,翻訳変数名〔=値〕〕…

翻訳変数名（条件翻訳で，ソース行の取り込みや読み飛ばしを制御する変数の名称）を定義します。

詳細は，「32.3.3　条件翻訳の利用」を参照してください。

-noDefine

-Defineオプションの指定を打ち消します。

(c)　注意事項

翻訳変数名は，31文字まで指定できます。32文字以上の文字列を指定した場合，コンパイル時に警告メッセージが出力され，先頭の31文字だけが翻訳変数名として有効となります。

翻訳変数名は，-Defineオプションに指定した文字列がそのまま使われます。この文字列には，COBOLの語の等価変換が適用されません。
-Defineオプションで定義した英小文字の翻訳変数名をCOBOLプログラム中で参照するには，-EquivRule,NotAnyオプションの指定が必要です。

翻訳変数の値は，160バイトまで指定できます。161バイト以上の文字列を指定した場合，コンパイル時に警告メッセージが出力され，先頭の160バイトだけが翻訳変数の値として有効となります。

翻訳変数名で使用できる文字は，COBOLの語で使用できる文字と同じです。ただし，コンパイラオプションの区切り文字となるイコール（=），コンマ（,）および半角空白文字は，指定できません。

翻訳変数の値を指定する場合の注意事項を，次に示します。

翻訳変数に指定した値は，すべて英数字定数として扱われます。
（例1）
　コンパイラオプションに，-Define VER=3 を指定したとき，ソース中に
　>>IF VER = '3'
　という記述があれば，上記条件が真となる。
（例2）
　コンパイラオプションに，-Define VER=5 を指定したとき，ソース中に
　>>IF VER = '3'
　という記述があれば，上記条件が偽となる。

コンパイラオプションの区切り文字となるイコール（=），コンマ（,）は，指定できません。

文字列内に区切り文字（空白）を指定するときは，値全体をアポストロフィ（'）で囲む必要があります。このとき，アポストロフィは値として扱われません。
（例）
　-Define DEF01='aaa bbb'
　翻訳変数名：DEF01
　値　　　　：aaa bbb

-Defineオプションで定義した英小文字の翻訳変数名をCOBOLプログラム中で参照するには，-EquivRule,NotAnyオプションを指定する必要があります。

プログラムに記述した文字コードと同じ文字コードで，翻訳変数名および翻訳変数の値を指定する必要があります。
なお，Linux(x86)，Linux(x64)の場合，プログラムに記述した文字コードとコマンドライン引数の文字コードが異なるため，翻訳変数名および翻訳変数の値にUnicodeで多バイトとなる文字は含まないでください。多バイト文字を含む場合，指定した定義が有効になりません。

(13)　-Detailsオプション

(a)　形式

-Details
-noDetails

(b)　機能

-Details

コンパイラオプションの詳細情報を標準エラー出力（stderr）へ出力します。

出力形式は，次のようになります。

形式

COBOL2002インストールディレクトリ/bin/ccbl2002: ccbl2002オプション群　COBOLソースファイル名群

ccbl2002オプション群

ccbl2002コマンドが認識するオプションがすべて出力されます。ほかのオプションを指定したために仮定されたオプションも出力されます。反対に，ほかのオプションを指定したために無視されたオプションは出力されません。オプションの引数を指定した場合は，オプションの引数も出力されます。

COBOLソースファイル名群

コンパイル対象のCOBOLソースファイル名がすべて出力されます。

（例）

入力

ccbl2002 -TDInf -SrcList,CopyAll -SimSub PROG1 -Details sample1.cbl

出力

COBOL2002インストールディレクトリ/bin/ccbl2002: ccbl2002 -DebugInf -TDInf -SrcList,CopyAll -Details -Optimize,1 -SimSub PROG1 -Main,System sample1.cbl

注

COBOL2002インストールディレクトリは，OSによって異なります。

UNIX32，Linux(IPF64)の場合

/opt/HILNGcbl2k

HP-UX(IPF64)，AIX(64)，Linux(x64)の場合

/opt/HILNGcbl2k64

-noDetails

-Detailsオプションの指定を打ち消します。

(14)　-OldFormオプション

(a)　形式

-OldForm '旧オプションの並び'

(b)　機能

-OldForm '旧オプションの並び'

旧形式のオプション（UNIX　COBOL85用のコンパイラオプション）を指定できるようにします。

(c)　注意事項

-OldFormオプションはアポストロフィ（'）で囲んで指定します。
指定例を，次に示します。

-OldForm '-P3 -v -Mw sample.cbl'

-OldFormオプションに指定する旧オプションの並びに，旧オプションの引数ではない単独ファイル名を指定した場合，そのファイル名は無視されます。ただし，旧オプションの引数として指定したファイル名については，有効となります。
指定例を，次に示します。

-OldForm '-Mw sample.cbl subsample.cbl'

sample.cblは，-Mwオプションの引数として有効となりますが，subsample.cblは旧オプションの引数でない単独のファイル名のため，無視されます。

(15)　-Helpオプション

(a)　形式

-Help

(b)　機能

ccbl2002コマンドのヘルプを表示します。

(c)　注意事項

-Helpオプションを指定した場合，ほかのオプションやファイル名を指定しても無視されます。

このオプションは，コマンドライン（ccbl2002コマンド）で指定できます。

(16)　-Profileオプション

(a)　形式

-Profile,｛Prof｜Gprof｝
-noProfile

(b)　機能

-Profile,Prof（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Solaris(SPARC)で有効）

profでのプロファイル用オブジェクトファイルを作成します。profの詳細については，システムのマニュアルを参照してください。

-Profile,Gprof

gprofでのプロファイル用オブジェクトファイルを作成します。gprofの詳細については，システムのマニュアルを参照してください。

-noProfile

-Profileオプションの指定を打ち消します。

(c)　注意事項

プロファイリング（実行回数および実行時間の分析）の対象になるのは，プログラム，利用者定義関数，メソッド，およびプロパティメソッドです。それぞれ，次の名前でプロファイル情報が出力されます。nは，オブジェクトモジュール内で名前を一意にするためにつけられた番号です。

HP-UX(IPF)，HP-UX(IPF64)，Solaris(SPARC)の場合

最外側のプログラム：プログラム名（ただし，-Mainコンパイラオプションが適用された最外側のプログラムはmain）

入れ子のプログラム：$最外側プログラム名$n$_入れ子のプログラム名

利用者定義関数：利用者定義関数名

メソッド：$クラス名$n$_メソッド名

GETプロパティメソッド：$クラス名$n$_GET$プロパティ名

SETプロパティメソッド：$クラス名$n$_SET$プロパティ名

Linux(x86)，Linux(x64)の場合

最外側のプログラム：プログラム名（ただし，-Mainコンパイラオプションが適用された最外側のプログラムはmain）

入れ子のプログラム：_最外側プログラム名_n_入れ子のプログラム名

利用者定義関数：利用者定義関数名

メソッド：_クラス名_n_メソッド名

プロパティメソッド：プロファイル対象外

Linux(IPF64)の場合

最外側のプログラム：プログラム名（ただし，-Mainコンパイラオプションが適用された最外側のプログラムはmain）

利用者定義関数：利用者定義関数名

その他：プロファイル対象外

AIX(32)，AIX(64)の場合

最外側のプログラム：.プログラム名（ただし，-Mainコンパイラオプションが適用された最外側のプログラムは.main）

入れ子のプログラム：.最外側プログラム名.n._入れ子のプログラム名

利用者定義関数：.利用者定義関数名

メソッド：.クラス名.n._メソッド名

GETプロパティメソッド：.クラス名.n._GET$プロパティ名

SETプロパティメソッド：.クラス名.n._SET$プロパティ名

COBOLプログラムがCOBOL実行時ライブラリを使って実装されている機能を使用している場合，プログラムの実行時間の情報には実行時ライブラリの実行時間は含まれません。純粋にプログラムのオブジェクトコードの実行時間だけが対象となります。

AIX(32)，AIX(64)，Linux，Solaris(SPARC)の場合，ENTRY文で指定した入口点に対しては，呼び出し回数に関する情報は，それぞれの入口点ごとに作成されます。しかし，実行時間の情報に関しては，ENTRY文に指定した入口点が呼び出された場合も，ENTRY文の入口点の実行時間の情報ではなく，ENTRY文を含むプログラムの実行時間の情報に累積されます。

HP-UX(IPF)，HP-UX(IPF64)の場合，ENTRY文で指定した入口点の呼び出しを個別にプロファイリングすることはできません。そのENTRY文を含むプログラムの呼び出しを行ったものとみなしてプロファイリングします。

HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Solaris(SPARC)の場合，profを使用して入れ子のプログラムやクラス定義を含むCOBOLプログラムのプロファイル情報を出力するときは，profに-gオプションを指定してください。-gオプションの詳細については，システムのマニュアルを参照してください。

(17)　-UniObjGenオプション（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(a)　形式

-UniObjGen
-noUniObjGen

(b)　機能

-UniObjGen

シフトJISで記述されたCOBOLソースから英数字定数をUTF-8に，日本語文字定数をUTF-16LEまたはUTF-16BEに変換したオブジェクトファイルを生成します。

-noUniObjGen

-UniObjGenオプションの指定を打ち消します。

(c)　注意事項

日本語文字定数の文字コードのバイトオーダは，-UniEndianオプションの指定に従います。

このオプションを指定する場合，次のオプションは同時に指定できません。同時に指定した場合，このオプションが有効となり，次のオプションは無効になります。
-JPN　-CompatiV3　-V3Rec　-V3RecFCSpace
ただし，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)の場合，コンパイラ環境変数CBLV3UNICODEにYESを指定すると，このオプションを指定しても-CompatiV3，-V3Rec，および-V3RecFCSpaceオプションは有効となります。

HP-UX(IPF)，AIX(32)，AIX(64)の場合，EUC環境下で-UniObjGenオプションを指定した場合，コンパイルエラーとなります。

Linux(x86)，Linux(x64)の場合，UTF-8環境下で，-UniObjGenオプションを指定しないでコンパイルすると，コンパイルエラーとなります。また，-UniObjGenオプションを指定する場合は，環境変数CBLSRCENCODINGを同時に指定する必要があります。

(18)　-UniEndianオプション（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(a)　形式

-UniEndian,｛Little｜Big｝
-noUniEndian

(b)　機能

-UniEndian,Little

日本語文字定数をUTF-16LEに変換したオブジェクトファイルを生成します。

-UniEndian,Big

日本語文字定数をUTF-16BEに変換したオブジェクトファイルを生成します。

-noUniEndian

-UniEndianオプションの指定を打ち消します。

(c)　注意事項

このオプションは，-UniObjGenオプションが指定された場合だけ有効となります。

-UniObjGenオプションが指定されていて，-UniEndianオプションが指定されていない場合，日本語文字定数は次のコードに変換されます。

HP-UX(IPF)，AIX(32)，AIX(64)の場合：UTF-16BE

Linux(x86)，Linux(x64)の場合：UTF-16LE

(19)　-Lx64ConventionCheckオプション（Linux(x64)で有効）

(a)　形式

-Lx64ConventionCheck
-noLx64ConventionCheck

(b)　機能

-Lx64ConventionCheck

Linux(x64) COBOL2002でC言語との連携を行うときに問題となる可能性がある場合（次に示す条件を満たす場合），警告レベルのエラーメッセージを出力します。詳細については，「19.1.2　CプログラムからCOBOLプログラムを呼び出す方法」の「表19-1　COBOLのデータ項目とCプログラムの型の対応」の注※1を参照してください。

サイズが16バイト以下の集団項目を値渡し（BY VALUE）の引数および返却項目に指定している。

1.の集団項目の従属項目に内部浮動小数点項目がある。

-noLx64ConventionCheck

-Lx64ConventionCheckオプションの指定を打ち消します。

(c)　注意事項

CALL文によって呼び出されるプログラムがCOBOLプログラムであっても警告レベルのエラーメッセージが出力されます。

(20)　-ExternRefオプション（Solaris(SPARC)で有効）

(a)　形式

-ExternRef
-noExternRef

(b)　機能

-ExternRef

8バイト境界に整列されていない外部属性を持つデータ項目を参照および更新できるようにするオプションです。外部属性を持つデータ項目への参照は，標準では，すべて8バイト境界に整列されていることを前提とした命令語に翻訳されます。しかし，C言語などの他言語で宣言された外部変数は，8バイト境界に整列されていないことがあります。そのため，COBOLプログラムが，外部属性を持つデータ項目を使って，Cプログラムなどの他言語で実体を割り当てられた，8バイト境界に整列されていないデータを参照および更新すると，実行時に異常終了する場合があります。このような場合に，このオプションを指定します。

外部属性を持つデータ項目が8バイト境界に整列されていないことが異常終了の原因の場合は，このオプションを指定することで，その問題が解決されます。

なお，COBOLプログラムだけで外部属性を持つデータ項目を共有している場合や，他言語で実体を割り当てられた外部変数をCOBOLプログラムから正常に参照および更新できる場合は，このオプションの指定は不要です。

-noExternRef

-ExternRefオプションの指定を打ち消します。

(21)　-MaxDigits38オプション（HP-UX(IPF64)，AIX(64)，Linux(x64)で有効）

(a)　形式

-MaxDigits38
-noMaxDigits38

(b)　機能

-MaxDigits38

数字項目および数字定数に指定できる数字の最大けた数を18けたから38けたに拡張します。外部10進形式および内部10進形式の数字項目と数字編集項目と固定小数点数字定数で，けた数を拡張できます。詳細については，「28.　数字項目のけた拡張機能（HP-UX(IPF64)，AIX(64)，Linux(x64)で有効）」およびマニュアル「COBOL2002　言語　拡張仕様編　21. 数字項目のけた拡張機能」を参照してください。

-noMaxDigits38

-MaxDigits38オプションの指定を打ち消します。

(c)　注意事項

-IntResult,DecFloat40オプションと同時に指定してください。-IntResult,DecFloat40オプションの指定がない場合，エラーメッセージが出力されます。

-MaxDigits38オプション，-IntResult,DecFloat40オプション，および-Optimize,3オプションを同時に指定した場合，-Optimize,3オプションは無効となり，-Optimize,2オプションが仮定されます。

-MaxDigits38オプションを指定しても，19～38けたの数字項目および数字定数が指定できない機能や文があります。詳細については，「28.　数字項目のけた拡張機能（HP-UX(IPF64)，AIX(64)，Linux(x64)で有効）」およびマニュアル「COBOL2002　言語　拡張仕様編　21. 数字項目のけた拡張機能」を参照してください。

(22)　-IntResult,DecFloat40オプション（HP-UX(IPF64)，AIX(64)，Linux(x64)で有効）

(a)　形式

-IntResult,DecFloat40
-noIntResult

(b)　機能

-IntResult,DecFloat40

算術演算の中間結果の表現形式を40けた10進浮動小数点形式にします。詳細については，「28.3　数字項目のけた拡張機能での演算の中間結果」を参照してください。

-noIntResult

-IntResultオプションの指定を打ち消します。

(c)　注意事項

-MaxDigits38オプションと同時に指定してください。-MaxDigits38オプションの指定がない場合，エラーメッセージが出力されます。

-IntResult,DecFloat40オプション，-MaxDigits38オプション，および-Optimize,3オプションを同時に指定した場合，-Optimize,3オプションは無効となり，-Optimize,2オプションが仮定されます。

-IntResult,DecFloat40オプション，-MaxDigits38オプション，および-Compati85,Powerオプション（-Compati85,All指定による仮定時を含む）を同時に指定した場合，-Compati85,Powerオプションは無効となります。

AIX(64)，Linux(x64)の場合，-IntResult,DecFloat40オプションと-CompatiV3オプションを同時に指定すると，-CompatiV3オプションの仕様が一部無効となります。詳細については，「32.5.12　他システムとの移行の設定」の「(1)　-CompatiV3オプション」を参照してください。

HP-UX(IPF64)の場合，-IntResult,DecFloat40オプション，-MaxDigits38オプションおよび-CompatiV3オプションを同時に指定すると，-noCompatiV3オプションを指定して-CompatiV3オプションを打ち消したときと同様になります。

AIX(64)，Linux(x64)の場合，コンパイラ環境変数CBLV3UNICODEにYESの指定がないとき，-IntResult,DecFloat40オプション，-MaxDigits38オプション，-UniObjGenオプションおよび-CompatiV3オプションを同時に指定すると，-CompatiV3オプションを打ち消します。また，-CompatiV3オプションによって仮定される-JPNオプションおよび-V3Recオプションも打ち消します。

(23)　-LiteralExtendオプション（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(a)　形式

-LiteralExtend,Alnum
-noLiteralExtend

(b)　機能

-LiteralExtend,Alnum

英数字定数の最大長を拡張します。拡張する項目と制限値および限界値を次に示します。

表32-4　最大長を拡張する項目と制限値および限界値

最大長を拡張する項目
制限値および限界値

-LiteralExtend,Alnumなし
-noLiteralExtendあり
-LiteralExtend,Alnumあり

英数字定数の長さ
1～160文字（バイト）
1～8,191文字（バイト）

STOP文の定数に指定した英数字定数の長さ
1～160文字（バイト）
1～8,191文字（バイト）

定数指定する場合のプログラム名，メソッド名の長さ
1～160文字（バイト）
1～1,024文字（バイト）

ただし，次に示す項目では英数字定数の最大長は拡張されません。

表32-5　最大長を拡張しない項目

最大長を拡張しない項目 | 制限値および限界値（-LiteralExtendの有無に関係なく同じ）
連結式で連結した英数字定数の長さ | 2～1,024文字（バイト）
指定できる文字位置のけた数が個別に規定されている構文 | 各構文の規定に従う
COPY文，REPLACE文の構文中に指定する原文語の長さ | 1～322文字（バイト）
翻訳指令行で使用する英数字定数の長さ | 1～160文字（バイト）
SQL文中で使用する英数字定数の長さ | 1～160文字（バイト）

-noLiteralExtend

-LiteralExtendオプションの指定を打ち消します。

(c)　注意事項

-LiteralExtendオプションは，次のオプションと背反関係にあり，同時に指定した場合は，-LiteralExtendオプションが無効となり，次のオプションが有効となります。
-StdMIA　-Std85　-Std2002　-V3Spec　-Compati85,Syntax　-CompatiV3
-SimMain　-SimSub　-SimIdent

COBOLプログラム中にCOPY文またはREPLACE文がある場合，322バイトを超える英数字定数に対して，原文語の長さが322文字を超えている旨の警告エラーを出力することがありますが，プログラムの動作には影響しません。

-LiteralExtendオプションを指定しても，CGIプログラム作成支援機能のリテラル文字の最大長は拡張しません。

(24)　-SpaceAsZeroオプション（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(a)　形式

-SpaceAsZero
-noSpaceAsZero

(b)　機能

-SpaceAsZero

外部10進項目に空白文字（X'20'）データがあるとき，ゼロ（X'30'）とみなして比較，演算，転記を実行します。このオプションを指定すると，約1.5倍の実行性能劣化となります。このため，必要のないかぎり，このオプションは指定しないでください。

-noSpaceAsZero

-SpaceAsZeroオプションの指定を打ち消します。

(c)　注意事項

-SpaceAsZeroオプションは，-Compati85,Allオプションと同時に指定してください。-Compati85,Allオプションの指定がない場合，エラーメッセージが出力されます。なお，-Compati85,Allオプションと同じ意味となる-Compati85のサブオプションが指定された場合，-SpaceAsZeroオプションの指定が有効になります。

-SpaceAsZeroオプションと-Optimize,3オプションを同時に指定した場合，-Optimize,3オプションは無効となり，-Optimize,2オプションが仮定されます。

AIX(64)，Linux(x64)の場合，-SpaceAsZeroオプションと，-Compati85,All，-MaxDigits38および-IntResult,DecFloat40オプションを同時に指定したとき，-IntResult,DecFloat40オプションの仕様によって，-Compati85,Powerサブオプションが無効となります。そのため，同時に指定した-Compati85,Allオプションが無効となり，エラーメッセージが出力されます。
-SpaceAsZeroオプションを有効にする場合，-MaxDigits38および-IntResult,DecFloat40オプションを指定しないでください。

-DebugDataオプションが指定されている場合，比較，演算，転記の外部10進項目に含まれる空白文字（X'20'）は，-SpaceAsZeroオプションを指定しても，不当なデータ（データ例外）として検出されます。

外部10進項目に空白文字（X'20'）データがあるとき，比較，演算，転記以外の実行結果（画面節（SCREEN SECTIONおよびWINDOW SECTION），索引ファイルのキー項目，整列・併合処理のキー指定，DISPLAY文，組み込み関数，埋め込みSQL文などの実行結果）は，-SpaceAsZeroオプションを指定しても保証しません。

32.6　コンパイラ環境変数

ここでは，ccbl2002コマンドでコンパイルするときに使用する環境変数について，設定方法と環境変数の種類を説明します。

＜この節の構成＞

32.6.1　コンパイラ環境変数の設定方法

32.6.2　コンパイラ環境変数の一覧

32.6.3　コンパイラ環境変数の詳細

32.6.1　コンパイラ環境変数の設定方法

＜この項の構成＞

(1)　システムに従った環境変数の設定方法

(2)　コンパイラ環境変数の規則

(1)　システムに従った環境変数の設定方法

ccbl2002コマンドでのコンパイラ環境は環境変数で設定できます。

(a)　sh（Bシェル）の場合

形式

環境変数=環境変数の値
export 環境変数

(2)　コンパイラ環境変数の規則

環境変数にYESを設定するとき，大文字と小文字は非等価とみなします。

32.6.2　コンパイラ環境変数の一覧

コンパイラ環境変数の一覧を，次に示します。

表32-6　コンパイラ環境変数の一覧

環境変数 | 設定内容 | OS
F | H | A | B | J | K | L | S
CBL_RDBSYS | HiRDBによる索引編成ファイルで操作対象となるデータベースシステムの種別 | ○ | ○ | ○ | ○ | × | × | ○ | ○
CBLCC | ccコマンドに渡すオプション列およびファイル名 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLCOPT | ccblコマンドに指定する旧形式のオプション列 | ○ | ○ | ○ | ○ | × | × | ○ | ○
CBLCOPT2002 | ccbl2002コマンドに指定する新形式のオプション列 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLERRMAX | コンパイルを打ち切るSレベルのエラーの数 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLFIX | 固定形式正書法のCOBOLソースファイルの拡張子 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLFREE | 自由形式正書法のCOBOLソースファイルの拡張子 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLINITVALUE | 初期化属性プログラムの作業場所節にある，VALUE句の指定がないデータ項目の初期値をNULL（X'00'）に設定し，初期化属性プログラムが呼ばれるたびに初期値を設定 | × | × | × | × | ○ | ○ | × | ×
CBLLIB | 登録集原文の検索ディレクトリ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLPIDIR | プログラム情報ファイル（.cbp）の生成先ディレクトリ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLREP | リポジトリファイルの出力先のディレクトリ，およびリポジトリ段落で指定した翻訳単位名を含むリポジトリファイルを検索するディレクトリ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLSRCENCODING | Unicode機能で入力するCOBOLソースの文字コード | × | × | × | × | ○ | ○ | × | ×
CBLSYSREP | リポジトリファイルの参照時に検索するディレクトリ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLTAB | タブコードを空白に変換するときの値 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLVALUE | VALUE句の指定のないデータ項目の初期値 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLV3UNICODE | -UniObjGenオプション指定時に，-CompatiV3オプションおよび-V3Recオプションの指定を有効とするかどうか | × | × | × | × | ○ | ○ | × | ×
登録集環境変数 | 登録集原文の検索ディレクトリ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○

（凡例）

F：HP-UX(IPF)

H：HP-UX(IPF64)

A：AIX(32)

B：AIX(64)

J：Linux(x86)

K：Linux(x64)

L：Linux(IPF64)

S：Solaris(SPARC)

○：サポートしている

×：サポートしていない

32.6.3　コンパイラ環境変数の詳細

＜この項の構成＞

(1)　CBL_RDBSYS（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC)で有効）

(2)　CBLCC

(3)　CBLCOPT（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC)で有効）

(4)　CBLCOPT2002

(5)　CBLERRMAX

(6)　CBLFIX

(7)　CBLFREE

(8)　CBLINITVALUE（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(9)　CBLLIB

(10)　CBLPIDIR

(11)　CBLREP

(12)　CBLSRCENCODING（Linux(x86)，Linux(x64)で有効）

(13)　CBLSYSREP

(14)　CBLTAB

(15)　CBLVALUE

(16)　CBLV3UNICODE（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(17)　登録集環境変数

(1)　CBL_RDBSYS（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC)で有効）

HiRDBによる索引編成ファイルの操作対象になるデータベースシステムを設定します。指定できる値は，HiRDBだけです。この環境変数の指定がない場合，および指定した値に誤りがある場合は，HiRDBが仮定されます。

（例）

CBL_RDBSYS=HiRDB
export CBL_RDBSYS

(2)　CBLCC

ccコマンドに渡すオプション列およびファイル名を設定します。当環境変数に設定することによって，指定のオプションおよびオプション引数をcコンパイラに渡します。

コマンドの指定は，ccコマンドのコマンド列全体をアポストロフィ（'）で囲みます。

（例）

CBLCC='-c -o TEST  a.c b.s'
export CBLCC

(3)　CBLCOPT（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC)で有効）

ccblコマンドに指定するオプション列（コンパイラオプションの並び）を設定します。この環境変数に設定しておけば，ccblのコマンドラインにオプションを指定する必要がなくなります。ただし，この環境変数はCOBOL85からの移行を目的とする場合にだけ使用してください。

環境変数CBLCOPTにファイル名を指定した場合は，ファイル名が無視されます。

各オプションを空白で区切り，コマンド列全体をアポストロフィ（'）で囲みます。

（例）

CBLCOPT='-S1 -T4 -Ek'
export CBLCOPT

(4)　CBLCOPT2002

ccbl2002コマンドに指定するオプション列（コンパイラオプションの並び）を設定します。この環境変数に設定しておけば，ccbl2002のコマンドラインにオプションを指定する必要がなくなります。

環境変数CBLCOPT2002にファイル名を指定した場合は，ファイル名が無視されます。

各オプションを空白で区切り，コマンド列全体をアポストロフィ（'）で囲みます。

（例）

CBLCOPT2002='-StdVersion,1 -DebugData -Switch,EBCDIK'
export CBLCOPT2002

(5)　CBLERRMAX

コンパイルを打ち切るSレベルのエラーの数を設定します。設定した個数分のエラーが発生すると，メッセージが出力され，コンパイルが打ち切られます。

設定できる範囲は0～999,999で，省略時は30が仮定されます。コンパイルを続行し，すべてのエラーメッセージを出力したい場合は0を設定します。

なお，コンパイルリストを出力する場合（-SrcListオプションを指定した場合），この環境変数は無効となります。

（例）

CBLERRMAX=15
export CBLERRMAX

(6)　CBLFIX

固定形式正書法で書かれたCOBOL原始プログラムとしてコンパイルするCOBOLソースファイルの拡張子を設定します。ただし，拡張子.cbl，.CBL，.cob，.ocbの付いたファイルは，ここで設定しなくても固定形式正書法で書かれたCOBOL原始プログラムとしてコンパイルされます。

拡張子は，先頭のピリオド（.）と3文字以内の英数字で指定します。複数の拡張子を設定する場合は，それぞれの拡張子を半角空白文字で区切り，全体をアポストロフィ（'）で囲みます。

（例）

CBLFIX=.fix
export CBLFIX

注意事項

コンパイル後のファイル種別の変換
環境変数CBLFIXおよびCBLFREEに，コンパイラで使用するファイル（COBOLソースファイルを除く）の拡張子は指定しないでください。COBOLソースファイルが別のファイル種別に変換されることがあります。

(7)　CBLFREE

自由形式正書法で書かれたCOBOL原始プログラムとしてコンパイルするCOBOLソースファイルの拡張子を設定します。ただし，拡張子.cbf，.ocfの付いたファイルは，ここで設定しなくても自由形式正書法で書かれたCOBOL原始プログラムとしてコンパイルされます。

拡張子は，先頭のピリオド（.）と3文字以内の英数字で指定します。複数の拡張子を設定する場合は，それぞれの拡張子を半角空白文字で区切り，全体をアポストロフィ（'）で囲みます。

（例）

CBLFREE='.aaa .bbb .ccc'
export CBLFREE

注意事項

環境変数CBLFIXおよび環境変数CBLFREEに，コンパイラで使用するファイル（COBOLソースファイルを除く）の拡張子は指定しないでください。COBOLソースファイルが別のファイル種別に変換されることがあります。

自由形式正書法で書かれたCOBOLソースに対するコンパイラオプションの制限
自由形式正書法で書かれたCOBOLソースをコンパイルするとき，次のコンパイラオプションは指定できません。
-StdVersion，-V3Rec，-CompatiV3，-StdMIA，-Std85

(8)　CBLINITVALUE（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

初期化属性プログラムの作業場所節にある，VALUE句の指定がないデータ項目の初期値をNULL（X'00'）に設定するときに，環境変数CBLINITVALUEにNULLを設定します。初期化属性プログラムが呼ばれるたびに，初期値が設定されます。

環境変数CBLINITVALUEにNULL以外の値を設定した場合は，環境変数CBLINITVALUEは無視されます。

（例）

CBLINITVALUE=NULL
export CBLINITVALUE

環境変数CBLINITVALUEは，次のデータ項目には適用されません。

VALUE句の指定があるデータ項目

ADDRESSED句の指定があるデータ項目

EXTERNAL句の指定があるデータ項目

注意事項

初期化属性プログラムの作業場所節に対する初期化は，環境変数CBLVALUEと環境変数CBLINITVALUEが両方とも有効な場合と，どちらか片方だけが有効な場合とで初期値が異なります。詳細については，「18.4.1　プログラム属性」の「(2)　初期化属性プログラム」を参照してください。また，環境変数CBLVALUEについては，「(15)　CBLVALUE」を参照してください。

(9)　CBLLIB

登録集原文を検索するパスプレフィクスを設定します。ディレクトリを複数指定する場合は，それぞれパスプレフィックスをコロン（:）で区切って指定します。

（例）

CBLLIB=/usr/user/copylib
export CBLLIB

(10)　CBLPIDIR

プログラム情報ファイル（.cbp）を任意のディレクトリに生成したい場合に設定します。プログラム情報ファイルは，テストデバッガを使用するときに必要となるファイルです。設定できるディレクトリは一つだけです。

（例）

CBLPIDIR=/temp
export CBLPIDIR

(11)　CBLREP

リポジトリファイル（.rep）を任意のディレクトリに生成，または更新したい場合に，出力先のディレクトリを指定します。指定されたディレクトリは，リポジトリ段落で指定された名前の翻訳単位（関数定義，クラス定義，またはインタフェース定義）を含むリポジトリファイル参照時の検索対象となります。

詳細は，「33.　定義別のコンパイル方法とリポジトリファイル」を参照してください。

規則

指定するディレクトリが複数ある場合は，各ディレクトリをセミコロン（;）で区切って指定します。

指定したディレクトリ群に同じ名称のリポジトリファイルが複数ある場合，先に指定したディレクトリに含まれるリポジトリファイルを優先します。

生成または更新時に，同じ名称のリポジトリファイルがない場合，最初に指定されたディレクトリにリポジトリファイルを新規に生成します。

リポジトリファイル検索時に同じ名称のリポジトリファイルが見つからなければ，カレントディレクトリが検索されます。また，環境変数CBLREPの指定がない場合，リポジトリファイルの生成，更新，および検索は，カレントディレクトリが対象となります。

（例）

ディレクトリとして/usr/user/replibを指定します。

CBLREP=/usr/user/replib

(12)　CBLSRCENCODING（Linux(x86)，Linux(x64)で有効）

Linux(x86)，Linux(x64)の場合，Unicode機能で入力するCOBOLソースの文字コードがシフトJISであるときに文字コードを設定します。指定できる値は，SJISだけです。

（例）

CBLSRCENCODING=SJIS
export CBLSRCENCODING

なお，この環境変数は次の場合は無効となります。

この環境変数にSJISを指定していない場合

-UniObjGenオプションを指定していない場合

UTF-8環境下ではない場合

(13)　CBLSYSREP

リポジトリ段落で指定された名前の翻訳単位（関数定義，クラス定義，またはインタフェース定義）を含むリポジトリファイルを検索するディレクトリを指定します。

環境変数CBLSYSREPに指定したディレクトリに格納されたリポジトリファイルは，リポジトリファイルに情報が格納されている翻訳単位と同じ名称の翻訳単位を作成してコンパイルした場合でも，上書きされることはありません。このため，環境変数CBLSYSREPには，主に（共用ファイルとリポジトリファイルだけが提供されている場合など）生成元ソースファイルのないリポジトリファイルの検索ディレクトリを指定する場合に使用します。

詳細は，「33.　定義別のコンパイル方法とリポジトリファイル」を参照してください。

規則

指定するディレクトリが複数ある場合は，各ディレクトリをコロン（:）で区切って指定します。

リポジトリファイルの検索順序は，カレントディレクトリが優先されます。

（例）

ディレクトリとして/usr/user/sysreplibと/users/lib/repを指定します。

CBLSYSREP=/usr/user/sysreplib:/users/lib/rep

(14)　CBLTAB

COBOLソース中のタブ位置を設定します。指定できる範囲は1～72で，省略時は8を仮定します。

（例）

CBLTAB=4
export CBLTAB

(15)　CBLVALUE

サブスキーマ節，作業場所節，画面節（WINDOW SECTION／SCREEN SECTION）※，報告書節，ファイル節で定義しているデータ項目のVALUE句の指定のない初期値を，このシステムで採用している計算機文字集合であるJIS8単位コードの順序位置（1～256）で指定します。JIS8単位コードについては，マニュアル「COBOL2002　言語　標準仕様編　付録B 計算機文字集合」を参照してください。

なお，ASCII範囲外の文字コードは，動作するロケールによって扱いが異なります。

注※　HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Solaris(SPARC)で有効です。

実行単位でプログラムが最初に呼び出された場合だけ，この環境変数に指定した初期値をデータ項目に設定します。

この環境変数は，-CBLVALUEオプションを指定した場合だけ有効です。また，-CBLVALUEオプションを指定している場合で，この環境変数の指定がないとき，および指定した値に誤りがあるときは，1が仮定されます。

（例）

CBLVALUE=33
export CBLVALUE

VALUE句のないデータ項目の初期値に，空白文字（JIS8単位コードで33番目の文字）を指定します。

なお，この環境変数は次のデータ項目には適用されません。

VALUE句の指定のあるデータ項目

ADDRESSED句の指定のあるデータ項目

EXTERNAL句の指定のあるデータ項目

DYNAMIC LENGTH句のあるデータ項目※

注※

AIX(32)，AIX(64)，Linux(x86)，Linux(x64)だけで有効です。

注意事項

初期化属性プログラムの作業場所節に対する初期化は，環境変数CBLVALUEと環境変数CBLINITVALUEが両方とも有効な場合と，どちらか片方だけが有効な場合とで初期値が異なります。詳細については，「18.4.1　プログラム属性」の「(2)　初期化属性プログラム」を参照してください。また，環境変数CBLINITVALUEについては，「(8)　CBLINITVALUE（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）」を参照してください。

(16)　CBLV3UNICODE（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

-UniObjGenオプション指定時，-CompatiV3オプションおよび-V3Recオプションの指定を有効としたい場合に設定します。

ただし，この環境変数を設定した場合，-CompatiV3オプションは-JPN,Alnumオプションを仮定しません。

（例）

CBLV3UNICODE=YES
export CBLV3UNICODE

なお，この環境変数は次の場合は無効となります。

この環境変数にYESを指定していない場合

-UniObjGenオプションを指定していない場合

この環境変数とコンパイラオプションの組み合わせによるメインフレーム（VOS3）COBOL85移行用オプションである，-CompatiV3オプション，-JPNオプション，および-V3Recオプションの有効／無効の関係を次に示します。

環境変数CBLV3UNICODE | -UniObjGen指定 | 指定するオプション
-CompatiV3 | -JPN | -V3Rec
YES | あり | ○※ | × | ○
YES以外 | × | × | ×
YES | なし | コンパイルエラー
YES以外

（凡例）

○：有効となる

×：無効となる

注※

-V3Rec,Variableオプションは仮定されますが，-JPN,Alnumオプションは仮定されません。

注意事項

-JPN,Alnumオプションが仮定されないことで，日本語項目，日本語編集項目，および日本語文字定数をそれぞれ英数字項目，英数字編集項目，および英数字定数として扱うことができないため，日本語項目と英数字項目間での比較および転記ができません。また，VOS3 COBOL85と日本語機能に差異があるため，日本語項目または英数字項目のどちらか一方に合わせる必要があります。VOS3 COBOL85とCOBOL2002との日本語機能差異を次に示します。

項目
VOS3 COBOL85
COBOL2002※

日本語項目と英数字項目間の転記／比較
LANGOPT=(-D)の場合，転記または比較できる。
転記または比較できない。

INITIALIZE文（日本語項目の初期設定）

REPLACING指定がないと半角空白で初期化する。

REPLACING ALPHANUMERIC，ALPHANUMERIC-EDITED指定時，一意名2，定数1の値で初期化する。

REPLACING指定がないと全角空白で初期化する。

NATIONAL,NATIONAL-EDITED以外のREPLACING指定の場合，初期化されない。

INSPECT，STRING，UNSTRING文の日本語項目
XCOBOL=(N)オプションのときは1バイト単位で処理する。
日本語文字単位で処理する。

日本語項目パディング
LANGOPT=(-D)の場合，パディング文字に半角空白(X'40')を使用する。
パディング文字に全角空白(X'3000')を使用する。

注※

環境変数CBLV3UNICODE=YES，-CompatiV3オプション指定あり，および-UniObjGenオプション指定あり

-V3Rec,Variableオプションが指定できることで，日本語文字定数に標準コード文字が指定できます。日本語文字定数がUTF-16となり，標準コード文字も2バイトとなります。このことから，転記先のけた数を増やす必要があり，その日本語項目または日本語編集項目を参照している個所も修正が必要となる場合があります。例を次に示します。
（転記先のけた数の見直しの例）
01 ABC PIC N(2).
01 DEF PIC N(1).
：
MOVE N'あAB' TO ABC.
MOVE ABC(2:1) TO DEF.
日本語文字定数は3けた（6バイト）になることから，転記先のABCけた数を3けたに修正する必要があります。
また，標準コード文字が2バイトになることから，DEFに'AB'が格納されていることを期待する場合，標準コード文字'AB'を参照する部分参照の長さを1から2 に修正する必要があり，その転記先となるDEFのけた数も1から2に修正する必要があります。
（日本語文字定数の半角空白補完による転記先のけた数の見直しの例）
01 ABC PIC N(3).
：
MOVE N'あabc' TO ABC.
日本語文字定数の標準コード文字数が奇数になる場合は，標準コード文字数が偶数になるように日本語文字定数の終端に半角空白が補完されます。これによって，補完された半角空白を含み，日本語文字定数は5けた（10バイト）になることから，転記先となるABCのけた数を5けたに修正する必要があります。

-CompatiV3オプションが指定できることで，報告書作成機能が拡張され，特殊名段落の定数10が指定可能となりますが，1バイト文字の指定が前提であるため，UTF-8で多バイトとなる半角かたかなは指定できません。このことから，定数10にUTF-8で多バイトとなる文字を指定している場合，UTF-8で1バイトとなる文字に変更する必要があります。

(17)　登録集環境変数

登録集原文を検索するディレクトリを設定します。ディレクトリを複数指定する場合は，コロン（:）で区切って指定します。

（例）

登録集名=/usr/user/copylib
export 登録集名

登録集名は，英大文字と数字から成る8文字以内の任意の文字列で指定します。

ここで指定したディレクトリは，環境変数CBLLIBで指定したディレクトリよりも優先します。詳細については，「32.3.1　原始文操作機能」を参照してください。

32.7　コンパイラ付属機能

＜この節の構成＞

32.7.1　TDコマンド生成機能

32.7.2　makefile生成機能

32.7.3　ヘルプ機能

32.7.1　TDコマンド生成機能

TDコマンド生成機能とは，COBOLソースファイルを解析して，テストデバッガで使用するTDコマンドをファイルに生成する機能です。

生成されるTDコマンドには，中断点情報，プログラムのシミュレーション情報，およびファイルのシミュレーション情報の3種類があります。

これらのTDコマンド群は，-TestCmd,Break，-TestCmd,Sim，-TestCmd,Fullオプションを指定してコンパイルしたときに生成されます。生成されたTDコマンド群に，必要に応じてTDコマンドの修正や追加をすることで，TDコマンド格納ファイルを作成できます。

また，TDコマンド生成機能の対象となるプログラムは，コンパイルしたときすべてのプログラムで，Sレベル，Uレベルのコンパイルエラーのなかった原始プログラムファイルだけです。

TDコマンド生成機能の詳細については，マニュアル「COBOL2002　使用の手引　操作編」を参照してください。

32.7.2　makefile生成機能

＜この項の構成＞

(1)　makefile生成機能の概要

(2)　makefileの生成方法

(3)　cbl2kmfコマンドに関する注意事項

(1)　makefile生成機能の概要

makefile生成機能とは，COBOL2002で作成するプログラムやライブラリの作成方法や保守方法を，makeに通知するmakefileを生成する機能です。この機能は，cbl2kmfコマンドで使用します。生成したmakefileは，テキストエディタで変更できます。

(2)　makefileの生成方法

(a)　cbl2kmfコマンド

形式

cbl2kmf  〔-cls〕〔-f makefile名〕〔 マクロ名＝値〕 …

機能

COBOL用のmakefileを生成します。

makefile生成前に，既存のmakefileの有無を調べます。

規則

-c

'creating makefile from …'のメッセージを表示しません。

-l

makefileをライブラリ用のmakefileにします。

-s

cbl2kmf起動前makefileのCOBOLマクロ情報およびCOBOLサフィックスのルールをmakefileが引き継ぎます。

-f makefile名

makefileのファイル名を指定します。省略した場合は，Makefileになります。

マクロ定義

cbl2kmfでは，次のマクロ定義を使用できます。また，mkmfコマンドで使用できるマクロ定義も使用できます。mkmfコマンドで使用できるマクロ定義の詳細は，システムのマニュアルを参照してください。

・CBLMAIN

　 メインプログラムのソースファイル名を指定します（COBOL以外のプロ

　 グラムがメインプログラムのときは指定しないでください）。

・CBLFLAGS

　 COBOL2002のコンパイラオプションを指定します。

　 複数のフラグを指定するときは，引用符（"）で囲んでください。

環境変数

cbl2kmfに指定できる環境変数を次に示します。

環境変数 | 意味 | デフォルト値
LD | makefileのマクロ定義と置換 | "ccbl2002"
CBLMAIN | メインプログラムのソースファイル名を指定 | ""
CBLFLAGS | COBOL2002のコンパイラオプションを指定 | ""

CBLMAINとCBLFLAGSは，マクロ定義，環境変数，-sオプションの順に優先します。

登録集原文を検索するディレクトリを設定する環境変数CBLLIBなど，ccbl2002コマンドでコンパイルするときに必要な環境変数は，cbl2kmfコマンド起動時も必要となります。環境変数の詳細については，「32.6.2　コンパイラ環境変数の一覧」を参照してください。

cbl2kmfコマンドは，次の終了コードを返します。

終了コード | 意味
0 | cbl2kmfは，正常に終了した。
1 | cbl2kmfで，エラーが発生した。
2 | cbl2kmfで，回復不能エラーが発生した。

注意事項

cbl2kmfで作成されたmakefileは，make時にmkmfが受け付ける要求の中で次の要求は受け付けません。
・index：標準出力への関数インデクスのプリント
・tags ：exエディタ用のタグファイルの作成
mkmfが受け付ける要求については，システムのマニュアルを参照してください。

プログラム名とライブラリの名称のデフォルトは，それぞれa.outとlib.aです。変更するときは，マクロ名PROGRAMおよびLIBRARYの値設定式を指定してください。

生成された依存関係の情報は，####で始まるmakefileの行の後に現れます。これらの行を変更してはなりません。

cbl2kmfに不正なオプションを指定すると，mkmfのエラーメッセージが出力される場合があります。

ソースファイル中にクラス定義，インタフェース定義，関数定義があった場合でも，次のディレクトリに対する環境変数は生成されません。
・リポジトリファイルの検索対象ディレクトリ
・リポジトリファイルの出力先のディレクトリ

ソースファイル中にクラス定義，インタフェース定義，関数定義があった場合でも，リポジトリファイルに対するCOBOL原始プログラムや登録集原文との依存関係を示す情報は生成されません。

cbl2kmfコマンドで生成されたmakefileを使用すると，ソースファイル名のアルファベット順にソースファイルがコンパイルされます。参照関係を持つクラス定義，インタフェース定義，関数定義がある場合は，参照先のソースファイルを先にコンパイルするために，参照先のソースファイル名は参照元のソースファイル名よりアルファベット順が先になるようにする必要があります。参照元および参照先のソースファイル（翻訳単位）の関係については，「33.1　リポジトリファイルを使用するCOBOLプログラム開発の概要」を参照してください。
参照元および参照先のソースファイルと，生成されたmakefileでのコンパイル順序の例を次に示します。

makefileの生成

cbl2kmf CBLMAIN=PROGRAM1.cbl

生成されたmakefileでのコンパイル順序

ccbl2002 -Compile,NoLink CLASS01.cbl
ccbl2002 -Compile,NoLink CLASS02.cbl
ccbl2002 -Compile,NoLink -Main,System PROGRAM1.cbl

生成したmakefileでコンパイルを実行するときに指定しなければならないコンパイラオプションがある場合は，cbl2kmfコマンドを実行するときに必要なすべてのコンパイラオプションを次のどれかに指定してください。
・マクロ定義CBLFLAGS
・環境変数CBLFLAGS
・コンパイラ環境変数CBLCOPT2002
また，必要なコンパイラオプションをコンパイラ環境変数CBLCOPT2002に指定してmakefileを生成した場合は，makeを実行するときにも同じコンパイラオプションを指定する必要があります。

(b)　使用例

makefile生成機能の使用例を示します。

前提条件

作成する実行可能ファイル名称
example1

原始プログラム名称
main.cbl
（主プログラム，原始プログラムに登録集cpy1.cbl，cpy2.cblを複写）

sub1.CBL
（副プログラム，原始プログラムに登録集cpy1.cblを複写）

sub2.cob
（副プログラム，原始プログラムに登録集cpy2.cblを複写）

登録集原文名
cpy1.cbl
（原始プログラムとは別ディレクトリ）

cpy2.cbl
（原始プログラムとは別ディレクトリ）

コンパイラオプション
-TDInf
（テストデバッグ機能が使用できる実行可能ファイルを作成）

-DoubleQuote
（原文中に引用符を使用）

ファイル構成と操作概要

makefileの内容

CFLAGS        =
DEST          = .
EXTHDRS       = ../copylib/cpy1.cbl ¥
               ../copylib/cpy2.cbl
HDRS          =
INSTALL       = /etc/install
LD            = ccbl2002
LDFLAGS       = -TDInf
LIBS          =
MAKEFILE      = Makefile
OBJS          = main.o ¥
               sub1.o ¥
               sub2.o
PRINT         = pr
PROGRAM       = example1
SHELL         = /bin/sh
SRCS          = main.cbl ¥
               sub1.CBL ¥
               sub2.cob
SYSHDRS       =
all:            $(PROGRAM)
$(PROGRAM):     $(OBJS) $(LIBS)
               @echo "Linking $(PROGRAM)..."
               @$(LD) $(LDFLAGS) $(OBJS) $(LIBS) -o $(PROGRAM)
               @echo "done"
clean:;         @rm -f $(OBJS) core
clobber:;       @rm -f $(OBJS) $(PROGRAM) core tags
depend:;        @mkmf -f $(MAKEFILE) ROOT=$(ROOT)
echo:;          @echo $(HDRS) $(SRCS)
index:;         @ctags -wx $(HDRS) $(SRCS)
install:        $(PROGRAM)
               @echo Installing $(PROGRAM) in $(DEST)
               @-strip $(PROGRAM)
               @if [ $(DEST) != . ]; then ¥
            (rm -f $(DEST)/$(PROGRAM); $(INSTALL) -f $(DEST) $(PROGRAM); fi
print:;         @$(PRINT) $(HDRS) $(SRCS)
tags:           $(HDRS) $(SRCS); @ctags $(HDRS) $(SRCS)
update:         $(DEST)/$(PROGRAM)
$(DEST)/$(PROGRAM): $(SRCS) $(LIBS) $(HDRS) $(EXTHDRS)
               @$(MAKE) -f $(MAKEFILE) ROOT=$(ROOT) DEST=$(DEST) install
###

上記のmakefileの内容の詳細は，システムのマニュアルを参照してください。

環境変数指定またはマクロ定義によるマクロ

CBL          = ccbl2002
CBLFLAGS     = -TDInf -DoubleQuote
CBLMAINOPT   = -Main,System
CBLCMPLOPT   = -Compile,NoLink

COBOL言語用サフィックス

.cbl:

$(CBL) $(CBLFLAGS) $(CBLMAINOPT) $< $(LDFLAGS) -O $<

.cbl.o:

$(CBL) $(CBLFLAGS) $(CBLCMPLOPT) $<

.CBL:

$(CBL) $(CBLFLAGS) $(CBLMAINOPT) $< $(LDFLAGS) -O $<

.CBL.o:

$(CBL) $(CBLFLAGS) $(CBLCMPLOPT) $<

.cob:

$(CBL) $(CBLFLAGS) $(CBLMAINOPT) $< $(LDFLAGS) -O $<

.cob.o:

$(CBL) $(CBLFLAGS) $(CBLCMPLOPT) $<

.ocb:

$(CBL) $(CBLFLAGS) $(CBLMAINOPT) $< $(LDFLAGS) -O $<

.ocb.o:

$(CBL) $(CBLFLAGS) $(CBLCMPLOPT) $<

.cbf:

$(CBL) $(CBLFLAGS) $(CBLMAINOPT) $< $(LDFLAGS) -O $<

.cbf.o:

$(CBL) $(CBLFLAGS) $(CBLCMPLOPT) $<

.ocf:

$(CBL) $(CBLFLAGS) $(CBLMAINOPT) $< $(LDFLAGS) -O $<

.ocf.o:

$(CBL) $(CBLFLAGS) $(CBLCMPLOPT) $<

.SUFFIXES : .cbl .CBL .cob .ocb .cbf .ocf

COBOL原始プログラムとCOBOL登録集原文の依存関係を示すターゲット行とシェル行

####
main.o: ../copylib/cpy1.cbl ../copylib/cpy2.cbl
       $(CBL) $(CBLFLAGS) $(CBLCMPLOPT) $(CBLMAINOPT) $<
sub1.o: ../copylib/cpy1.cbl
sub2.o: ../copylib/cpy2.cbl

具体的な操作

コマンド

cd     /home/src      *>1.
CBLLIB=/home/copylib  *>2.
export CBLLIB         *>3.
cbl2kmf  PROGRAM=example1 CBLMAIN=main.cbl
        CBLFLAGS="-TDInf -DoubleQuote"
        LDFLAGS=-TDInf  *>4.
make                     *>5.

説明

原始プログラムが，存在するディレクトリを変更します。

登録集原文は，別ディレクトリであるため，cbl2kmfが検索できるように環境変数CBLLIBを設定します。

環境変数CBLLIBを有効にします。

makefileを生成します。

実行可能ファイルexample1を生成します。

(3)　cbl2kmfコマンドに関する注意事項

cbl2kmfコマンドは，COBOLソースファイルだけを対象としてmakefileを生成します。Cプログラムに対しては，makefileが生成されないので注意してください。

Cプログラムに対するmakefileを生成するmkmfコマンドがある場合は，次の環境変数を指定することによって，Cプログラムを含めたmakefileを生成できます。

環境変数の指定例（コマンド名：mkmf）

sh（Bシェル）の場合

$CBLMKMF=/home/tools/bin/mkmf
$export CBLMKMF

32.7.3　ヘルプ機能

ここではヘルプ機能（オプション表示）について説明します。

＜この項の構成＞

(1)　ヘルプ機能（オプション表示）

(1)　ヘルプ機能（オプション表示）

ヘルプ機能（オプション表示）とは，COBOL2002のコンパイラを起動するとき，ccbl2002コマンド行，およびccblコマンド行に指定できるオプションを画面に表示する機能です。

オプションを何も指定しないでccbl2002コマンド，およびccblコマンドを起動すると，すべてのコンパイラオプションが表示されます。

ccbl2002コマンド，およびccblコマンドの詳細については，「32.4.1　ccbl2002コマンド」，および「32.4.2　ccblコマンド（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC)で有効）」を参照してください。

33.　定義別のコンパイル方法とリポジトリファイル

COBOL2002では，プログラム定義のほかに，関数定義，クラス定義，およびインタフェース定義など，さまざまな定義を指定できます。この章では，定義の情報を保管するリポジトリファイルについて説明します。また，定義別のコンパイル方法について説明します。

＜この章の構成＞

33.1　リポジトリファイルを使用するCOBOLプログラム開発の概要

33.2　リポジトリファイル

33.3　リポジトリ段落を指定したソースファイルのコンパイル方法

33.4　リポジトリファイルの管理

33.5　リポジトリファイルの生成に関連するコンパイラオプション

33.1　リポジトリファイルを使用するCOBOLプログラム開発の概要

＜この節の構成＞

33.1.1　概要

33.1.2　リポジトリファイルを使用するCOBOLプログラムの作成手順

33.1.3　リポジトリファイルに格納される情報と適合チェック

33.1.1　概要

COBOL2002では，関数定義，クラス定義，およびインタフェース定義を使用できます。これらの翻訳単位が参照関係を持つ場合，参照先の翻訳単位と参照元の翻訳単位とで，それぞれ次のような処理が必要になります。

参照先の翻訳単位
参照元の翻訳単位から参照されるときに必要な定義情報を，参照元の翻訳単位のコンパイルより前に出力する必要があります。この定義情報を，外部リポジトリと呼びます。外部リポジトリの言語仕様については，マニュアル「COBOL2002　言語　標準仕様編　4.12 外部リポジトリ」を参照してください。
COBOL2002では，関数定義，クラス定義，またはインタフェース定義をコンパイルすると，自動的に翻訳単位の外部リポジトリをリポジトリファイル（.rep）に出力します。

参照元の翻訳単位
参照先の翻訳単位の定義情報を取り込む指定が必要です。
COBOL2002では，参照元の翻訳単位のリポジトリ段落に参照先の翻訳単位名を指定しておくことによって，参照元の翻訳単位のコンパイル時に参照先の翻訳単位に対応するリポジトリファイルを取り込めます。
[図データ]

規則

参照元の翻訳単位と参照先の翻訳単位が同じソースファイル中だけに存在する場合は，リポジトリファイルがなくても翻訳単位をコンパイルできます。

プログラム定義だけで構成されているCOBOLプログラムの場合，リポジトリファイルは出力されません。また，リポジトリ段落に参照するプログラム名を指定する必要もありません。詳細は，「33.3.3　プログラム定義だけのコンパイル」を参照してください。

参照元の翻訳単位をコンパイルする時点で，参照先の翻訳単位のリポジトリファイルが出力されていない場合，参照関係が解決できないためコンパイルエラーとなります。そのため，異なるソースファイルに存在する翻訳単位同士が参照関係を持つ場合は，ソースファイルをコンパイルする順序を意識する必要があります。

33.1.2　リポジトリファイルを使用するCOBOLプログラムの作成手順

リポジトリファイルを使用するCOBOLプログラム作成の例として，各翻訳単位の定義と，それを参照する翻訳単位を別々のソースファイルで作成する場合の開発手順について説明します。この手順は，例えば複数の開発者が担当部分の原始プログラムを作成およびコンパイルし，最後にそれぞれのオブジェクトファイルをリンクして実行可能ファイルを作成するようなケースに適用できます。

開発手順を，次に示します。

翻訳単位間のインタフェースの決定
まず，参照先の翻訳単位と参照元の翻訳単位の間のインタフェースを決定する必要があります。COBOL2002では，この翻訳単位間のインタフェース情報のことをシグニチャと呼びます。シグニチャの詳細については，マニュアル「COBOL2002　言語　標準仕様編　4.12 外部リポジトリ」を参照してください。
翻訳単位間のインタフェースを決定するためには，参照先の翻訳単位の原始プログラムで，シグニチャを作成しておく必要があります。
ただし，オブジェクト指向機能の場合，クラス定義のシグニチャを作成する代わりに，インタフェース定義を使用する方法もあります。インタフェース定義は，実装するクラス定義とインタフェースの構成を変更したい場合などに使用します。インタフェースの詳細は，「20.　オブジェクト指向機能」を参照してください。

リポジトリファイルの生成
1.で作成したシグニチャを持つ，参照先の翻訳単位の原始プログラムをコンパイルして，リポジトリファイルを生成します。リポジトリファイルの生成方法については，「33.3.2　リポジトリファイルの単独生成」を参照してください。

原始プログラムの作成
原始プログラムを作成します。
参照元の翻訳単位で，環境部構成節のリポジトリ段落に，参照先の翻訳単位名を指定します。また，1.でシグニチャだけを作成した参照先の翻訳単位の原始プログラムも完成させます。

リポジトリファイルの取り込みとコンパイル
リポジトリファイルの格納ディレクトリに，2.で生成した，参照先の翻訳単位から生成したリポジトリファイルを格納します。リポジトリファイルの格納ディレクトリについては，「33.2.4　リポジトリファイルの参照方法」を参照してください。
翻訳単位をコンパイルすると，コンパイラによってリポジトリファイルが読み込まれ，参照先の翻訳単位のシグニチャと，参照元の翻訳単位のINVOKE文，SET文，関数一意名などの参照情報との適合がチェックされます。適合チェックの詳細は，「33.1.3　リポジトリファイルに格納される情報と適合チェック」を参照してください。

実行可能ファイルまたは共用ライブラリの生成
4.で生成したオブジェクトファイルをリンカによって結合して，実行可能ファイルまたは共用ライブラリを生成します。

33.1.3　リポジトリファイルに格納される情報と適合チェック

リポジトリファイルには，関数定義，クラス定義，およびインタフェース定義のシグニチャ（定義情報）が格納されます。COBOL2002コンパイラは，コンパイル時にリポジトリファイルを使用して，次の適合チェックをします。

関数定義の場合

参照元の引数と参照先の返却項目の適合がチェックされます。

クラス定義およびインタフェース定義の場合

オブジェクトの適合がチェックされます。このとき，メソッド定義を呼び出すときの引数と返却項目の適合についても，チェックされます。

適合していれば，実行時に関数定義やメソッド定義を呼び出せます。引数と返却項目の適合については，マニュアル「COBOL2002　言語　標準仕様編　10.7 引数と返却項目の適合」を参照してください。また，オブジェクトの適合については，マニュアル「COBOL2002　言語　標準仕様編　5.2.7 適合とインタフェース」および「20.　オブジェクト指向機能」を参照してください。

33.2　リポジトリファイル

COBOL2002の場合，翻訳単位の原始プログラムをコンパイルしたときに出力される外部リポジトリは，リポジトリファイル（.rep）に格納されます。

リポジトリファイルは，ソースファイルと1対1の関係となっています。そのため，ソースファイルをコンパイルした場合，一つのソースファイルに対して一つのリポジトリファイルが生成されます。生成されるリポジトリファイルの名称は，ソースファイルの名称と同じで，拡張子が.repとなります。

＜この節の構成＞

33.2.1　リポジトリファイルの生成とコンパイル時の利用

33.2.2　ソースファイル，リポジトリファイル，およびリポジトリ段落の関係

33.2.3　リポジトリファイルの生成方法

33.2.4　リポジトリファイルの参照方法

33.2.1　リポジトリファイルの生成とコンパイル時の利用

関数定義の場合とオブジェクト指向機能の場合について，それぞれリポジトリファイルの生成とコンパイル時のリポジトリファイルの利用について，例を示します。

＜この項の構成＞

(1)　関数定義の場合

(2)　オブジェクト指向機能の場合

(1)　関数定義の場合

関数定義を呼び出すCOBOLプログラムの場合の例を，次に示します。なお，関数定義については，「2.5　利用者定義関数」を参照してください。

関数定義FUNC1が含まれるソースファイルFUNC1.cblをコンパイルして，リポジトリファイルFUNC1.repを生成します。

関数定義FUNC1を参照するプログラム定義PROGRAM1で，環境部構成節のリポジトリ段落に，参照する関数定義FUNC1を指定します。

プログラム定義PROGRAM1をコンパイルすると，リポジトリ段落の指定を基に，関数定義FUNC1が含まれるリポジトリファイルFUNC1.repが検索して取り込まれます。リポジトリファイルの検索規則については，「33.2.4　リポジトリファイルの参照方法」の「(2)　リポジトリファイルの検索」を参照してください。

コンパイラは，リポジトリファイルから取り込んだ関数定義FUNC1の情報と，参照しているプログラム定義PROGRAM1の関数一意名FUNCTION FUNC1の情報の適合をチェックします。このとき，情報が適合していなければエラーメッセージが出力され，適合していればコンパイルが正常終了します。

(2)　オブジェクト指向機能の場合

オブジェクト指向機能を呼び出すCOBOLプログラムの場合の例を，次に示します。なお，オブジェクト指向機能については，「20.　オブジェクト指向機能」を参照してください。

クラス定義CLASS1が含まれるソースファイルCLASS1.cblをコンパイルして，リポジトリファイルCLASS1.repを生成します。

クラス定義CLASS1を参照するプログラム定義PROGRAM1で，環境部構成節のリポジトリ段落に，参照するクラス定義CLASS1を指定します。

プログラム定義PROGRAM1をコンパイルすると，リポジトリ段落の指定を基に，クラス定義CLASS1が含まれるリポジトリファイルCLASS1.repが検索して取り込まれます。リポジトリファイルの検索規則については，「33.2.4　リポジトリファイルの参照方法」の「(2)　リポジトリファイルの検索」を参照してください。

コンパイラは，取り込んだクラス定義CLASS1の情報から，クラス定義CLASS1に含まれるメソッド定義METH-1の情報と，参照しているプログラム定義PROGRAM1のINVOKE文に指定したメソッドMETH-1の情報の適合をチェックします。このとき，情報が適合していなければエラーメッセージが出力され，適合していればコンパイルが正常終了します。

33.2.2　ソースファイル，リポジトリファイル，およびリポジトリ段落の関係

リポジトリファイル（.rep）は，COBOLソースファイルをコンパイルしたときに，そのソースファイルに格納されている翻訳単位ごとの定義情報から生成されます。

リポジトリファイルが生成されるディレクトリの規則について，次に示します。

環境変数CBLREPを設定している場合は，環境変数に指定したディレクトリに生成されます。環境変数CBLREPに複数のディレクトリを指定している場合は，最初に指定したディレクトリに生成されます。

環境変数CBLREPを設定していない場合は，カレントディレクトリに生成されます。

ここでは，複数の翻訳単位を含むCOBOLソースファイルを例にして，ソースファイル，リポジトリファイル，およびリポジトリ段落の関連を説明します。

＜この項の構成＞

(1)　ソースファイルとリポジトリファイルの関係

(2)　リポジトリファイルとリポジトリ段落の関係

(1)　ソースファイルとリポジトリファイルの関係

（例）

クラス定義，インタフェース定義，関数定義，およびプログラム定義を格納しているソースファイル（FILE1.cbl）をコンパイルすると，ソースファイルと同名で拡張子が（.rep）となったリポジトリファイル（FILE1.rep）が作成されます。リポジトリファイルには，それぞれの定義に対応する情報が格納されます。ただし，プログラム定義に対応する情報は，格納されません。

ソースファイルとリポジトリファイルの関係を，次に示します。

図33-1　ソースファイルとリポジトリファイルの関係

(2)　リポジトリファイルとリポジトリ段落の関係

リポジトリ段落に指定したクラス名，インタフェース名，利用者定義関数名，およびプロパティ名は，コンパイル時に同じソースファイル中に存在する翻訳単位，およびリポジトリファイル中から検索された情報と関連づけられます。

（例）

プログラム定義が関数定義を呼び出す場合の，リポジトリ段落の指定例について，次に示します。

プログラム定義のリポジトリ段落で，参照する利用者定義関数名（FUNC1）を宣言します。

プログラム定義（PROGRAM1）は，リポジトリ段落の宣言に従ってリポジトリファイル（FILE1.rep）の中の利用者定義関数名（FUNC1）の情報を参照できます。リポジトリファイル内の定義情報を検索する方法については，「33.2.4　リポジトリファイルの参照方法」の「(2)　リポジトリファイルの検索」を参照してください。

リポジトリファイルとリポジトリ段落の関係を，次に示します。

図33-2　リポジトリファイルとリポジトリ段落の関係

注意事項

リポジトリ段落で指定するクラス名，インタフェース名，または利用者定義関数名が，リポジトリ段落を指定した翻訳単位と異なるソースファイル中にある場合，参照先の翻訳単位をあらかじめコンパイルして，リポジトリファイルを生成しておく必要があります。

リポジトリ段落に指定したクラス名，インタフェース名，利用者定義関数名，およびプロパティ名は，リポジトリ段落を指定した定義中だけで有効となります。

33.2.3　リポジトリファイルの生成方法

リポジトリファイルは，ソースファイルにクラス定義，インタフェース定義，または関数定義を含む場合，ソースファイルのコンパイル時に生成されます。このとき，オブジェクトファイルを生成しないでリポジトリファイルだけの生成もできます。リポジトリファイルの生成方法については，「33.3.2　リポジトリファイルの単独生成」を参照してください。

＜この項の構成＞

(1)　リポジトリファイルの生成規則

(1)　リポジトリファイルの生成規則

リポジトリファイルの生成規則を，次に示します。

環境変数CBLREPを指定している場合

環境変数CBLREPに指定したディレクトリが指定順に検索され，ソースファイルと同じ名称のリポジトリファイルが最初に見つかった時点で，そのリポジトリファイルが更新されます。

ソースファイルと同じ名称のリポジトリファイルが見つからなければ，環境変数CBLREPに指定した最初の有効なディレクトリに，リポジトリファイルが新規に生成されます。

環境変数CBLREPを指定していない場合，または環境変数CBLREPに指定したディレクトリが存在しない場合

カレントディレクトリ※にソースファイルと同じ名称のリポジトリファイルが存在する場合，そのリポジトリファイルが更新されます

カレントディレクトリ※に，ソースファイルと同じ名称のリポジトリファイルが存在しない場合，カレントディレクトリ※に，リポジトリファイルが新規に生成されます。

注※

この場合のカレントディレクトリは，次のようになります。

ccbl2002コマンドを使用している場合
ccbl2002コマンドを起動したディレクトリ

注意事項

-Repository,Supオプションを指定している場合，すでに存在するリポジトリファイルは，更新されません。詳細は，「33.5　リポジトリファイルの生成に関連するコンパイラオプション」を参照してください。

リポジトリファイルの生成に関連するコンパイラオプションを指定しないでコンパイルした場合，インタフェースの情報（シグニチャ）に変更がないときは，リポジトリファイルが更新されません。詳細は，「33.5　リポジトリファイルの生成に関連するコンパイラオプション」を参照してください。

33.2.4　リポジトリファイルの参照方法

リポジトリ段落に指定したクラス名，インタフェース名，または利用者定義関数名の情報は，コンパイル時に次の順序で検索されます。

同じソースファイル中に存在する翻訳単位のクラス名，インタフェース名，または利用者定義関数名

リポジトリファイル中のクラス名，インタフェース名，または利用者定義関数名

注意事項

リポジトリ段落に指定したプロパティ名の定義情報は，同じリポジトリ段落に指定したクラス定義やインタフェース定義に含まれるため，個別の定義情報は検索されません。

＜この項の構成＞

(1)　同じソースファイル中に存在する翻訳単位名の検索

(2)　リポジトリファイルの検索

(1)　同じソースファイル中に存在する翻訳単位名の検索

COBOL2002コンパイラは，まず同じソースファイル中に存在する翻訳単位中で，リポジトリ段落に指定されたクラス名，インタフェース名，または利用者定義関数名を探します。

同じソースファイル中で，リポジトリ段落よりも後に参照するクラス名，インタフェース名，または利用者定義関数名を指定してもかまいません。また，リポジトリファイルに同じクラス名，インタフェース名，または利用者定義関数名が存在する場合でも，同じソースファイル中の翻訳単位名の情報が優先して使用されます。

図33-3　同じソースファイル中の翻訳単位名の検索の例

クラス名を定義するクラス定義DRINKが，リポジトリ段落でのクラス名DRINKの宣言より後に出現してもかまいません。

同じソースファイル中にクラス名DRINKの情報があるため，リポジトリファイルは参照されません。

(2)　リポジトリファイルの検索

リポジトリファイルは，次の順序で検索されます。

環境変数CBLREPに指定したディレクトリ

カレントディレクトリ※

環境変数CBLSYSREPに指定したディレクトリ

インストールディレクトリ下のrepディレクトリ

注※

この場合のカレントディレクトリは，次のようになります。

ccbl2002コマンドを使用している場合
ccbl2002コマンドを起動したディレクトリ

環境変数CBLREPには，リポジトリファイルの検索ディレクトリをカレントディレクトリ以外の場所に指定したい場合に設定します。環境変数CBLSYSREPは，共用ライブラリとリポジトリファイルだけが提供されている場合など，生成元ソースファイルのないリポジトリファイルの検索ディレクトリを設定します。これらの環境変数の詳細については，「32.6　コンパイラ環境変数」を参照してください。

なお，標準クラスのBASEクラスは，インストールディレクトリ下のrepディレクトリに格納されています。BASEクラスについては，「COBOL2002　言語　標準仕様編　12.2 BASEクラス」を参照してください。

翻訳単位名の検索時，同じディレクトリに複数のリポジトリファイルが存在する場合，検索する翻訳単位名と同名のリポジトリファイルの中が検索され，見つからなければ，アルファベット順にリポジトリファイルが検索され，見つかった時点で検索が終了します。

検索したディレクトリ下にリポジトリファイルがない場合や，リポジトリファイルに読み込み権限がない場合，リポジトリファイルが不当な場合は，コンパイル時にエラーメッセージが出力され，コンパイルが終了します。

33.3　リポジトリ段落を指定したソースファイルのコンパイル方法

異なるソースファイルで定義されたクラス名，インタフェース名，利用者定義関数名をリポジトリ段落に指定したソースファイルをコンパイルする場合，それらの定義を含むソースファイルを先にコンパイルしておく必要があります。

リポジトリ段落で参照するクラス定義，インタフェース定義，または関数定義のような翻訳単位を含むソースファイルを先にコンパイルしておく必要があります。

翻訳単位別にソースファイルをコンパイルする方法を，次に示します。

＜この節の構成＞

33.3.1　リポジトリ段落でほかの翻訳単位を参照する場合のコンパイル

33.3.2　リポジトリファイルの単独生成

33.3.3　プログラム定義だけのコンパイル

33.3.1　リポジトリ段落でほかの翻訳単位を参照する場合のコンパイル

リポジトリ段落でほかの翻訳単位を参照する場合，その翻訳単位を含む別のソースファイルを，先にコンパイルしておく必要があります。

例えば，次のように，ソースファイルPROGRAM1.cbl内のプログラム定義PROGRAM1で，リポジトリ段落に関数定義FUNC1を指定して参照する場合，FUNC1を含むソースファイルFUNC1.cblを先にコンパイルし，その後でソースファイルPROGRAM1.cblをコンパイルする必要があります。

この場合，次のようなコマンドを指定して，コンパイルします。

ccbl2002 FUNC1.cbl -Main,System PROGRAM1.cbl

ソースファイルでコンパイル順序を考慮したくない場合は，-Repository,Genオプションを使用して，コンパイルを実行する前にリポジトリファイルだけを先に生成しておく必要があります。-Repository,Genオプションの詳細については，「33.3.2　リポジトリファイルの単独生成」を参照してください。

33.3.2　リポジトリファイルの単独生成

ソースファイルのコンパイル時に-Repository,Genオプションを指定すると，ソースファイルのコンパイルが実行されないで，リポジトリファイルだけを作成できます。-Repository,Genオプションは，インタフェース部分だけを作成した翻訳単位を含むソースファイルをコンパイルしたり，互いに参照し合う翻訳単位をコンパイルしたりする場合に使用します。

ここでは，-Repository,Genオプションの使用方法について説明します。-Repository,Genオプションの指定方法や規則の詳細については，「32.　COBOLソースの作成とコンパイル」を参照してください。

＜この項の構成＞

(1)　インタフェース部分だけを作成した翻訳単位のコンパイル

(2)　互いに参照し合う翻訳単位のコンパイル

(1)　インタフェース部分だけを作成した翻訳単位のコンパイル

翻訳単位が未完成であっても，そのインタフェース部分だけが決まっていれば，-Repository,Genオプションによってリポジトリファイルを作成できます。必要なリポジトリファイルを作成しておけば，リポジトリ段落に未完成の翻訳単位の名前を指定した原始プログラムでも，コンパイルできるようになります。この機能を利用すると，参照先の翻訳単位が未完成の状態でも，参照元の翻訳単位に-Compile,NoLinkオプションを指定してコンパイルを実行し，構文レベルの誤りがないか確認できます。

例えば，インタフェース部分だけが決まっているクラス定義CLASS1およびそれをリポジトリ段落に指定したプログラム定義PROGRAM1があり，それぞれCLASS1.cblファイルおよびPROGRAM1.cblファイルに格納されているとします。この場合は，次の手順でPROGRAM1.cblをコンパイルします。

CLASS1に対応するリポジトリファイルを生成する
「ccbl2002 -Repository,Gen CLASS1.cbl」と指定すると，CLASS1がインタフェース部分だけ作成されていても，リポジトリファイルCLASS1.repが作成されます。

CLASS1のリポジトリファイルの情報を取り込み，PROGRAM1をコンパイルする
「ccbl2002 PROGRAM1.cbl」と指定すると，1で作成したCLASS1.repがCOBOL2002コンパイラによって取り込まれ，PROGRAM1.cblがコンパイルされます。

(2)　互いに参照し合う翻訳単位のコンパイル

プログラム単位を除く翻訳単位が，リポジトリ段落に互いの翻訳単位名を指定して，互いに定義情報を参照しあうような場合は，まず-Repository,Genオプションによって必要なリポジトリファイルを作成しておき，次にそれぞれの翻訳単位をコンパイルしてください。

例えば，互いに参照しているクラス定義CLASS1およびCLASS2があり，それぞれCLASS1.cblファイルおよびCLASS2.cblファイルに格納されているとします。CLASS1.cbl，CLASS2.cblの順序でコンパイルしたい場合は，次の手順で互いのクラス定義をコンパイルします。

CLASS2に対応するリポジトリファイルを生成する
「ccbl2002 -Repository,Gen CLASS2.cbl」と指定すると，リポジトリファイルCLASS2.repが作成されます。

CLASS2のリポジトリファイルの情報を取り込み，CLASS1をコンパイルする
「ccbl2002 CLASS1.cbl」と指定すると，1で作成されたCLASS2.repがCOBOL2002コンパイラによって取り込まれ，CLASS1.cblがコンパイルされます。このとき，CLASS1のリポジトリファイルCLASS1.repが作成されます。

CLASS1のリポジトリファイルの情報を取り込み，CLASS2をコンパイルする
「ccbl2002 CLASS2.cbl」と指定すると，2で作成されたCLASS1.repがCOBOL2002コンパイラによって取り込まれ，CLASS2.cblがコンパイルされます。

注意事項

一つのソースファイル中でスタックコンパイルとして翻訳単位を複数定義し，その中で互いに参照する場合は，リポジトリファイルを先に作成する必要はなく，一度にコンパイルできます。

互いに参照し合う翻訳単位を含むソースファイルから別々の共用ライブラリを作成できません。

33.3.3　プログラム定義だけのコンパイル

プログラム定義だけで構成されているソースファイルをコンパイルする場合，リポジトリ段落を使用してほかのプログラム定義を参照しないため，特に順番を考慮しないでコンパイルできます。

33.4　リポジトリファイルの管理

＜この節の構成＞

33.4.1　外部リポジトリに関連したコンパイルエラー発生時の対処方法

33.4.2　リポジトリ管理ツール

33.4.1　外部リポジトリに関連したコンパイルエラー発生時の対処方法

この項では，外部リポジトリを使用したCOBOLプログラムをコンパイルしたときに出力されるコンパイルエラーの対処方法について，次のような場合に分けて説明します。

外部リポジトリに翻訳単位が見つからない場合

メソッドまたは利用者定義関数の定義情報が適合しない場合

インタフェースを実装，またはメソッドの上書きができない場合

＜この項の構成＞

(1)　外部リポジトリに翻訳単位が見つからない場合

(2)　メソッドまたは利用者定義関数の定義情報が適合しない場合

(3)　インタフェースを実装，またはメソッドの上書きができない場合

(1)　外部リポジトリに翻訳単位が見つからない場合

リポジトリ段落に記述した参照先の翻訳単位の定義情報が外部リポジトリに見つからない場合，コンパイルエラーが出力されます。コンパイルリストを使った対処方法を次に説明します。

注意

外部リポジトリの検索手順は，「33.2.4　リポジトリファイルの参照方法」の「(2)　リポジトリファイルの検索」を参照してください。コンパイルリストについては，「付録C　コンパイルリスト」を参照してください。

図33-4　参照元の翻訳単位を含むCOBOLプログラムのコンパイルリスト（外部リポジトリに翻訳単位が見つからない場合）

コンパイルリストで，?が付いた個所（上記の図の1.）の記述を参照し，翻訳単位の名称（CLS1），CLASS，INTERFACE，FUNCTION，およびPROPERTYの指定が正しいかを確認してください。

記述が誤っている場合は，COBOLプログラムの誤りを修正してください。

記述が正しい場合は，記述した翻訳単位を定義したCOBOLプログラムを先にコンパイルし，「33.2.4　リポジトリファイルの参照方法」の「(2)　リポジトリファイルの検索」に記載している検索対象のディレクトリにリポジトリファイルを作成してください。

(2)　メソッドまたは利用者定義関数の定義情報が適合しない場合

INVOKE文や関数一意名で，呼び起こし対象のメソッドまたは利用者定義関数の定義情報が適合しない場合，コンパイルエラーが出力されます。コンパイルリストを使った対処方法を次に説明します。

呼び起こすメソッドを定義したクラス，または利用者定義関数が定義されたCOBOLプログラムを特定できる場合は，「(a)　COBOLプログラムを使った対処方法」に記載している手順でコンパイルエラーの要因を修正してください。COBOLプログラムが特定できない場合は，「(b)　リポジトリファイルを使った対処方法」に記載している手順でコンパイルエラーの要因を修正してください。

注意

適合チェックの詳細は，マニュアル「COBOL2002　言語　標準仕様編　10.7 引数と返却項目の適合」を参照してください。コンパイルリストについては，「付録C　コンパイルリスト」を参照してください。

(a)　COBOLプログラムを使った対処方法

図33-5　参照元の翻訳単位を含むCOBOLプログラムのコンパイルリスト（メソッドまたは利用者定義関数の定義情報が適合しない場合：その1）

コンパイルリストで，?が付いた個所（上記の図の1.）の記述を参照し，呼び起こすメソッドを定義したクラス，または利用者定義関数の名称（CLS1）を確認してください。

手順1.のクラスまたは利用者定義関数が定義されたCOBOLプログラムを参照し，定義情報を確認してください。

確認した定義情報を使ってCOBOLプログラムの誤りを修正してください。

(b)　リポジトリファイルを使った対処方法

図33-6　参照元の翻訳単位を含むCOBOLプログラムのコンパイルリスト（メソッドまたは利用者定義関数の定義情報が適合しない場合：その2）

コンパイルリストで，?が付いた個所（上記の図の1.）の記述を参照し，呼び起こすメソッドを定義したクラス，または利用者定義関数の名称（CLS1）を確認してください。

手順1.のクラスまたは利用者定義関数の名称（CLS1）を，参照元のCOBOLプログラムで最初に定義した，リポジトリ段落の行番号6を確認してください（上記の図の2.）。

手順2.の行番号6を基に，参照しているリポジトリファイル名（/users/cobol2002/CLASS1.rep）をコンパイルリストで確認してください（上記の図の3.）。

手順3.で確認したリポジトリファイル名（/users/cobol2002/CLASS1.rep）から，リポジトリ管理ツールを使用して定義情報を出力してください。リポジトリ管理ツールの仕様については，「33.4.2　リポジトリ管理ツール」を参照してください。

リポジトリ管理ツールが出力した定義情報（次の図の1.）を使ってCOBOLプログラムの誤りを修正してください。リポジトリ管理ツールの出力例を次に示します。

図33-7　リポジトリ管理ツールの出力例（メソッドまたは利用者定義関数の定義情報が適合しない場合：その3）

(3)　インタフェースを実装，またはメソッドの上書きができない場合

インタフェースを実装するとき，または継承したクラスのメソッドを上書きするとき，実装または上書きするメソッド原型（またはメソッド）がない，または適合しない場合は，コンパイルエラーが出力されます。

インタフェースを実装する場合を例に，コンパイルリストを使った対処方法を次に説明します。

実装するインタフェースが定義されたCOBOLプログラムを特定できる場合は，「(a)　COBOLプログラムを使った対処方法」に記載している手順でコンパイルエラーの要因を修正してください。COBOLプログラムが特定できない場合は，「(b)　リポジトリファイルを使った対処方法」に記載している手順でコンパイルエラーの要因を修正してください。

注意

適合チェックの詳細は，マニュアル「COBOL2002　言語　標準仕様編　5.2.7 適合とインタフェース」を参照してください。コンパイルリストについては，「付録C　コンパイルリスト」を参照してください。

(a)　COBOLプログラムを使った対処方法

図33-8　参照元の翻訳単位を含むCOBOLプログラムのコンパイルリスト（インタフェースを実装，またはメソッドの上書きができない場合：その1）

コンパイルリストで，?が付いた個所（上記の図の1.）の記述を参照し，実装するインタフェース名（INT1）を確認してください。

手順1.のインタフェース（INT1）が定義されたCOBOLプログラムを参照し，定義しているメソッド原型を確認してください。

確認したメソッド原型をすべて実装するようにCOBOLプログラムを修正してください。

(b)　リポジトリファイルを使った対処方法

図33-9　参照元の翻訳単位を含むCOBOLプログラムのコンパイルリスト（インタフェースを実装，またはメソッドの上書きができない場合：その2）

コンパイルリストで，?が付いた個所（上記の図の1.）の記述を参照し，実装するインタフェースの名称（INT1）を確認してください。

手順1.のインタフェースの名称（INT1）を，参照元のCOBOLプログラムで最初に定義したリポジトリ段落の行番号6を確認してください（上記の図の1.）。

手順2.の行番号6を基に，参照しているリポジトリファイル名（/users/cobol2002/INTERFACE1.rep）をコンパイルリストで確認してください（上記の図の2.）。

手順3.で確認したリポジトリファイル名（/users/cobol2002/INTERFACE1.rep）から，リポジトリ管理ツールを使用して定義情報を出力してください。リポジトリ管理ツールの仕様については，「33.4.2　リポジトリ管理ツール」を参照してください。

リポジトリ管理ツールが出力した定義情報（次の図の1.）を使って，インタフェース（INT1）で定義されたすべてのメソッド原型を実装するようにCOBOLプログラムを修正してください。リポジトリ管理ツールの出力例を次に示します。

図33-10　リポジトリ管理ツールの出力例（インタフェースを実装，またはメソッドの上書きができない場合：その3）

33.4.2　リポジトリ管理ツール

外部リポジトリに関連したコンパイルエラーが発生したとき，リポジトリファイルに格納された情報を確認すると，コンパイルエラーの原因を容易に特定できることがあります。

リポジトリ管理ツールは，リポジトリファイルに格納された翻訳単位の定義情報を出力できます。この項では，リポジトリ管理ツール（cbl2krepコマンド）の機能について説明します。

コンパイルエラー発生時の対処方法については，「33.4.1　外部リポジトリに関連したコンパイルエラー発生時の対処方法」を参照してください。

＜この項の構成＞

(1)　リポジトリ管理ツールの概要

(2)　リポジトリ管理ツールの機能詳細

(3)　リポジトリ管理ツール使用時のエラーメッセージ

(1)　リポジトリ管理ツールの概要

リポジトリ管理ツールには，次に示す機能があります。

翻訳単位の情報の表示

オプション概略の一覧（ヘルプ機能）

(a)　形式

cbl2krep 〔リポジトリファイル名〕 … 〔オプション〕 …

リポジトリファイル名

リポジトリファイル名を指定します。ファイルの表示をするときは，指定した順序に従ってリポジトリファイルが処理されます。

オプション

リポジトリファイルをどのように処理するかを指定するオプションです。次のオプションを指定できます。

-list -help

オプションの詳細については，「(2)　リポジトリ管理ツールの機能詳細」を参照してください。

リポジトリファイル名およびオプションの指定を省略した場合，リポジトリ管理ツールの指定形式を出力します。

(b)　終了コード

リポジトリ管理ツールの終了コードを次の表に示します。

表33-1　リポジトリ管理ツールの終了コード

終了コード | 意味
0 | 正常終了
1 | エラーが発生
2 | 回復不能エラーが発生

(c)　注意事項

リポジトリ管理ツールを使用するときの注意事項を次に示します。

リポジトリファイル名は，.repを付けて指定する必要があります。

複数のオペランドを指定する場合は，各オペランドを空白またはタブで区切ります。

複数のリポジトリファイル名を指定できる個所には，ワイルドカード（*）が使用できます。

-helpオプションを指定した場合，そのほかのオプションやリポジトリファイル名の指定は無視されます。

オプションで使用する文字は，英大文字と英小文字は等価とみなされます。

リポジトリファイル名，および翻訳単位名で使用する文字は，英大文字と英小文字が等価とみなされません。

(2)　リポジトリ管理ツールの機能詳細

(a)　翻訳単位情報の表示

形式

cbl2krep リポジトリファイル名1 … -list

機能

指定したリポジトリファイル中の翻訳単位の情報を標準出力に出力します。ただし，標準出力に出力されるのは，指定したリポジトリファイル内の定義情報だけです。継承したクラスやインタフェースのプロパティ情報，およびメソッド情報は出力されません。

オペランド

リポジトリファイル名1

表示したいリポジトリファイルを指定します。

-list

リポジトリファイル中の翻訳単位の情報を標準出力に出力します。

-listオプションを指定したときに出力されるクラス定義の翻訳単位情報の内容を次の図に，関数定義の翻訳単位情報の表示を「図33-12　-listオプションを指定したときに出力される関数定義の翻訳単位情報の内容」に示します。

図33-11　-listオプションを指定したときに出力されるクラス定義の翻訳単位情報の内容

リポジトリファイルヘッダ情報
リポジトリファイル名，リポジトリファイルの生成時刻（YYYY-MM-DD 年-月-日，HH:MM:SS 時:分:秒），およびリポジトリファイルを生成したコンパイラ名（バージョン（VV-RR）を含む）が表示されます。コンパイラ名の（X）は，COBOL2002の稼働プラットフォーム識別を示します。詳細は「付録J.2　このマニュアルでの表記」を参照してください。リポジトリファイル名はコマンドラインに指定した名前で表示されます。

生成時刻
リポジトリファイル内の翻訳単位情報の生成時刻（YYYY-MM-DD 年-月-日，HH:MM:SS 時:分:秒）が表示されます。

継承クラス・インタフェース情報
リポジトリ段落に指定した翻訳単位名のうち，INHERITS句に指定したクラス名およびインタフェース名が出力されます。括弧内には，翻訳単位の種別が出力されます。

参照翻訳単位情報
リポジトリ段落に指定した翻訳単位名のうち，INHERITS句に指定していない翻訳単位名が出力されます。括弧内には，翻訳単位の種別が出力されます。

プロパティ情報
クラス定義に指定したオブジェクトプロパティの情報（プロパティ名，参照（GET）／更新（SET）種別，データの属性情報）が出力されます。プロパティ情報は，ファクトリオブジェクトとインスタンスオブジェクトとで別々に出力されます。出力される項目がない場合は，「None」が出力されます。出力される属性情報については，「属性情報の詳細」に示します。

メソッド情報
クラス定義に指定したメソッドの情報（メソッド名，引数／返却項目の情報）が出力されます。メソッド情報は，ファクトリオブジェクトとインスタンスオブジェクトとで別々に出力されます。出力される項目がない場合は，「None」が出力されます。

図33-12　-listオプションを指定したときに出力される関数定義の翻訳単位情報の内容

リポジトリファイルヘッダ情報
リポジトリファイル名，リポジトリファイルの生成時刻（YYYY-MM-DD 年-月-日，HH:MM:SS 時:分:秒），およびリポジトリファイルを生成したコンパイラ名（バージョン（VV-RR）を含む）が表示されます。コンパイラ名の（X）は，COBOL2002の稼働プラットフォーム識別を示します。詳細は「付録J.2　このマニュアルでの表記」を参照してください。リポジトリファイル名はコマンドラインに指定した名前で表示されます。

参照翻訳単位情報
リポジトリ段落に指定した翻訳単位名が出力されます。括弧内には，翻訳単位の種別が出力されます。

関数情報
関数定義の情報（関数名，引数／返却項目の情報）が出力されます。

属性情報の詳細

データ項目の種類と出力される属性情報または引数／返却項目の情報の対応を次の表に示します。

表33-2　データ項目の種類と属性情報または引数／返却項目の情報

データ項目の種類
出力される属性情報または引数／返却項目の情報

固定長集団項目
－

可変長集団項目
－

日本語集団項目
GROUP-USAGE NATIONAL

数字編集項目
－

英数字編集項目
－

日本語編集項目
－

外部10進項目
USAGE DISPLAY
ただし，SIGN句の属性情報がある場合，SIGN句の属性情報に従って次のどれかが表示されます。
USAGE DISPLAY SIGN IS LEADING
USAGE DISPLAY SIGN IS LEADING SEPARATE
USAGE DISPLAY SIGN IS TRAILING SEPARATE

内部10進項目
USAGE COMP-3

外部浮動小数点項目
USAGE DISPLAY

内部浮動小数点項目
USAGE COMP-1
USAGE COMP-2

アドレスデータ項目／ポインタ項目
USAGE ADDRESS

指標データ項目
USAGE INDEX

2進項目
USAGE COMP
USAGE COMP-5
USAGE COMP-X

ブール項目
USAGE BIT
USAGE DISPLAY

英字／英数字項目
USAGE DISPLAY

日本語項目
USAGE NATIONAL

オブジェクト参照データ項目
OBJECT REFERENCE
（インタフェース名／[FACTORY OF] ACTIVE CLASS／[FACTORY OF] クラス名 [ONLY] 指定ありの場合，その指定も出力されます）

（凡例）

－：属性情報なし

(b)　オプション概略の一覧

形式

cbl2krep -help

機能

オプションの概略を一覧表示します。

(3)　リポジトリ管理ツール使用時のエラーメッセージ

(a)　エラーメッセージの形式

リポジトリ管理ツールが出力するメッセージの形式を，次に示します。

形式

cbl2krep : error エラー番号: メッセージ内容

このマニュアルでは，リポジトリ管理ツールが出力するエラーメッセージを，次の形式で記載します。

エラー番号

メッセージ内容

（要因）

エラーが返される要因を示す。

（S）

システムの処置を示す。

（P）

プログラム作成者の処置を示す。

エラーメッセージの内容を次に示します。

(b)　エラーメッセージの内容

リポジトリ管理ツールが出力するメッセージのエラー番号およびメッセージ内容を，次に示します。

0001

Cannot open file -- '******'.

0002

Cannot read file -- '******'.

0003

annot write file -- '******'.

（要因）

リポジトリファイルの書き込みでI/Oエラーが発生した。次の要因が考えられる。

カレントディレクトリがネットワークディレクトリのとき，ネットワーク障害が発生している。

ディスクの空きがない。または，ディスク障害が発生している。

（S）

cbl2krepの実行を中止する。

（P）

何度かコンパイルを試みる。

コンピュータの管理者に問い合わせる。

0004

File -- '******' is not a repository file.

0005

Repository file -- '******' is not readable because of unsuitable target machine.

0006

Repository file -- '******' is corrupt.

0007

Cannot find compilation unit name -- '******' in repository file.

0008

Duplicate compilation unit name -- '******'.

0009

Logical error occurred. Error code : ******.

（要因）

cbl2krepの実行で，内部的に論理エラーが発生した。

（S）

cbl2krepの実行を中止する。

（P）

当社保守員に連絡する。

0010

Out of memory.

（要因）

cbl2krepが稼働するメモリが足りない。

（S）

cbl2krepの実行を中止する。

（P）

削除できる資源を削除して再実行する。

0011

Invalid option -- '******' is specified.

0012

Option -- '******' has no parameter.

0013

Option -- '******' is too long.

0014

Repository file -- '******' is not accessable by this version cbl2krep.

0017

Cannot find class name -- '******' in repository file.

0018

Cannot find interface name -- '******' in repository file.

0019

Unnecessary parameter specified for option -- '******'.

0020

No repository file specified.

0023

Cannot open a file because many files are opened by other programs.

（要因）

ほかのプログラムで，システムの制限までファイルを開いている。

（S）

cbl2krepの実行を中止する。

（P）

ほかのプログラムで使用しているファイルを閉じる。

0025

Cannot find file -- '******'.

33.5　リポジトリファイルの生成に関連するコンパイラオプション

リポジトリファイルの生成に関連するコンパイラオプションについて説明します。

-Repository,Genオプション

-Repository,Genオプションを指定した場合，ソースファイルからオブジェクトファイルを生成しないで，リポジトリファイルだけを生成します。詳細は，「33.3.2　リポジトリファイルの単独生成」を参照してください。

-Repository,Supオプション

-Repository,Supオプションを指定した場合，コンパイル時にリポジトリファイルが更新されません。ただし，リポジトリファイルが存在しない場合は，-Repository,Supオプションの指定に関係なく，リポジトリファイルが新規に生成されます。

-Repository,Supオプションを指定した場合は，コンパイルによってオブジェクトファイルが生成されます。

-RepositoryCheckオプション

-RepositoryCheckオプションを指定した場合，同じソースファイル中の翻訳単位の定義とリポジトリファイル中の情報に相違があるとき，コンパイル時にKCCC3301C-Wの警告メッセージが出力されます。このとき，リポジトリファイルは更新されません。

-RepositoryCheckオプションによって警告メッセージが出力される例を，次に示します。

-RepositoryCheckオプションを指定した場合，FILE1.cblのクラスDRINKの定義情報と，FILE1.repのクラスDRINKの情報に相違があるため，警告メッセージが出力されます。

このとき，FILE1.repは更新されません。

おのおののコンパイラオプションを指定した場合，コンパイル時にリポジトリファイルが更新されるかどうかを，次に示します。

指定するコンパイラオプション | インタフェースの情報（シグニチャ）に変更あり | インタフェースの情報（シグニチャ）に変更なし
オプションなし | ○ | ×
-Repository,Genオプションを指定 | ○ | ○
-Repository,Supオプションを指定 | × | ×
-RepositoryCheckオプションを指定 | × | ×

（凡例）

○：リポジトリファイルが更新される

×：リポジトリファイルが更新されない

34.　実行可能ファイルと共用ライブラリの作成

この章では，プログラムをコンパイルして作成したオブジェクトファイルをリンクして，実行可能ファイルや共用ライブラリを作成する方法について説明します。

＜この章の構成＞

34.1　実行可能ファイルの作成方法

34.2　共用ライブラリの作成方法

34.1　実行可能ファイルの作成方法

実行可能ファイルとは，一つ以上のプログラムによって構成され，制御プログラムから直接呼び出して実行できるファイルのことです。

ここでは，ccbl2002コマンドを実行してCOBOLプログラムから実行可能ファイルを作成する方法と，Cプログラムのオブジェクトファイルなどとリンクする方法について説明します。

＜この節の構成＞

34.1.1　コンパイルとリンクを同時に実行する方法

34.1.2　コンパイルとリンクを別々に実行する方法

34.1.3　ccbl2002コマンドの-lオプション

34.1.4　ccbl2002コマンド使用時の検索ライブラリの種別指定

34.1.5　ccコマンドおよびldコマンドの-lオプション

34.1.1　コンパイルとリンクを同時に実行する方法

ccbl2002コマンドを使用すると，COBOLプログラムのコンパイルとリンクを同時に実行して，実行可能ファイルを生成できます。

ccbl2002コマンドの詳細については，「32.　COBOLソースの作成とコンパイル」を参照してください。

ccbl2002コマンドを使って実行可能ファイルを生成する例を，次に示します。

＜この項の構成＞

(1)　一つのCOBOLプログラムから実行可能ファイルを生成する

(2)　複数のCOBOLプログラムから実行可能ファイルを生成する

(3)　COBOLプログラムとCプログラムの混在した実行可能ファイルを生成する

(1)　一つのCOBOLプログラムから実行可能ファイルを生成する

一つのCOBOLプログラムをコンパイル，リンクして実行可能ファイルを生成する例を，次に示します。

ソースファイル名称：test01.cbl

      IDENTIFICATION DIVISION.
      PROGRAM-ID. TEST01.
               :
      PROCEDURE DIVISION.
               :
          STOP RUN.

ccbl2002コマンドの指定

COBOLプログラム"test01.cbl"に-Main,Systemオプションを指定し，実行可能ファイル名称に"test02"を指定します。

ccbl2002 -Main,System test01.cbl -OutputFile test02

上記のコマンドを実行すると，実行可能ファイル"test02"が生成されます。

(2)　複数のCOBOLプログラムから実行可能ファイルを生成する

複数のCOBOLプログラムをコンパイル，リンクして実行可能ファイルを生成する例を，次に示します。

ccbl2002コマンドの指定

主プログラムである"test01.cbl"に-Main,Systemオプションを指定し，副プログラムである"test02.cbl"には何も指定しないでccbl2002コマンドを実行します。

ccbl2002 -Main,System test01.cbl test02.cbl -OutputFile test03

上記のコマンドを実行すると，実行可能ファイル"test03"が生成されます。

(3)　COBOLプログラムとCプログラムの混在した実行可能ファイルを生成する

COBOLプログラムとCプログラムが混在する実行可能ファイルを生成する例を，次に示します。

ccbl2002コマンドの指定

主プログラムである"test01.cbl"に-Main,Systemオプションを指定し，副プログラムである"test02.c"には何も指定しないでccbl2002コマンドを実行します。

ccbl2002 -Main,System test01.cbl test02.c -OutputFile test03

上記のコマンドを実行すると，実行可能ファイル"test03"が生成されます。

34.1.2　コンパイルとリンクを別々に実行する方法

COBOLプログラムが複数ある場合，あらかじめccbl2002コマンドでオブジェクトファイルを作成しておき，その後ccbl2002コマンドやccコマンドでオブジェクトファイルをリンクして実行可能ファイルを生成できます。

＜この項の構成＞

(1)　ccbl2002コマンドによるリンク方法

(2)　ccコマンドによるリンク方法

(1)　ccbl2002コマンドによるリンク方法

ccbl2002コマンドでコンパイルとリンクを別々に実行する方法を，次に示します。

ccbl2002コマンドの指定

まず，COBOLプログラム"test01.cbl"および"test02.cbl"をコンパイルし，オブジェクトファイルを生成します。コンパイルだけを実行し，リンクを実行しない場合は，ccbl2002コマンドに-Compile,NoLinkオプションを指定します。

ccbl2002 -Main,System test01.cbl -Compile,NoLink
ccbl2002 test02.cbl -Compile,NoLink

次に，生成された"test01.o"および"test02.o"をccbl2002コマンドを使用してリンクします。

ccbl2002 test01.o test02.o -OutputFile test03

上記のコマンドを実行すると，実行可能ファイル"test03"が生成されます。

(2)　ccコマンドによるリンク方法

ccコマンドでコンパイルとリンクを別々に実行する方法を，次に示します。

ccbl2002コマンドの指定

まず，COBOLプログラム"test01.cbl"および"test02.cbl"をコンパイルし，オブジェクトファイルを生成します。コンパイルだけを実行し，リンクを実行しない場合は，ccbl2002コマンドに-Compile,NoLinkオプションを指定します。

ccbl2002 -Main,System test01.cbl test02.cbl -Compile,NoLink

次に，生成された"test01.o"および"test02.o"をccコマンドを使用してリンクします。

cc test01.o test02.o -o test03 -L/opt/HILNGcbl2k/lib -lcbl2k
  -lcbl2kml -lm

上記のコマンドを実行すると，実行可能ファイル"test03"が生成されます。

注

-Lオプションに指定する検索パスや-lオプションに指定するライブラリ名については，「34.1.5　ccコマンドおよびldコマンドの-lオプション」の「(1)　COBOL2002実行時ライブラリを使用する場合」を参照してください。

注意事項

AIXシステムでは，cc／ldコマンドで特にオプションを指定しない場合，参照関係がないファイルは，リンク対象になりません。参照関係がないファイルをリンク対象とするには，-bgcbypassリンカオプションを指定してください。
COBOLでは，ほかのCOBOLシステムとの動作互換を高めるため，ccbl2002やccblコマンドで内部的に-bgcbypassリンカオプションを仮定しています。

Linux(x86) COBOL2002で生成したオブジェクトを，ccコマンドを使用してリンクする場合，32bitアプリケーションとしてリンクしなければなりません。x64向けLinux環境では，-m32オプションの指定が必要です。なお，ccコマンドのオプションの詳細は，システムのマニュアルを参照してください。

34.1.3　ccbl2002コマンドの-lオプション

ccbl2002コマンドを使って実行可能ファイルを生成する場合，使用する機能によって，-lオプションの指定が必要になります。

注意事項

ccbl2002コマンドは，システムのリンカ（ccコマンド）を呼び出して実行可能ファイルを作成します。リンカは，コマンド行に指定された順序どおりにファイルを処理します。このため，ccbl2002コマンドでは，使用する機能のライブラリ（-lisam，-lrsortなど）をその機能を使用するCOBOLプログラムよりあとに指定してください。

＜この項の構成＞

(1)　整列併合機能を使用する場合

(2)　画面機能を使用する場合（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）

(3)　索引ファイル機能を使用する場合

(4)　データコミュニケーション機能をシミュレーションによってテストデバッグする場合（UNIX32，AIX(64)，Linux(x64)，Linux(IPF64)で有効）

(5)　プリンタを使用する場合（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）

(6)　CGIプログラム作成支援機能を使用する場合（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）

(7)　マルチスレッド機能を使用する場合

(8)　HiRDBによる索引ファイル入出力機能を使用する場合（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC)で有効）

(9)　XML対応COBOLプログラムを使用する場合（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(10)　ODBCインターフェース機能を使用する場合（Linux(x86)，Linux(x64)で有効）

(1)　整列併合機能を使用する場合

SORTライブラリ（-lrsort，-lrsort64オプションなど）を使用する場合は，ライブラリの検索パスに次の指定が必要です。

UNIX32の場合

/opt/HISORTlib/lib

UNIX64の場合

/opt/HISORTlib64/lib

(a)　マルチスレッド機能を使用しない場合

UNIX32の場合

-lrsortオプションの指定が必要です。

UNIX64の場合

-lrsort64オプションの指定が必要です。

(b)　マルチスレッド機能を使用する場合

UNIX32の場合

-lmsortオプションの指定が必要です。

UNIX64の場合

-lmsort64オプションの指定が必要です。

(2)　画面機能を使用する場合（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）

XMAPの入出力ドライバのためのオプションの指定が必要です。

詳細については，マニュアル「画面・帳票サポートシステム XMAP3 Server」を参照してください。

(3)　索引ファイル機能を使用する場合

ISAMライブラリ（-lisam，-lisam64オプションなど），SORTライブラリ（-lrsort，-lrsort64オプションなど）を使用する場合は，ライブラリの検索パスに次の指定が必要です。

UNIX32の場合

/opt/HIISlib/lib，/opt/HISORTlib/lib

UNIX64の場合

/opt/HIISlib64/lib，/opt/HISORTlib64/lib

(a)　マルチスレッド機能を使用しない場合

UNIX32の場合

-lisam，-lrsortオプションの指定が必要です。

UNIX64の場合

-lisam64，-lrsort64オプションの指定が必要です。

(b)　マルチスレッド機能を使用する場合

UNIX32の場合

-lmisam，-lmsortオプションの指定が必要です。

UNIX64の場合

-lmisam64，-lmsort64オプションの指定が必要です。

(4)　データコミュニケーション機能をシミュレーションによってテストデバッグする場合（UNIX32，AIX(64)，Linux(x64)，Linux(IPF64)で有効）

UNIX32，Linux(x64)，Linux(IPF64)の場合

-lcbl2kdcオプションの指定が必要です。

AIX(64)の場合

-lcbl2kdc64オプションの指定が必要です。

(5)　プリンタを使用する場合（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）

書式印刷機能（-XMAP,LinePrintオプション）でXMAP3を使用する場合，-lxmovlまたは-lxpwオプションが必要です。

(6)　CGIプログラム作成支援機能を使用する場合（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）

-lcbl2kcgiオプションの指定が必要です。

(7)　マルチスレッド機能を使用する場合

HP-UX(IPF)，HP-UX(IPF64)，Linux(x86)，Linux(x64)，Linux(IPF64)，Solaris(SPARC)の場合

-lpthreadオプションの指定が必要です。

AIX(32)，AIX(64)の場合

-lpthreadsオプションの指定が必要です。

(8)　HiRDBによる索引ファイル入出力機能を使用する場合（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC)で有効）

HiRDBのライブラリが必要です。

HiRDBのライブラリ指定については，マニュアル「HiRDBのUAP開発ガイドマニュアル」を参照してください。

(9)　XML対応COBOLプログラムを使用する場合（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

ccbl2002コマンドを使って，XMLドキュメントにアクセスするCOBOLプログラムをリンクできません。

XMLドキュメントにアクセスするCOBOLプログラムのコンパイルとリンクについては，マニュアル「COBOL2002　XML連携機能ガイド」を参照してください。

(10)　ODBCインターフェース機能を使用する場合（Linux(x86)，Linux(x64)で有効）

ODBCドライバマネージャのライブラリが必要です。ODBCドライバマネージャのライブラリ指定については，unixODBCに関するリファレンスなどを参照してください。

34.1.4　ccbl2002コマンド使用時の検索ライブラリの種別指定

ccbl2002コマンドを使って，リンクするときに検索するライブラリの種別（アーカイブファイルまたは共用ライブラリ）を指定するには，次のオプションを指定します。

なお，ccbl2002コマンドでは，指定したライブラリのあとに内部的にシステムライブラリが指定されます。システムライブラリにはアーカイブ提供がない場合があるため，オプションでアーカイブファイルを指定した場合には，必ず，続けて共用ライブラリ（システムの標準）検索のオプションを指定する必要があります。

HP-UX(IPF)，HP-UX(IPF64)の場合

-Wlおよび-aオプションを指定します。

-Wlおよび-aオプションは，HP-UX(IPF)およびHP-UX(IPF64)のccコマンドのオプションです。共用ライブラリ検索のオプションの指定は「default」です。

（例）

ccbl2002 -Main,System a.cbl b.o -L. -Wl,-a,archive -lxxx -Wl,-a,default

AIX(32)，AIX(64)の場合

-bオプションを指定します。

-bオプションは，AIX(32)およびAIX(64)の，ccコマンドまたはldコマンドのオプションです。共用ライブラリ検索のオプションの指定は「-bdynamic」です。

（例）

ccbl2002 -Main,System a.cbl b.o -L. -bstatic -lxxx -bdynamic

Solaris(SPARC)の場合

-Bオプションを指定します。

-Bオプションは，Solaris(SPARC)のccコマンドのオプションです。共用ライブラリ検索のオプションの指定は「-Bdynamic」です。

（例）

ccbl2002 -Main,System a.cbl b.o -L. -Bstatic -lxxx -Bdynamic

Linux(x86)の場合

-Wlおよび-Bオプションを指定します。

-Wlおよび-Bオプションは，Linux(x86)のccコマンドのオプションです。共用ライブラリ検索のオプションの指定は「-Bdynamic」です。

（例）

ccbl2002 -UniObjGen -Main,System a.cbl b.o -L. -Wl,-Bstatic -lxxx -Wl,-Bdynamic

Linux(x64)の場合

-Wlおよび-Bオプションを指定します。

-Wlおよび-Bオプションは，Linux(x64)のccコマンドのオプションです。共用ライブラリ検索のオプションの指定は「-Bdynamic」です。

（例）

ccbl2002 -UniObjGen -Main,System a.cbl b.o -L. -Wl,-Bstatic -lxxx -Wl,-Bdynamic

Linux(IPF64)の場合

-Wlおよび-Bオプションを指定します。

-Wlおよび-Bオプションは，Linux(IPF64)のccコマンドのオプションです。共用ライブラリ検索のオプションの指定は「-Bdynamic」です。

（例）

ccbl2002 -Main,System a.cbl b.o -L. -Wl,-Bstatic -lxxx -Wl,-Bdynamic

34.1.5　ccコマンドおよびldコマンドの-lオプション

ccコマンドおよびldコマンドを使って実行可能ファイルを生成したいときは，-lオプションについて次のような指定が必要です。ccコマンドおよびldコマンドの詳細については，システムのマニュアルを参照してください。-lオプションの詳細については，「34.1.3　ccbl2002コマンドの-lオプション」を参照してください。

＜この項の構成＞

(1)　COBOL2002実行時ライブラリを使用する場合

(2)　ccコマンドを使用する場合

(3)　DISPLAY文および浮動小数点形式データを使用する場合

(4)　テストデバッガを使用する場合（-TDInf，-CVInf，-TestCmd,Full，および-TestCmd,Simオプション指定時）

(5)　組み込み関数機能を使用する場合

(6)　HP-UX(IPF)またはHP-UX(IPF64)で動的なリンクを使用する場合

(7)　マルチスレッド機能を使用する場合

(8)　CGIプログラム作成支援機能を使用する場合（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）

(9)　HiRDBによる索引ファイル入出力機能を使用する場合

(10)　XML対応COBOLプログラムを使用する場合（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(11)　HP-UX(IPF)，HP-UX(IPF64)，またはSolaris(SPARC)で使用する場合

(12)　整列併合機能を使用する場合

(13)　索引ファイル機能を使用する場合

(14)　ODBCインターフェース機能を使用する場合（Linux(x86)，Linux(x64)で有効）

(1)　COBOL2002実行時ライブラリを使用する場合

COBOL2002実行時ライブラリには共用ライブラリが提供されています。次に共用ライブラリを示します。

システム名
共用ライブラリ

ファイル名
使用時に必要なオプション

HP-UX(IPF)
HP-UX(IPF64)
libcbl2k.so
-lcbl2k※1

AIX(32)
libcbl2k.a

AIX(64)
libcbl2k64.a
-lcbl2k64※2

Solaris(SPARC)
libcbl2k.so
-lcbl2k※1

Linux
libcbl2k.so

注※1

-lcbl2kオプション指定時は，常に共用ライブラリが参照されます。

また，-lcbl2kオプションに続いて-lcbl2kmlオプションの指定が必要です。COBOL2002でのライブラリ指定文字列（-lcbl2kなど）を使用するとき，ライブラリの検索パスにUNIX32，またはLinux(IPF64)の場合は「/opt/HILNGcbl2k/lib」の指定が，HP-UX(IPF64)，Linux(x64)の場合は「/opt/HILNGcbl2k64/lib」の指定が必要です。

注※2

-lcbl2k64オプション指定時は，常に共用ライブラリが参照されます。

また，-lcbl2k64オプションに続いて-lcbl2kml64オプションの指定が必要です。COBOL2002でのライブラリ指定文字列（-lcbl2k64など）を使用するとき，ライブラリの検索パスに「/opt/HILNGcbl2k64/lib」の指定が必要です。

注意事項

ccコマンドおよびldコマンドは，コマンド行に指定された順序どおりにファイルを処理します。このため，ccコマンドおよびldコマンドには，次の順序で引数を指定します。

-lcbl2k，-lcbl2k64，-lcbl2kml，および-lcbl2kml64オプションは，COBOLプログラムよりあとに指定する。

COBOLプログラムで使用する機能のライブラリ（-lisam，-lisam64，-lrsort，-lrsort64など）は，-lcbl2k，-lcbl2k64，-lcbl2kml，および-lcbl2kml64オプションよりあとに指定する。

（例）

HP-UX(IPF)の場合

 cc  xxx.o  -L/opt/HILNGcbl2k/lib -lcbl2k -lcbl2kml …
     -L/opt/HIISlib/lib -lisam -L/opt/HISORTlib/lib
     -lrsort … -lm

HP-UX(IPF64)の場合

 cc  xxx.o  +DD64 -L/opt/HILNGcbl2k64/lib -lcbl2k
     -lcbl2kml … -L/opt/HIISlib64/lib -lisam64
     -L/opt/HISORTlib64/lib lrsort64 … -lm

AIX(32)の場合

 cc  xxx.o  -L/opt/HILNGcbl2k/lib -lcbl2k -lcbl2kml …
     -L/opt/HIISlib/lib -lisam -L/opt/HISORTlib/lib
     -lrsort … -lm

AIX(64)の場合

 cc  xxx.o  -q64 -L/opt/HILNGcbl2k64/lib -lcbl2k64
     -lcbl2kml64 … -L/opt/HIISlib64/lib -lisam64
     -L/opt/HISORTlib64/lib -lrsort64 … -lm

Solaris(SPARC)の場合

 cc  xxx.o  -L/opt/HILNGcbl2k/lib -lcbl2k -lcbl2kml …
     -L/opt/HIISlib/lib -lisam -L/opt/HISORTlib/lib
     -lrsort … -lm

Linux(x86)の場合

 cc  xxx.o  -L/opt/HILNGcbl2k/lib -lcbl2k -lcbl2kml …
     -L/opt/HIISlib/lib -lisam -L/opt/HISORTlib/lib
     -lrsort … -lm

Linux(x64)の場合

 cc  xxx.o  -L/opt/HILNGcbl2k64/lib -lcbl2k -lcbl2kml …
     -L/opt/HIISlib64/lib -lisam64 -L/opt/HISORTlib64/lib
     -lrsort64 … -lm

Linux(IPF64)の場合

 cc  xxx.o  -L/opt/HILNGcbl2k/lib -lcbl2k -lcbl2kml …
     -L/opt/HIISlib64/lib -lisam64 -L/opt/HISORTlib64/lib
     -lrsort64 … -lm

(2)　ccコマンドを使用する場合

ccコマンドを使用して実行可能ファイルを作成するときは，ダイナミックローダライブラリオプションの指定が必要です。次にダイナミックローダライブラリオプションを示します。

HP-UX(IPF)，HP-UX(IPF64)の場合

-ldldオプションの指定が必要です。

AIX(32)，AIX(64)，Linux，Solaris(SPARC)の場合

-ldlオプションの指定が必要です。

(3)　DISPLAY文および浮動小数点形式データを使用する場合

-lmオプションの指定が必要です。

(4)　テストデバッガを使用する場合（-TDInf，-CVInf，-TestCmd,Full，および-TestCmd,Simオプション指定時）

-TDInf，-CVInf，-TestCmd,Full，および-TestCmd,Simオプションのどれかを指定してコンパイルしたCOBOLオブジェクトをリンクする場合，次の指定が必要です。

HP-UX(IPF)の場合

cc  xxx.o -L/opt/HILNGcbl2k/lib -lcbl2ktd -lcbl2k
   -lcbl2kml … -ldld …

HP-UX(IPF64)の場合

cc  xxx.o +DD64 -L/opt/HILNGcbl2k64/lib -lcbl2ktd -lcbl2k
   -lcbl2kml … -ldld …

AIX(32)，Linux(x86)，Linux(IPF64)，Solaris(SPARC)の場合

cc  xxx.o -L/opt/HILNGcbl2k/lib -lcbl2k -lcbl2kml … -ldl …

AIX(64)の場合

cc  xxx.o -q64 -L/opt/HILNGcbl2k64/lib -lcbl2k64
   -lcbl2kml64 … -ldl …

Linux(x64)の場合

cc  xxx.o -L/opt/HILNGcbl2k64/lib -lcbl2k -lcbl2kml … -ldl …

(5)　組み込み関数機能を使用する場合

次に示す組み込み関数を使用する場合，-lmオプションの指定が必要です。

ACOS関数，ASIN関数，ATAN関数，COS関数，SIN関数，TAN関数，LOG関数，LOG10関数，SQRT関数

(6)　HP-UX(IPF)またはHP-UX(IPF64)で動的なリンクを使用する場合

-DynamicLink,Call，-DynamicLink,IdentCallオプションを指定してコンパイルしたCOBOLオブジェクトをリンクする場合，-lelfオプションの指定が必要です。

また，動的なリンクを使用するプログラムをcc／ldコマンドでリンクするmakefileやシェルなどのプログラム開発用資産を，ほかのシステムからHP-UX(IPF)またはHP-UX(IPF64)へ移行する場合，-lelfオプションの指定が必要です。

(7)　マルチスレッド機能を使用する場合

HP-UX(IPF)，HP-UX(IPF64)の場合

-lcbl2kknおよび-lpthreadオプションの指定が必要です。

AIX(32)の場合

-lcbl2kmpおよび-lpthreadsオプションの指定が必要です。

AIX(64)の場合

-lcbl2kmp64および-lpthreadsオプションの指定が必要です。

Solaris(SPARC)，Linuxの場合

-lcbl2kmpおよび-lpthreadオプションの指定が必要です。

(8)　CGIプログラム作成支援機能を使用する場合（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）

-lcbl2kcgiオプションの指定が必要です。

(9)　HiRDBによる索引ファイル入出力機能を使用する場合

HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，Linux(IPF64)，Solaris(SPARC)の場合

-lcbl2krdオプションの指定およびHiRDBのライブラリが必要です。

AIX(64)の場合

-lcbl2krd64オプションの指定およびHiRDBのライブラリが必要です。

なお，HiRDB ライブラリを指定する際はCOBOL プログラムで次に示す機能を使用しないでください。

OLTP(OpenTP1)環境下での実行

複数接続機能

64 ビットモード（HP-UX(IPF)，AIX(32)，Solaris(SPARC)の場合）

32 ビットモード（HP-UX(IPF64)，AIX(64)，Linux(IPF64)の場合）

HiRDBのライブラリ指定については，マニュアル「HiRDBのUAP開発ガイドマニュアル」を参照してください。

(10)　XML対応COBOLプログラムを使用する場合（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

XMLアクセス用実行時ライブラリが必要です。ライブラリ指定については，マニュアル「COBOL2002　XML連携機能ガイド」を参照してください。

(11)　HP-UX(IPF)，HP-UX(IPF64)，またはSolaris(SPARC)で使用する場合

-lmオプションの指定が必要です。

(12)　整列併合機能を使用する場合

SORTライブラリ（-lrsort，-lrsort64オプションなど）を使用する場合は，ライブラリの検索パスに次の指定が必要です。

UNIX32の場合

/opt/HISORTlib/lib

UNIX64の場合

/opt/HISORTlib64/lib

(a)　マルチスレッド機能を使用しない場合

UNIX32の場合

-lrsortオプションの指定が必要です。

UNIX64の場合

-lrsort64オプションの指定が必要です。

(b)　マルチスレッド機能を使用する場合

UNIX32の場合

-lmsortオプションの指定が必要です。

UNIX64の場合

-lmsort64オプションの指定が必要です。

(13)　索引ファイル機能を使用する場合

ISAMライブラリ（-lisam，-lisam64オプションなど），SORTライブラリ（-lrsort，-lrsort64オプションなど）を使用する場合は，ライブラリの検索パスに次の指定が必要です。

UNIX32の場合

/opt/HIISlib/lib，/opt/HISORTlib/lib

UNIX64の場合

/opt/HIISlib64/lib，/opt/HISORTlib64/lib

(a)　マルチスレッド機能を使用しない場合

UNIX32の場合

-lisam，-lrsortオプションの指定が必要です。

UNIX64の場合

-lisam64，-lrsort64オプションの指定が必要です。

(b)　マルチスレッド機能を使用する場合

UNIX32の場合

-lmisam，-lmsortオプションの指定が必要です。

UNIX64の場合

-lmisam64，-lmsort64オプションの指定が必要です。

(14)　ODBCインターフェース機能を使用する場合（Linux(x86)，Linux(x64)で有効）

-lcbl2kodbcオプションの指定およびODBCドライバマネージャのライブラリが必要です。

ODBCドライバマネージャのライブラリ指定については，unixODBCに関するリファレンスなどを参照してください。

34.2　共用ライブラリの作成方法

＜この節の構成＞

34.2.1　共用ライブラリの作成

34.2.1　共用ライブラリの作成

共用ライブラリとは，副プログラムだけで構成され，実行可能ファイル中のプログラムから呼ばれることで実行できるファイルのことです。ここでは，次に示すファイルを共用ライブラリと呼びます。

システム名
共用ライブラリ

HP-UX(IPF)
HP-UX(IPF64)
xxx.so
xxx.sl

AIX(32)
AIX(64)
xxx.a
xxx.so※

Solaris(SPARC)
xxx.so

Linux
xxx.so

注※

xxx.soライブラリを，リンク時に-lオプションで指定する場合は，-brtlオプションの指定が必要です。-brtlオプションの詳細については，システムのマニュアルを参照してください。

共用ライブラリを作成する方法は，実行可能ファイルの生成と同じです。ここでは，共用ライブラリの作成方法のうち，実行可能ファイルの生成と異なる部分について説明します。

＜この項の構成＞

(1)　共用ライブラリを作成する

(2)　アーカイブ形式の共用ライブラリを作成する

(3)　ほかのプログラムを呼ぶ副プログラムを作成する

(4)　注意事項

(1)　共用ライブラリを作成する

ccbl2002コマンドでCOBOLプログラムから共用ライブラリを作成する場合は，-PIC,Stdオプションを指定します。

共用ライブラリを作成する例を次に示します。

ソースファイル名称：test02.cbl

      IDENTIFICATION DIVISION.
      PROGRAM-ID. TEST02.
      PROCEDURE DIVISION.
          DISPLAY '--- TEST02  START ---'.
          DISPLAY '--- TEST02    END ---'.

ccbl2002コマンドの指定

HP-UX(IPF)の場合

ccbl2002 -PIC,Std test02.cbl
ld -b -o test02.so test02.o -a archive
  -L/opt/HILNGcbl2k/lib -lcbl2kml

上記のコマンドを実行すると，共用ライブラリ"test02.so"が生成されます。

HP-UX(IPF64)の場合

ccbl2002 -PIC,Std test02.cbl
ld -b -o test02.so test02.o -a archive
  -L/opt/HILNGcbl2k64/lib -lcbl2kml

上記のコマンドを実行すると，共用ライブラリ"test02.so"が生成されます。

AIX(32)の場合

ccbl2002 -PIC,Std  test02.cbl
ld -o test02.a test02.o -bpT:0x10000000 -bpD:0x20000000
  -bnoentry -bM:SRE -bexpall
  -L/opt/HILNGcbl2k/lib -lcbl2k -lcbl2kml -lm -lc

上記のコマンドを実行すると，共用ライブラリ"test02.a"が生成されます。

AIX(64)の場合

ccbl2002 -PIC,Std  test02.cbl
ld -o test02.a test02.o -b64 -bpT:0x100000000 -bpD:0x110000000
  -bnoentry -bM:SRE -bexpall
  -L/opt/HILNGcbl2k64/lib -lcbl2k64 -lcbl2kml64 -lm -lc

上記のコマンドを実行すると，共用ライブラリ"test02.a"が生成されます。

Solaris(SPARC)の場合

ccbl2002 -PIC,Std  test02.cbl
ld -G -o test02.so test02.o -Bstatic
  -L/opt/HILNGcbl2k/lib -lcbl2kml -Bdynamic -lc

上記のコマンドを実行すると，共用ライブラリ"test02.so"が生成されます。

Linux(x86)の場合

ccbl2002 -PIC,Std -UniObjGen test02.cbl
ld -shared -o test02.so test02.o -Bstatic
  -L/opt/HILNGcbl2k/lib -lcbl2kml -Bdynamic -lc

上記のコマンドを実行すると，共用ライブラリ"test02.so"が生成されます。

Linux(x64)の場合

ccbl2002 -PIC,Std -UniobjGen test02.cbl
ld -shared -o test02.so test02.o -Bstatic
  -L/opt/HILNGcbl2k64/lib -lcbl2kml -Bdynamic -lc

上記のコマンドを実行すると，共用ライブラリ"test02.so"が生成されます。

Linux(IPF64)の場合

ccbl2002 -PIC,Std test02.cbl
ld -shared -o test02.so test02.o -Bstatic
  -L/opt/HILNGcbl2k/lib -lcbl2kml -Bdynamic -lc

上記のコマンドを実行すると，共用ライブラリ"test02.so"が生成されます。

(2)　アーカイブ形式の共用ライブラリを作成する

AIX(32)またはAIX(64)の場合，arコマンドを使用してアーカイブ形式の共用ライブラリを作成できます。

アーカイブ形式の共用ライブラリにした場合，動的なリンクによって，アーカイブ形式の共用ライブラリ中のプログラムを呼び出せます。詳細については，「18.　プログラムの呼び出し」を参照してください。

また，arコマンドについては，システムのマニュアルを参照してください。

(１)の共用ライブラリ"test02.a"と，別の共用ライブラリ"test03.a"をアーカイブ形式の共用ライブラリにまとめる場合の例を示します。

ソースファイル名称：test03.cbl

      IDENTIFICATION DIVISION.
      PROGRAM-ID. TEST03.
      DATA DIVISION.
      WORKING-STORAGE SECTION.
        01 DAT1   PIC X(10).
      PROCEDURE DIVISION.
          MOVE ALL 'A' TO DAT1.
          DISPLAY DAT1.

ccbl2002コマンドおよびarコマンドの指定

ccbl2002 -PIC,Std  test03.cbl
ld -o test03.a test03.o -bpT:0x10000000 -bpD:0x20000000
  -bnoentry -bM:SRE -bexpall
  -L/opt/HILNGcbl2k/lib -lcbl2k -lcbl2kml -lm -lc
ar rv libSUB.a test02.a test03.a

(3)　ほかのプログラムを呼ぶ副プログラムを作成する

共用ライブラリに含まれるプログラム（副プログラム）からほかのプログラムを呼び出すとき，次の条件に当てはまる場合は，コンパイル時に-DynamicLink,Callオプションを指定する必要があります。

動的なリンクによって，ほかのプログラムを呼び出す場合

一意名指定のCALL文によって，ほかのプログラムを呼び出す場合

ほかのプログラムを呼ぶ副プログラムの作成例を，次に示します。

副プログラムがCOBOLプログラムの場合

"test01.cbl"から"test02.cbl"を呼び出す場合の例を示します。

HP-UX(IPF)の場合

ccbl2002 -PIC,Std -DynamicLink,Call test01.cbl test02.cbl
ld -b -o test01.so test01.o -a archive
  -L/opt/HILNGcbl2k/lib -lcbl2kml -a default -lelf
ld -b -o test02.so test02.o -a archive
  -L/opt/HILNGcbl2k/lib -lcbl2kml -a default -lelf

HP-UX(IPF64)の場合

ccbl2002 -PIC,Std -DynamicLink,Call test01.cbl test02.cbl
ld -b -o test01.so test01.o -a archive
  -L/opt/HILNGcbl2k64/lib -lcbl2kml -a default -lelf
ld -b -o test02.so test02.o -a archive
  -L/opt/HILNGcbl2k64/lib -lcbl2kml -a default -lelf

AIX(32)の場合

ccbl2002 -PIC,Std -DynamicLink,Call test01.cbl test02.cbl
ld -o test01.a test01.o -bpT:0x10000000
  -bpD:0x20000000 -bnoentry -bM:SRE
  -bexpall -L/opt/HILNGcbl2k/lib
  -lcbl2k -lcbl2kml -lm -lc
ld -o test02.a test02.o -bpT:0x10000000
  -bpD:0x20000000 -bnoentry -bM:SRE
  -bexpall -L/opt/HILNGcbl2k/lib
  -lcbl2k -lcbl2kml -lm -lc

AIX(64)の場合

ccbl2002 -PIC,Std -DynamicLink,Call test01.cbl test02.cbl
ld -o test01.a test01.o -b64 -bpT:0x100000000
  -bpD:0x110000000 -bnoentry -bM:SRE
  -bexpall -L/opt/HILNGcbl2k64/lib
  -lcbl2k64 -lcbl2kml64 -lm -lc
ld -o test02.a test02.o -b64 -bpT:0x100000000
  -bpD:0x110000000 -bnoentry -bM:SRE
  -bexpall -L/opt/HILNGcbl2k64/lib
  -lcbl2k64 -lcbl2kml64 -lm -lc

Solaris(SPARC)の場合

ccbl2002 -PIC,Std -DynamicLink,Call test01.cbl test02.cbl
ld -G -o test01.so test01.o -Bstatic
  -L/opt/HILNGcbl2k/lib -lcbl2kml -Bdynamic -lc
ld -G -o test02.so test02.o -Bstatic
  -L/opt/HILNGcbl2k/lib -lcbl2kml -Bdynamic -lc

Linux(x86)の場合

ccbl2002 -PIC,Std -UniObjGen -DynamicLink,Call test01.cbl test02.cbl
ld -shared -o test01.so test01.o -Bstatic
  -L/opt/HILNGcbl2k/lib -lcbl2kml -Bdynamic -lc
ld -shared -o test02.so test02.o -Bstatic
  -L/opt/HILNGcbl2k/lib -lcbl2kml -Bdynamic -lc

Linux(x64)の場合

ccbl2002 -PIC,Std -UniObjGen -DynamicLink,Call test01.cbl test02.cbl
ld -shared -o test01.so test01.o -Bstatic
  -L/opt/HILNGcbl2k64/lib -lcbl2kml -Bdynamic -lc
ld -shared -o test02.so test02.o -Bstatic
  -L/opt/HILNGcbl2k64/lib -lcbl2kml -Bdynamic -lc

Linux(IPF64)の場合

ccbl2002 -PIC,Std -DynamicLink,Call test01.cbl test02.cbl
ld -shared -o test01.so test01.o -Bstatic
  -L/opt/HILNGcbl2k/lib -lcbl2kml -Bdynamic -lc
ld -shared -o test02.so test02.o -Bstatic
  -L/opt/HILNGcbl2k/lib -lcbl2kml -Bdynamic -lc

注意事項

コンパイルするとき，-DynamicLink,Callオプションを指定しないで，別コンパイルすることもできます。

オブジェクトファイルは，一つの共用ライブラリにまとめることもできます。

副プログラム"test01.c"から共用ライブラリを作成する場合

副プログラム"test01.c"を作成する場合の例を示します。

HP-UX(IPF)の場合

cc -c test01.c
ld -b -o test01.so test01.o

HP-UX(IPF64)の場合

cc -c test01.c +DD64
ld -b -o test01.so test01.o

AIX(32)の場合

cc -c test01.c
cc -G -o test01.a test01.o

Cプログラムで作成した共用ライブラリ（test01.a）とCOBOLプログラムで作成した共用ライブラリ（test02.a）をアーカイブ形式の共用ライブラリにまとめることもできます。

   ccbl2002 -PIC,Std test02.cbl
   ld -o test02.a test02.o -bpT:0x10000000
      -bpD:0x20000000 -bnoentry -bM:SRE
      -bexpall -L/opt/HILNGcbl2k/lib
      -lcbl2k -lcbl2kml -lm -lc

   ar rv libSUB2.a test01.a test02.a

アーカイブ形式の共用ライブラリにした場合，動的なリンクによって，アーカイブ形式の共用ライブラリ中のプログラムを呼び出せます。詳細については，「18.　プログラムの呼び出し」を参照してください。

また，arコマンドについては，システムのマニュアルを参照してください。

AIX(64)の場合

cc -c test01.c -q64
cc -G -o test01.a test01.o -q64

Cプログラムで作成した共用ライブラリ（test01.a）とCOBOLプログラムで作成した共用ライブラリ（test02.a）をアーカイブ形式の共用ライブラリにまとめることもできます。

   ccbl2002 -PIC,Std test02.cbl
   ld -o test02.a test02.o -b64 -bpT:0x100000000
      -bpD:0x110000000 -bnoentry -bM:SRE
      -bexpall -L/opt/HILNGcbl2k64/lib
      -lcbl2k64 -lcbl2kml64 -lm -lc

   ar -X64 rv libSUB2.a test01.a test02.a

アーカイブ形式の共用ライブラリにした場合，動的なリンクによって，アーカイブ形式の共用ライブラリ中のプログラムを呼び出せます。詳細については，「18.　プログラムの呼び出し」を参照してください。

また，arコマンドについては，システムのマニュアルを参照してください。

Solaris(SPARC)の場合

cc -xcode=pic13 -c test01.c
ld -G -o test01.so test01.o -lc

Linuxの場合

cc -fpic -c test01.c
ld -shared -o test01.so test01.o -lc

(4)　注意事項

Linux(x86) COBOL2002で生成したオブジェクトを，ccコマンドまたはldコマンドを使用してリンクする場合，32bitアプリケーションとしてリンクしなければなりません。x64向けLinux環境では，それぞれ次のオプションの指定が必要です。なお，ccコマンドおよびldコマンドのオプションの詳細は，システムのマニュアルを参照してください。

ccコマンドの場合：-m32オプション

ldコマンドの場合：-melf_i386オプション

35.　プログラムの実行

この章では，コンパイル・リンクによって作成したCOBOLプログラムを実行する方法について説明します。

＜この章の構成＞

35.1　実行可能ファイルの起動方法

35.2　画面環境の設定（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Solaris(SPARC)で有効）

35.3　プログラムの実行環境の設定

35.1　実行可能ファイルの起動方法

COBOL2002で作成したプログラムを実行する方法を，以下に示します。

実行可能ファイル名称を次のように入力します。

形式

実行可能ファイル名称 〔実行可能ファイルの引数〕

実行可能ファイル名称

実行可能ファイル名称は，原始プログラムをコンパイル時に-OutputFileオプションで指定したファイル名です。-OutputFileオプションを指定しなかったときのファイル名称は，a.outになります。

-OutputFileオプションの詳細は，「32.5.10　リンクの設定」の「(2)　-OutputFileオプション」を参照してください。

実行可能ファイルの引数

指定した引数は，原始プログラム中のPROCEDURE DIVISIONのUSING指定の引数，またはCBLARGVサービスルーチンなどによって取り込めます。実行可能ファイルの引数を複数指定するときは，それぞれを空白で区切ります。引数の受け取り方法の詳細は，「16.　COBOLの実行単位」を参照してください。

35.2　画面環境の設定（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Solaris(SPARC)で有効）

実行時に使用する画面環境の設定は，リソースファイルによって行います。

リソースファイルについては，「12.　画面入出力機能（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Solaris(SPARC)で有効）」，「29.5.1　JCPOPUP（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Solaris(SPARC)で有効）」を参照してください。

35.3　プログラムの実行環境の設定

＜この節の構成＞

35.3.1　実行時環境変数の設定方法

35.3.2　実行時環境変数の一覧

35.3.3　一般

35.3.4　少量データ

35.3.5　ファイル

35.3.6　画面（XMAP）（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）

35.3.7　整列併合

35.3.8　拡張機能

35.3.9　デバッグ

35.3.10　オブジェクト指向

35.3.1　実行時環境変数の設定方法

実行時の環境は実行時環境変数で設定します。

実行時環境変数は，次の方法で設定します。

システムに従った環境変数の設定方法

＜この項の構成＞

(1)　システムに従った環境変数の設定方法

(2)　実行時環境変数の規則

(1)　システムに従った環境変数の設定方法

sh（Ｂシェル）の場合

形式

環境変数名=環境変数の値
export 環境変数名

注意事項

セミコロン（;）などの特殊文字を環境変数の値に含むときは，アポストロフィ（'）または引用符（"）で囲んでください。

(2)　実行時環境変数の規則

実行時環境変数の規則を，次に示します。

設定する環境変数名，および環境変数の値の大文字と小文字は等価とみなしません。

35.3.2　実行時環境変数の一覧

実行時環境変数の一覧を，次に示します。

なお，未サポートの実行時環境変数が指定された場合，指定された内容は無効となって実行されます。

＜この項の構成＞

(1)　一般

(2)　少量データ

(3)　ファイル

(4)　画面（XMAP）（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）

(5)　整列併合

(6)　拡張機能

(7)　デバッグ

(8)　オブジェクト指向

(1)　一般

環境変数名 | 指定する内容 | OS
F | H | A | B | J | K | L | S
CBLENVMAX | 環境変数値の書き出しを行うDISPLAY文の実行回数の設定 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLEXVALUE | EXTERNAL句の指定のあるデータ項目の初期値を指定する | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLLANG | 動作する言語環境（文字コード）を指定する | ○ | × | ○ | ○ | ○ | ○ | × | ×
CBLLPATH | 動的なリンク時，共用ライブラリ検索ディレクトリを指定する場合，検索したい共用ライブラリのあるディレクトリの指定 | ○ | ○ | ○ | ○ | × | × | × | ×
CBLLSLIB | 動的なリンク時，検索する共用ライブラリを限定したい場合，検索したい共用ライブラリ名の指定 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLLTAG | 動的なリンクの動作を指示するオプションを指定する | × | × | ○ | ○ | × | × | × | ×
CBLPGMSEARCHTRC | 動的なリンクによる共用ライブラリの検索情報とプレロード時の共用ライブラリのロード情報を出力するファイル名を指定する | × | × | ○ | ○ | ○ | ○ | × | ×
CBLPGMSEARCHTRC_SIZE | プログラム検索トレースファイル名を切り替えるサイズを指定する | × | × | ○ | ○ | ○ | ○ | × | ×
CBLPRELOAD | 動的なリンクで検索対象となる共用ライブラリ名称を記述したプレロードリストのファイル名を指定する | × | × | ○ | ○ | ○ | ○ | × | ×
CBLUNIENDIAN | 用途がNATIONALの項目に対するUnicodeのバイトオーダを指定する | ○ | × | ○ | ○ | ○ | ○ | × | ×
CBLUPSI | 外部スイッチの状態 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBL_SYSERR | 実行時エラーメッセージの出力先ファイル名 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○

（凡例）

F：HP-UX(IPF)

H：HP-UX(IPF64)

A：AIX(32)

B：AIX(64)

J：Linux(x86)

K：Linux(x64)

L：Linux(IPF64)

S：Solaris(SPARC)

○：サポートしている

×：サポートしていない

(2)　少量データ

環境変数名 | 指定する内容 | OS
F | H | A | B | J | K | L | S
CBLDATE | ACCEPT文，CURRENT-DATE関数，MOVE文（日付と時刻用）でシステムから受け取る西暦年月日 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLDAY | ACCEPT文でシステムから受け取る通算日付 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLSTDIOLVL | DISPLAY文によってデータを標準出力，または標準エラー出力する場合，COBOL実行時ライブラリが使用するシステム入出力関数のレベルの指定 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBL_STOPNOADV | STOP　定数文を実行したとき，メッセージIDと定数1の直後の改行文字を出力するかどうか | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBL_SYSIN | FROM SYSIN指定のACCEPT文での入力ファイル名 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBL_SYSOUT | UPON SYSOUT指定のDISPLAY文での出力ファイル名 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBL_SYSPUNCH | UPON SYSPUNCH指定のDISPLAY文での出力ファイル名 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBL_SYSSTD | FROM SYSSTD指定のACCEPT文での入力ファイル名 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○

（凡例）

F：HP-UX(IPF)

H：HP-UX(IPF64)

A：AIX(32)

B：AIX(64)

J：Linux(x86)

K：Linux(x64)

L：Linux(IPF64)

S：Solaris(SPARC)

○：サポートしている

(3)　ファイル

環境変数名 | 指定する内容 | OS
F | H | A | B | J | K | L | S
CBLCSVCHAR | -NumCsvオプションを指定してCSV編成ファイルを数値として読み込むとき，無視する文字列 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLCSVINIT | CSV編成ファイルのREAD文実行時に，セルと対応しない未使用の基本項目を初期化するかどうか | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLD_ファイル名 | ファイル単位に入出力を指示するオプション | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLFSYNC | ファイルクローズ時のディスク書き込み保証を適用するかどうか | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLINBUFSIZE | OPEN文のモードがINPUT指定のバッファサイズ制御によるファイル入力時に使用するバッファサイズ | ○ | × | ○ | ○ | ○ | ○ | × | ×
CBLIOMESSAGE | ファイル入出力文でのエラー情報出力機能を使用するかどうか | × | × | ○ | ○ | ○ | ○ | × | ×
CBLISAMDL | 既存の索引ファイルに対してOPEN OUTPUTを実行したとき，旧ファイルを削除後，新規に作成するかどうか | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLISAMFSYNC | ISAMによる索引編成ファイルに対して，ファイルクローズ時のディスク書き込み保証を適用するかどうか | × | × | ○ | ○ | ○ | ○ | × | ×
CBLLARGEFILE | ラージファイル入出力機能の対象である実行単位中のファイルに対して，ラージファイル入出力機能を適用するかどうか | ○ | × | ○ | ○ | ○ | ○ | × | ×
CBLOUTBUFSIZE | OPEN文のモードがOUTPUT/EXTEND指定のバッファサイズ制御によるファイル出力時に使用するバッファサイズ | ○ | × | ○ | ○ | ○ | ○ | × | ×
CBLRDBDATAERR | HiRDBによる索引編成ファイルで，レコード中の保証されないデータをエラーとして検出するかどうか | ○ | ○ | ○ | ○ | × | × | ○ | ○
CBLRDBILWAIT | HiRDBによる索引編成ファイルで，内部的に発行されるSELECTに対して排他オプションを付けるかどうか | ○ | ○ | ○ | ○ | × | × | ○ | ○
CBLRDBOPURGE | HiRDBによる索引編成ファイルの全データを削除する際に，PURGE TABLEを使用するかどうか | ○ | ○ | ○ | ○ | × | × | ○ | ○
CBLRDBROWVALCONSTRUCTOR | HiRDBによる索引編成ファイルで，内部発行SELECTで行値構成子を使用する「内部発行されるSQL文で行値構成子を使用する機能」を使用するかどうか | × | × | ○ | ○ | × | × | × | ×
CBLSTMFSYNC | バイトストリーム入出力サービスルーチンで扱うファイルに対して，ファイルクローズ時のディスク書き込み保証を適用するかどうか | × | × | ○ | ○ | ○ | ○ | × | ×
CBLSTMLARGEFILE | バイトストリーム入出力サービスルーチンでのラージファイル入出力機能を適用するかどうか | × | × | ○ | ○ | ○ | ○ | × | ×
CBLTEXTSUPPRESSBOM | テキスト編成ファイルでのUnicodeシグニチャ出力を切り替える | × | × | ○ | ○ | ○ | ○ | × | ×
CBLTEXTWRITESPACE | テキスト編成ファイルに対するWRITE文またはREWRITE文で，レコード末尾からの連続する半角空白文字をファイルに書き出す | × | × | ○ | ○ | ○ | ○ | × | ×
CBLX_外部装置名 | 書式印刷するときの印刷サービス名称 | ○ | × | ○ | × | × | × | × | ○
CBL_RDBCOMMIT | HiRDBによる索引編成ファイルのトランザクション管理をするかどうか | ○ | ○ | ○ | ○ | × | × | ○ | ○
CBL_外部装置名 | ファイル入出力での入出力ファイル名 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○

（凡例）

F：HP-UX(IPF)

H：HP-UX(IPF64)

A：AIX(32)

B：AIX(64)

J：Linux(x86)

K：Linux(x64)

L：Linux(IPF64)

S：Solaris(SPARC)

○：サポートしている

×：サポートしていない

(4)　画面（XMAP）（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）

環境変数名 | 指定する内容 | OS
F | H | A | B | J | K | L | S
CBLPRNTID | 画面機能での送信先プリンタに対する仮想端末名 | ○ | × | ○ | × | × | × | × | ○
CBLPRNT_xxx | 画面機能で送信先がプリンタのときの仮想端末名 | ○ | × | ○ | × | × | × | × | ○
CBLTERMID | 画面機能での送信先ディスプレイに対する仮想端末名 | ○ | × | ○ | × | × | × | × | ○
CBLTERMSHAR | 複数プログラムでの仮想端末共有 | ○ | × | ○ | × | × | × | × | ○
CBLTERM_xxx | 画面機能で送信先がディスプレイのときの仮想端末名 | ○ | × | ○ | × | × | × | × | ○

（凡例）

F：HP-UX(IPF)

H：HP-UX(IPF64)

A：AIX(32)

B：AIX(64)

J：Linux(x86)

K：Linux(x64)

L：Linux(IPF64)

S：Solaris(SPARC)

○：サポートしている

×：サポートしていない

(5)　整列併合

環境変数名 | 指定する内容 | OS
F | H | A | B | J | K | L | S
CBLSORTSIZE | 整列処理で使用するメモリサイズ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLSORTWORK | 整列処理用の作業用ファイルのディレクトリ名 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○

（凡例）

F：HP-UX(IPF)

H：HP-UX(IPF64)

A：AIX(32)

B：AIX(64)

J：Linux(x86)

K：Linux(x64)

L：Linux(IPF64)

S：Solaris(SPARC)

○：サポートしている

(6)　拡張機能

環境変数名 | 指定する内容 | OS
F | H | A | B | J | K | L | S
CBLCGIERR | CGIプログラムで実行時エラーが発生した場合，エラー情報の先頭にHTTPヘッダを付けるかどうか | ○ | × | ○ | × | × | × | × | ○
CBLCGIINITSIZE | CBLCGIINITサービスルーチンが受け取ったフォーム情報で，「名前」または「値」として受け取る文字列の最大長 | ○ | × | ○ | × | × | × | × | ○
CBLMTEND | マルチスレッド対応COBOLプログラムで実行時エラーが発生したときに，abort関数を発行して終了させたい場合，ABORTを指定する | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLNO_LIBFREE | COBOLプログラムの終了処理でCOBOLが動的なリンクでロードしたCOBOL実行時ライブラリをアンロードするかどうか | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLSQLCOMMOD | ODBCインタフェースを使用してデータベースに接続する場合のコミットモードを設定する | × | × | × | × | ○ | ○ | × | ×
CBLSQLCURUSE | ODBCインタフェース機能を使用した場合にカーソルオプションの設定を変更する | × | × | × | × | ○ | ○ | × | ×
CBLSQLDYNAMIC | ODBCインタフェース機能の動的SQLで内部的に発行するODBC APIを変更する | × | × | × | × | ○ | ○ | × | ×
CBLSQLLOGINTIMEOUT | ODBCインタフェースを使用した場合にODBCオプションのSQL_LOGIN_TIMEOUTの値を指定する | × | × | × | × | ○ | ○ | × | ×
CBLSQLQUERYTIMEOUT | ODBCインタフェースを使用した場合にODBCオプションのSQL_QUERY_TIMEOUTの値を指定する | × | × | × | × | ○ | ○ | × | ×
CBLSQLROWCOUNT | ODBCインタフェースを使用した場合に影響行数が0のときにSQLCODEに100を設定する | × | × | × | × | ○ | ○ | × | ×
CBLSQLSUPPRESSMSG | ODBCインタフェースを使用した場合に実行時メッセージの出力を抑止するかどうか | × | × | × | × | ○ | ○ | × | ×
CBLSQLWMSG | ODBCインタフェースを使用した場合に警告メッセージの出力を抑止するかどうか | × | × | × | × | ○ | ○ | × | ×

（凡例）

F：HP-UX(IPF)

H：HP-UX(IPF64)

A：AIX(32)

B：AIX(64)

J：Linux(x86)

K：Linux(x64)

L：Linux(IPF64)

S：Solaris(SPARC)

○：サポートしている

×：サポートしていない

(7)　デバッグ

環境変数名 | 指定する内容 | OS
F | H | A | B | J | K | L | S
CBLABNLST | 異常終了時要約情報リストの出力先 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLCORE | シグナル発生時のコアダンプを出力するかどうか | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLDDUMP | データ領域ダンプの出力先 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLDMPLEVEL | データ領域ダンプリストの出力で，情報の出力レベルの指定 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLDMPPGMN | データ領域ダンプリストを出力するとき，ダンプリストを出力するプログラム名の指定 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLPRMCHKW | -DebugCompatiオプション指定時，またはテストデバッグ時のプログラム間整合性チェックを緩和する | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLTDEXEC※ | プログラム実行時にテストデバッガを起動するかどうか | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBL_FLSRVDUMP | COBOL入出力サービスルーチンのデバッグ情報を出力するファイル名 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLTDDISPLAY | 連動実行時，デバッガを表示するための端末の表示先の指定※ | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLEXCEPT | プログラムの実行で例外が発生したときの動作を指定する | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLDATADUMPFILE | CBLDATADUMPサービスルーチンによるデータ領域ダンプの出力先 | × | × | ○ | ○ | ○ | ○ | × | ×

（凡例）

F：HP-UX(IPF)

H：HP-UX(IPF64)

A：AIX(32)

B：AIX(64)

J：Linux(x86)

K：Linux(x64)

L：Linux(IPF64)

S：Solaris(SPARC)

○：サポートしている

×：サポートしていない

注※

詳細は，マニュアル「COBOL2002　使用の手引　操作編」を参照してください。

(8)　オブジェクト指向

環境変数名 | 指定する内容 | OS
F | H | A | B | J | K | L | S
CBLGCINTERVAL | 前回のガーベジコレクションを終了してから，次のガーベジコレクションを開始するまでのメモリ使用量（ガーベジコレクションの実行間隔） | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○
CBLGCSTART | ガーベジコレクタの開始条件となる，インスタンスオブジェクトの生成によるメモリ使用量の累積値 | ○ | ○ | ○ | ○ | ○ | ○ | ○ | ○

（凡例）

F：HP-UX(IPF)

H：HP-UX(IPF64)

A：AIX(32)

B：AIX(64)

J：Linux(x86)

K：Linux(x64)

L：Linux(IPF64)

S：Solaris(SPARC)

○：サポートしている

35.3.3　一般

＜この項の構成＞

(1)　CBLENVMAX

(2)　CBLEXVALUE

(3)　CBLLANG（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(4)　CBLLPATH（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)で有効）

(5)　CBLLSLIB

(6)　CBLLTAG（AIX(32)，AIX(64)で有効）

(7)　CBLPGMSEARCHTRC（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(8)　CBLPGMSEARCHTRC_SIZE（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(9)　CBLPRELOAD（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(10)　CBLUNIENDIAN（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(11)　CBLUPSI

(12)　CBL_SYSERR

(1)　CBLENVMAX

環境変数値の書き出しを行うDISPLAY文の実行回数を8けた以内の符号なし整数で指定します。

詳細は，「10.4　環境変数へのアクセス」を参照してください。

(2)　CBLEXVALUE

EXTERNAL句指定のあるデータ項目にNULLを設定して，領域を初期化します。この環境変数の指定は，作業場所節で定義しているデータ項目に対して有効となります。

詳細は，「4.2.2　外部属性（EXTERNAL句）」を参照してください。

(3)　CBLLANG（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

動作する言語環境（文字コード）を指定します。

詳細は，「27.4.2　実行」を参照してください。

(4)　CBLLPATH（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)で有効）

動的なリンク時，共用ライブラリの検索ディレクトリを指定します。

詳細は，「18.5　静的なリンクと動的なリンク」を参照してください。

(5)　CBLLSLIB

動的なリンク時，検索したい共用ライブラリ名を指定します。

詳細は，「18.5　静的なリンクと動的なリンク」を参照してください。

(6)　CBLLTAG（AIX(32)，AIX(64)で有効）

この環境変数は，動的なリンクの動作を指示するオプションを指定します。

複数のオプションを指定する場合は，各オプションをコロン(:)で区切って指定します。同じオプションを複数指定した場合は，後に指定した値が有効となります。

この環境変数に指定するオプション文字列の長さは，1,024バイト以内にしてください。1,024バイトを超える文字列を指定した場合，メッセージが出力され，この環境変数の指定は無効となります。

（例）

CBLLTAG=NOSO:NOARMBR

詳細は，「18.6.2　共用ライブラリに含まれるプログラムの呼び出し方法」の「(2)　動的なリンク」を参照してください。

次に指定できるオプションを示します。

SO／NOSO

動的なリンクで，検索対象とするライブラリの拡張子を選択できます。SOを指定した場合は，拡張子「.so」の共用ライブラリを検索対象とします。NOSOを指定した場合は，拡張子「.so」の共用ライブラリを検索対象としません。このオプションの標準値は，SOです。

ARMBR／NOARMBR／ARMBRLSYM

動的なリンクで，検索対象とするライブラリ種別を選択できます。ARMBRとARMBRLSYMを指定した場合は，アーカイブ化された共用ライブラリを検索対象とします。NOARMBRを指定した場合は，アーカイブ化された共用ライブラリを検索対象としません。このオプションの標準値は，ARMBRです。

ARMBRとARMBRLSYMの違いを次に示します。

ARMBR：共用ライブラリ中のすべてのシンボル情報から検索します。

ARMBRLSYM：共用ライブラリ中のエクスポートされたシンボル情報だけから検索します。

(7)　CBLPGMSEARCHTRC（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

次のトレース情報を出力するファイル名を指定します。

動的なリンクによるプログラム呼び出し時の共用ライブラリの検索情報

プレロード時の共用ライブラリのロード情報

詳細は，「18.6.4　動的なリンクのプログラム検索トレース機能（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）」を参照してください。

(8)　CBLPGMSEARCHTRC_SIZE（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

プログラム検索トレースファイル名を切り替えるサイズを指定します。

詳細は，「18.6.4　動的なリンクのプログラム検索トレース機能（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）」を参照してください。

(9)　CBLPRELOAD（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

実行単位内で最初に実行されるCOBOLプログラムの起動時に，動的なリンクで検索対象となる共用ライブラリ名称を記述したプレロードリストのファイル名を指定します。

詳細は，「18.6.3　動的なリンクのプレロード機能（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）」を参照してください。

(10)　CBLUNIENDIAN（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

用途がNATIONALの項目に対するUnicodeのバイトオーダを指定します。

詳細は，「27.4.2　実行」を参照してください。

(11)　CBLUPSI

外部スイッチの状態を，8個の0と1で指定します。

詳細は，「16.2.4　外部スイッチ」の「(2)　外部スイッチの設定方法」を参照してください。

(12)　CBL_SYSERR

実行時エラーメッセージの出力先ファイル名を指定します。ファイル名は絶対パス名で指定します。拡張子の種類や拡張子を付けるかどうかは任意です。CBL_SYSERRの指定形式は次のようになります。

形式

CBL_SYSERR=ファイル名〔+〕

＋を指定した場合：追加モードで出力されます。

CBL_SYSERRを指定した場合の実行時エラーメッセージの出力先を次に示します。

ファイル名の指定
データの出力先

CBL_SYSERR=stdin〔+〕
ファイル名「stdin」

CBL_SYSERR=stdout〔+〕
標準出力※

CBL_SYSERR=stderr〔+〕
標準エラー出力※

CBL_SYSERR=
　上記以外のファイル名〔+〕
環境変数CBL_SYSERRで指定した名称のファイル

注

標準出力（stdout），および標準エラー出力（stderr）を指定する場合は，英小文字で指定してください。「STDOUT」のように英大文字で指定した場合，物理ファイル名として扱われます。

注※

追加モードは無視されます。

35.3.4　少量データ

＜この項の構成＞

(1)　CBLDATE

(2)　CBLDAY

(3)　CBLSTDIOLVL

(4)　CBL_STOPNOADV

(5)　CBL_SYSIN

(6)　CBL_SYSOUT

(7)　CBL_SYSPUNCH

(8)　CBL_SYSSTD

(1)　CBLDATE

システムから受け取る西暦年月日を，yyyymmdd（yyyyは西暦の年，mmは月，ddは日）の8けたの形式で指定します。

詳細は，「10.2.3　日付や時刻を取得するACCEPT文」の「(2)　ACCEPT文で取得する日付の変更」を参照してください。

(2)　CBLDAY

ACCEPT文でシステムから受け取る西暦年，および通年日をyyyyddd（yyyyは西暦の年，dddは通年日）の7けたの形式で設定します。

詳細は，「10.2.3　日付や時刻を取得するACCEPT文」の「(2)　ACCEPT文で取得する日付の変更」を参照してください。

(3)　CBLSTDIOLVL

DISPLAY文によってデータを標準出力（stdout），または標準エラー出力（stderr）に出力する場合，COBOL実行時ライブラリが使用するシステム入出力関数のレベルを指定します。

形式

CBLSTDIOLVL=OUTLOW:ERRLOW

規則

複数のオプションを指定する場合は，各オプションをコロン（:）で区切って指定してください。また，同じオプションを複数指定した場合，後に設定した値が有効となります。

環境変数CBLSTDIOLVLに指定する文字列の長さは，1,024バイト以内でなければなりません。1,024バイトを超える文字列を指定した場合は，メッセージが出力され，環境変数CBLSTDIOLVLの指定は無効となります。

環境変数CBLSTDIOLVLは，標準出力または標準エラー出力を高水準システム入出力関数の使用が制限される出力先に変更しているときに指定します。

環境変数CBLSTDIOLVLにERRLOWまたはOUTLOWを指定した場合，DISPLAY文でエラーが発生してもプログラムの実行を継続します。また，エラー発生時のDISPLAY文の出力データをCOBOLログファイルに出力します。

標準出力または標準エラー出力の出力先を変更しない場合は，環境変数CBLSTDIOLVLを指定する必要はありません。環境変数CBLSTDIOLVLの指定条件と機能の詳細については，「10.2.5　システム入出力関数レベルの指定」を参照してください。

設定できるオプションを次に示します。次に示すオプション以外は無効となります。

(a)　OUTLOW／OUTHIGH

OUTLOWを指定した場合，出力先が標準出力（stdout）のDISPLAY文実行時，低水準システム関数を使用してデータを出力します。OUTHIGHを指定した場合，高水準システム関数を使用します。標準値はOUTHIGHになります。

(b)　ERRLOW／ERRHIGH

ERRLOWを指定した場合，出力先が標準エラー出力（stderr）のDISPLAY文実行時，低水準システム関数を使用してデータを出力します。ERRHIGHを指定した場合，高水準システム関数を使用します。標準値はERRHIGHになります。

(4)　CBL_STOPNOADV

環境変数CBL_STOPNOADVにYESを指定すると，STOP定数文を実行したとき，実行時メッセージIDと，定数の直後の改行文字が出力されません。

詳細は，「10.2.6　STOP文」を参照してください。

(5)　CBL_SYSIN

FROM SYSIN指定時のACCEPT文で入力ファイル名を指定します。

詳細は，「10.2.2　外部からのデータを入力するACCEPT文」の「(1)　標準転記によるACCEPT文」を参照してください。

(6)　CBL_SYSOUT

UPON SYSOUT指定時のDISPLAY文で出力ファイル名を指定します。

詳細は，「10.2.4　DISPLAY文によるデータの出力」を参照してください。

(7)　CBL_SYSPUNCH

UPON SYSPUNCH指定時のDISPLAY文で出力ファイル名を指定します。

詳細は，「10.2.4　DISPLAY文によるデータの出力」を参照してください。

(8)　CBL_SYSSTD

FROM SYSSTD指定時のACCEPT文で入力ファイル名を指定します。

詳細は，「10.2.2　外部からのデータを入力するACCEPT文」の「(1)　標準転記によるACCEPT文」を参照してください。

35.3.5　ファイル

＜この項の構成＞

(1)　CBLCSVCHAR

(2)　CBLCSVINIT

(3)　CBLD_ファイル名

(4)　CBLFSYNC

(5)　CBLINBUFSIZE（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(6)　CBLIOMESSAGE（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(7)　CBLISAMDL

(8)　CBLISAMFSYNC（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(9)　CBLLARGEFILE（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(10)　CBLOUTBUFSIZE（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(11)　CBLRDBDATAERR（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC)で有効）

(12)　CBLRDBILWAIT（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC)で有効）

(13)　CBLRDBOPURGE（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC))で有効）

(14)　CBLRDBROWVALCONSTRUCTOR（AIX(32)，AIX(64)で有効）

(15)　CBLSTMFSYNC（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(16)　CBLSTMLARGEFILE（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(17)　CBLTEXTSUPPRESSBOM（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(18)　CBLTEXTWRITESPACE（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(19)　CBLX_外部装置名（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）

(20)　CBL_RDBCOMMIT（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC)で有効）

(21)　CBL_外部装置名

(1)　CBLCSVCHAR

-NumCsvオプションを指定してCSV編成ファイルの入出力をする場合，無視したい文字列を指定します。

規則

環境変数CBLCSVCHARに複数の文字列を指定する場合は，各文字列をセミコロン（;）で区切ります。

環境変数CBLCSVCHARに指定する文字列の長さは，1,024バイト以内でなければなりません。1,024バイトを超える文字列を指定した場合は，メッセージが出力され，環境変数CBLCSVCHARの指定は無効となります。

詳細は，「6.8.5　セルデータを数値として入出力する機能」の「(3)　数値として入力するとき，不要な文字列を無視する機能」を参照してください。

(2)　CBLCSVINIT

CSVファイルのREAD文実行時に，セルと対応しない未使用の基本項目を初期化する場合に指定します。

詳細は，「6.8.7　入力時の未使用項目の初期化機能」を参照してください。

(3)　CBLD_ファイル名

入出力動作を指示する下記のオプションをファイル単位に指定します。

規則

複数のオプションを指定するときは各オプションをコロン（：）で区切ります。

環境変数CBLD_ファイル名は，OPEN文を実行するごとに環境変数の値が参照されます。

ここで指定するファイル名はSELECT句で指定したファイル名に対応します。ただし，ファイル名内のハイフン（-）は下線（_）に置き換えて指定します。

背反するオプションを同時に指定した場合，あとから指定したオプションが有効となります。

環境変数CBLD_ファイル名に指定する文字列の長さは，1,024バイト以内でなければなりません。1,024バイトを超える文字列を指定した場合，メッセージが出力され，これらの環境変数の指定は無効となります。

同じファイルに対して環境変数CBLD_ファイル名と環境変数CBL_ファイル名の両方を指定した場合，環境変数CBLD_ファイル名に指定した内容だけが有効となり，環境変数CBL_ファイル名に指定した値は無効となります。なお，環境変数CBLD_ファイル名にNULL（指定値なし）を指定した場合でも，環境変数CBL_ファイル名に指定した内容は無効となります。

設定例

（例1）

（COBOLでの記述例）

SELECT A-FILE ASSIGN TO SYS000.

（環境変数の設定例）

CBLD_A_FILE=ISAMDL:NOISAMPREV

（例2）

背反するオプションを同時に指定した場合，あとから指定したオプションが有効となります。

CBLD_A_FILE=ISAMDL:NOISAMDL

上記の指定をした場合，最初の"ISAMDL"は無効となり，あとに設定した"NOISAMDL"が有効となります。

設定できるオプションを次に示します。次に示すオプション以外は無効となります。

(a)　ISAMDL／NOISAMDL

ISAMDLは，索引編成ファイルでOPENモードがOUTPUTの場合，既存のファイルを削除して再生成します。NOISAMDLは，ファイルの削除はしません。省略時はNOISAMDLが仮定されます。

(b)　ISAMPREV／NOISAMPREV

ISAMPREVは，索引編成ファイルでSTART文の指定がLESS，LESS THAN OR EQUAL，およびLASTの場合，あとに続くNEXT指定のREAD文でキーの降順に呼び出します。NOISAMPREVは，START文の指定に関係なく，NEXT指定のREAD文はキーの昇順に呼び出します。省略時はISAMPREVが仮定されます。

(c)　SAMAADV／NOSAMAADV

SAMAADVは，ADVANCING指定を書かないWRITE文にAFTER ADVANCING 1 LINEを仮定します。NOSAMAADVはこれを仮定しません。省略時はNOSAMAADVが仮定されます。

SAMAADVとSAMBADVを同時に指定した場合は，あとに設定した方が有効となります。

(d)　CSVQUOTE／NOCSVQUOTE

CSVQUOTEは，CSV編成ファイルのWRITE文でセルの内容を出力するとき，データを引用符（ " ）で囲みます。NOCSVQUOTEは，引用符を付けません。省略時はCSVQUOTEが仮定されます。

NOCSVQUOTEを指定した場合の詳細は，「6.8　CSV編成ファイル（表計算プログラムファイル）」を参照してください。

(e)　CSVWRITESPACE／NOCSVWRITESPACE

CSVWRITESPACEは，CSV編成ファイルのWRITE文で，出力するレコードの基本項目のデータの最後の空白文字を出力します。NOCSVWRITESPACEは，データの最後の空白文字を出力しません。なお，省略時はNOCSVWRITESPACEが仮定されます。

CSVWRITESPACEを指定した場合の詳細は，「6.8.8　データの後の空白文字を出力する機能」を参照してください。

(f)　CSVTABSEPARATED／NOCSVTABSEPARATED

CSVTABSEPARATEDは，CSVファイル入出力機能でセルデータをタブ文字区切りで入出力します。NOCSVTABSEPARATEDはセルデータにコンマ（,）区切りで入出力します。なお，省略時はNOCSVTABSEPARATEDが仮定されます。

CSVTABSEPARATEDを指定した場合の詳細は，「6.8.9　セルデータをタブ文字区切りで入出力する機能」を参照してください。

(g)　FSYNC／NOFSYNC／WDISK

強制的にディスク書き込みをするかしないかを指定します。

FSYNCを指定した場合，プログラムの終了時，またはCLOSE文の実行終了時に，COBOLプログラムの環境部のファイル記述項で指定したファイル名のファイルに対して，強制的なディスク書き込みを適用します。

WDISKを指定した場合，WRITE文，REWRITE文，またはDELETE文の実行終了時に，COBOLプログラムの環境部のファイル記述項で指定したファイル名のファイルに対して，強制的なディスク書き込みを適用します。

NOFSYNCを指定した場合は，ディスクへの書き込み保証が適用されません。

FSYNC，NOFSYNC，WDISKのどれかを同時に指定した場合は，あとに指定した方が有効となります。また，FSYNC，NOFSYNC，WDISKのどれも指定しない場合は，環境変数CBLFSYNCの指定に従います。AIX(32)，AIX(64)，Linux(x86)，Linux(x64)では，環境変数CBLISAMFSYNCの指定にも従います。

ファイルのディスク書き込み保証機能の詳細については，「14.1　ファイルのディスク書き込み保証」を参照してください。

(h)　SAMENDIO／NOSAMENDIO

SAMENDIOは，固定長形式の順ファイルでファイルサイズがレコード長の整数倍ではなく，ファイルの最終レコードが定義レコード長よりも短い場合でも入出力できるようにします。

NOSAMENDIOでは，ファイルの最終レコードが定義レコード長より短い場合，エラーになります。標準値は，NOSAMENDIOになります。

詳細は，「6.11.1　ファイルサイズがレコード長の整数倍でない固定長形式の順ファイルの入出力」を参照してください。

(i)　LARGEFILE／NOLARGEFILE

LARGEFILEは，ラージファイル（ファイルサイズが2GBより大きいファイル）に対しても入出力ができるようにします。

NOLARGEFILEでは，ラージファイルに対してアクセスした場合，エラーになります。標準値は，NOLARGEFILEになります。詳細は，「6.10　ラージファイル入出力機能」を参照してください。

(j)　NOINBUFSIZE／NOOUTBUFSIZE（HP-UX(IPF)，Linux(x86)，Linux(x64)で有効）

NOINBUFSIZEは，指定されたファイルのバッファサイズ制御による入力時に，環境変数CBLINBUFSIZEで設定された値を無効にします。NOOUTBUFSIZEは，指定されたファイルのバッファサイズ制御による出力時に，環境変数CBLOUTBUFSIZEで設定された値を無効にします。詳細は「6.11.2　ファイルバッファサイズ指定機能（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）」を参照してください。

(k)　TEXTWRITESPACE／NOTEXTWRITESPACE（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

テキスト編成ファイルに対するWRITE文またはREWRITE文で，レコード末尾からの連続する半角空白文字をファイルに書き出したい場合，TEXTWRITESPACEを指定します。テキスト編成ファイルに対するWRITE文またはREWRITE文で，レコード末尾からの連続する半角空白文字を削除したい場合は，NOTEXTWRITESPACEを指定します。詳細については，「6.7.5　レコード末尾の空白文字を出力する機能（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）」を参照してください。

(l)　TEXTSUPPRESSBOM／NOTEXTSUPPRESSBOM（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

テキスト編成ファイルにUnicodeシグニチャを出力しない場合，TEXTSUPPRESSBOMを指定します。Unicodeシグニチャを出力する場合，NOTEXTSUPPRESSBOMを指定します。

詳細については，「27.5.2　入出力機能」の「(1)　テキスト編成ファイル」を参照してください。

(m)　RDBOPURGE／NORDBOPURGE（AIX(32)，AIX(64)で有効）

HiRDBによる索引編成ファイルで，出力モードでファイルを開く場合，すでにファイル内に存在するレコードを高速で削除するとき，RDBOPURGEを指定してください。レコードを高速で削除しない場合，NORDBOPURGEを指定してください。

詳細については，「6.9.5　HiRDBによる索引編成ファイル固有の機能と相違点」の「(5)　その他の拡張機能」を参照してください。

(4)　CBLFSYNC

プロセス内のすべてのファイルに対して，クローズ時のディスクへの書き込み保証を適用したいときにYESを指定します。YES以外の値を指定したときは，無効となります。

詳細は，「14.1.2　ファイルクローズ時のディスク書き込み保証の指定方法」および「13.6　COBOL入出力サービスルーチンでのディスク書き込み保証」を参照してください。

(5)　CBLINBUFSIZE（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

OPEN文のモードがINPUT指定のバッファサイズ制御によるファイル入力時に，使用するバッファサイズを2,000,000,000（約2GB）までの数値で指定します。

詳細は，「6.11　ファイル入出力拡張機能」を参照してください。

(6)　CBLIOMESSAGE（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

ファイル入出力文でのエラー情報出力機能を使用したい場合に，この環境変数を指定します。指定可能な値を次に示します。

(a)　STATUS90

ファイル管理記述項にFILE STATUS句の指定がある場合に，入出力文の実行で入出力状態値が90となるエラーが発生したとき，該当する実行時メッセージを出力してプログラムの実行を継続します。ただし，出力するメッセージのレベルはI（お知らせ）となります。

この環境変数については，「6.3.4　ファイル入出力文でのエラー情報出力機能（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）」を参照してください。

(7)　CBLISAMDL

既存の索引ファイルに対してOPEN OUTPUTを実行した場合，旧ファイルを削除後，ファイルを新しく作成したいときにYESを指定します。指定しなかったときや，YES以外の文字を指定したときは，NOが仮定されます。このとき，既存のファイルに対しての追加書きとなります。

(8)　CBLISAMFSYNC（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

プロセス内のすべてのISAMによる索引編成ファイルに対して，クローズ時のディスクへの書き込み保証を適用したいときにYESを指定します。YES以外の値を指定したときは，無効となります。ファイルのディスク書き込み保証については，「14.　ファイルのディスク書き込み保証」を参照してください。

(9)　CBLLARGEFILE（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

ラージファイル入出力機能の対象である実行単位中のすべてのファイルに対して，ラージファイル入出力機能を適用するときにYESを指定します。詳細は「6.10　ラージファイル入出力機能」を参照してください。

(10)　CBLOUTBUFSIZE（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

OPEN文のモードがOUTPUT／EXTEND指定のバッファサイズ制御によるファイル出力時に，使用するバッファサイズを2,000,000,000（約2GB）までの数値で指定します。

詳細は，「6.11　ファイル入出力拡張機能」を参照してください。

(11)　CBLRDBDATAERR（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC)で有効）

HiRDBによる索引編成ファイルで，レコード中に保証されないデータが含まれていないかをチェックする場合にYESを指定します。

詳細は「6.9.5(5)(b)　データチェック機能」を参照してください。

(12)　CBLRDBILWAIT（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC)で有効）

RDBファイル入出力機能を使用する場合，INPUTモードで開いたファイルに対し，内部的に発行するSELECTに「WITHOUT LOCK WAIT」の排他オプションを付加するときにYESを指定します。

詳細は「6.9.5(4)　HiRDBによる索引編成ファイル固有のファイル共用」を参照してください。

(13)　CBLRDBOPURGE（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC))で有効）

HiRDBによる索引編成ファイルに対して出力モードでファイルを開く場合，すでにファイル内に存在するレコードを高速で削除したいときにYESを指定します。

詳細は「6.9.5(5)(a)　出力ファイルの高速オープン機能」を参照してください。

(14)　CBLRDBROWVALCONSTRUCTOR（AIX(32)，AIX(64)で有効）

HiRDBによる索引編成ファイルで，内部発行SELECTで行値構成子を使用する，内部発行されるSQL文で行値構成子を使用する機能を有効にするときに，YESを指定します。

詳細は，「6.9.5　HiRDBによる索引編成ファイル固有の機能と相違点」の「(5)　その他の拡張機能」にある「(c)　内部発行されるSQL文で行値構成子を使用する機能（AIX(32)，AIX(64)で有効）」を参照してください。

(15)　CBLSTMFSYNC（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

プロセス内のすべてのバイトストリーム入出力サービスルーチンで扱うファイルに対して，クローズ時のディスクへの書き込み保証を適用したいときにYESを指定します。YES以外の値を指定したときは，無効となります。

詳細は，「15.5　バイトストリーム入出力サービスルーチンでのディスク書き込み保証機能（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）」を参照してください。

(16)　CBLSTMLARGEFILE（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

バイトストリーム入出力サービスルーチンでのラージファイル入出力機能を適用したいときに，YESを指定します。省略時およびYES以外の値を指定した場合，バイトストリーム入出力サービスルーチンでのラージファイル入出力機能は無効となります。

詳細は，「15.4　バイトストリーム入出力サービスルーチンでのラージファイル入出力機能（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）」を参照してください。

(17)　CBLTEXTSUPPRESSBOM（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

テキスト編成ファイルにUnicodeシグニチャを出力しない場合に指定します。

詳細は，「27.5.2　入出力機能」の「(1)　テキスト編成ファイル」を参照してください。

(18)　CBLTEXTWRITESPACE（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

テキスト編成ファイルに対するWRITE文またはREWRITE文で，レコード末尾からの連続する半角空白文字をファイルに書き出したい場合に指定します。

詳細は，「6.7.5　レコード末尾の空白文字を出力する機能（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）」を参照してください。

(19)　CBLX_外部装置名（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）

書式印刷機能を使用したプリンタ出力するときの印刷サービス名称を指定します。

詳細は，「8.4　XMAP3による印刷（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）」を参照してください。

(20)　CBL_RDBCOMMIT（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC)で有効）

HiRDBによる索引編成ファイルに対して，COMMIT文，ROLLBACK文によってRDBアクセスのトランザクション管理を行う場合にYES，AUTO，またはMANUALを指定します。

詳細は「6.9.5(1)(a)　環境変数CBL_RDBCOMMIT」を参照してください。

(21)　CBL_外部装置名

ファイル入出力での入出力ファイル名を指定します。

詳細は，「6.2.2　環境変数指定」を参照してください。

35.3.6　画面（XMAP）（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）

＜この項の構成＞

(1)　CBLPRNTID

(2)　CBLPRNT_xxx

(3)　CBLTERMID

(4)　CBLTERMSHAR

(5)　CBLTERM_xxx

(1)　CBLPRNTID

通信節による画面機能でSYMBOLIC TERMINAL句の指定を省略した場合，送信先プリンタの仮想端末名を指定します。

詳細は，「12.1.4　プリンタに対する帳票出力」の「(4)　送信先の設定方法」を参照してください。

(2)　CBLPRNT_xxx

通信節による画面機能でSYMBOLIC TERMINAL句を指定した場合，送信先がプリンタのときの仮想端末名を指定します。

詳細は，「12.1.4　プリンタに対する帳票出力」の「(4)　送信先の設定方法」を参照してください。

(3)　CBLTERMID

通信節による画面機能でSYMBOLIC TERMINAL句の指定を省略した場合，送受信先がディスプレイのときの仮想端末名を指定します。

詳細は，「12.1.2　画面に対する入出力」の「(7)　送受信先の設定方法」を参照してください。

(4)　CBLTERMSHAR

複数プログラム間で一つの仮想端末を共有する場合，YESを指定します。YES以外の値を指定したときは，無効となります。

詳細は，「12.1.3　仮想端末の共用」を参照してください。

(5)　CBLTERM_xxx

通信節による画面機能でSYMBOLIC TERMINAL句を指定した場合，送受信先がディスプレイのときの仮想端末名を指定します。

詳細は，「12.1.2　画面に対する入出力」の「(7)　送受信先の設定方法」を参照してください。

35.3.7　整列併合

＜この項の構成＞

(1)　CBLSORTSIZE

(2)　CBLSORTWORK

(1)　CBLSORTSIZE

整列処理で外部ファイルを使用するとき，整列機能が確保するメモリサイズをキロバイト単位で指定します。8けたの符号なし整数で設定します。

詳細には，「11.3.1　整列処理のメモリサイズ」を参照してください。

(2)　CBLSORTWORK

整列処理するときの作業用ファイルのパスプレフィクスを指定します。

詳細は，「11.2.2　整列作業用ファイル」を参照してください。

35.3.8　拡張機能

＜この項の構成＞

(1)　CBLCGIERR（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）

(2)　CBLCGIINITSIZE（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）

(3)　CBLMTEND

(4)　CBLNO_LIBFREE

(5)　CBLSQLCOMMOD（Linux(x86)，Linux(x64)で有効）

(6)　CBLSQLCURUSE（Linux(x86)，Linux(x64)で有効）

(7)　CBLSQLDYNAMIC（Linux(x86)，Linux(x64)で有効）

(8)　CBLSQLLOGINTIMEOUT（Linux(x86)，Linux(x64)で有効）

(9)　CBLSQLQUERYTIMEOUT（Linux(x86)，Linux(x64)で有効）

(10)　CBLSQLROWCOUNT（Linux(x86)，Linux(x64)で有効）

(11)　CBLSQLSUPPRESSMSG（Linux(x86)，Linux(x64)で有効）

(12)　CBLSQLWMSG（Linux(x86)，Linux(x64)で有効）

(1)　CBLCGIERR（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）

CGIプログラムで実行時エラーが発生したとき，メッセージの先頭にCGIヘッダ（HTTPヘッダのMIMEフォーマットを表す"Content-type: text/plain¥n¥n"）を付けて出力したい場合に指定します。

詳細は，「25.9　実行時エラーメッセージの取得方法」を参照してください。

(2)　CBLCGIINITSIZE（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）

CBLCGIINITサービスルーチンが受け取るフォーム情報で，「名前」「値」のデコードされていない状態での最大文字列長をキロバイト単位で指定します。指定できる値の範囲は，1～2,000,000です。この範囲外の値を指定した場合，または環境変数CBLCGIINITSIZEを指定しなかった場合は，64が仮定されます。

詳細は，「25.7.2　サービスルーチンの説明」の「(7)　CBLCGIINIT」を参照してください。

(3)　CBLMTEND

マルチスレッド対応COBOLプログラムで，実行時エラーが発生したときのスレッドの終了方法を変更できます。環境変数CBLMTENDを指定しない場合，COBOLはpthread_exit関数を発行してそのスレッドを終了します。

例えば，マルチスレッド対応COBOLプログラムで実行時エラーが発生し，スレッドの終了ではなくプロセスが終了しなければならない製品と連携している場合は，環境変数CBLMTEND = ABORTを指定することで，実行時エラーが発生したときのスレッドの終了方法を変更できます。

また，ABORTを指定した場合に，マルチスレッド対応COBOLプログラムでCOBOL実行時エラーが発生したとき，または-DebugInf，-DebugInf,Trace，-DebugCompati，-DebugData，-TDInf，-CVInf，-DebugRangeオプションのどれかを指定したプログラムが異常終了したときに，abort関数を発行します。

注意事項

STOP RUN文実行時は，環境変数CBLMTENDの指定がないときと同様に，pthread_exit関数を発行して，そのスレッドを終了させます。

abort関数が発行された場合，そのabortシグナルを補足するプログラムがないかぎり，システムがプロセスを終了するため，ほかの実行中のスレッドも強制的に終了します。

環境変数CBLMTENDは，スレッド単位での指定はできません。プログラム実行の前に指定してください。

(4)　CBLNO_LIBFREE

環境変数CBLNO_LIBFREEにEXITを指定した場合，COBOLプログラムの終了処理でCOBOLが動的なリンクでロードしたCOBOL実行時ライブラリをアンロードしません。環境変数CBLNO_LIBFREEを省略した場合，またはEXIT以外が指定された場合は適用されません。詳細については，「18.6　共用ライブラリに含まれるプログラムの呼び出しと共用ライブラリのアンロード」を参照してください。

(5)　CBLSQLCOMMOD（Linux(x86)，Linux(x64)で有効）

ODBCインタフェースを使ってCONNECT文でデータベースに接続するとき，コミットモードを設定するかどうかを設定します。CBLSQLCOMMODに設定する値によって，CONNECT文でデータベースに接続するときの動作は異なります。

形式

CBLSQLCOMMOD=｛DEFAULT｜AUTO｜MANUAL｝

DEFAULT

コミットモードが設定されません。デフォルトモード（自動コミットモード）で接続します。

AUTO

自動コミットモードが設定されて接続します。

MANUAL

手動コミットモードが設定されて接続します。

なお，この環境変数の設定を指定しなかったときには，MANUALが仮定されます。

(6)　CBLSQLCURUSE（Linux(x86)，Linux(x64)で有効）

ODBCインタフェース機能を使用した場合にカーソルオプションの設定を変更します。

形式

CBLSQLCURUSE=DYNAMIC

DYNAMIC

ODBCドライバのスクロール機能の動的カーソルを使用するように設定します。この環境変数の指定がない場合は，ODBCカーソルライブラリの静的カーソルを使用するようにODBCオプションを設定します。DYNAMIC以外の値を指定した場合の結果は，保証しません。

詳細は，「23.2.8　カーソルオプションの設定」を参照してください。

(7)　CBLSQLDYNAMIC（Linux(x86)，Linux(x64)で有効）

ODBCインタフェース機能の動的SQLで内部的に発行するODBC APIを変更したい場合に指定します。

詳細は，「23.2.10　動的SQLのODBC API関数発行の変更」を参照してください。

(8)　CBLSQLLOGINTIMEOUT（Linux(x86)，Linux(x64)で有効）

ODBCインタフェースを使ってODBCオプションのSQL_LOGIN_TIMEOUTに設定するタイムアウト秒数を指定します。

詳細は，「23.2.7　タイムアウト秒数の設定」を参照してください。

(9)　CBLSQLQUERYTIMEOUT（Linux(x86)，Linux(x64)で有効）

ODBCインタフェースを使ってODBCオプションのSQL_QUERY_TIMEOUTに設定するタイムアウト秒数を指定します。

詳細は，「23.2.7　タイムアウト秒数の設定」を参照してください。

(10)　CBLSQLROWCOUNT（Linux(x86)，Linux(x64)で有効）

ODBCインタフェースを使って埋め込みSQL文のDELETE文，INSERT文，またはUPDATE文実行によって影響を受けた行数が0行の場合，SQLCODE変数に100を設定したいときにYESを指定します。

詳細は，「23.2.3　SQL文のエラー処理」を参照してください。

(11)　CBLSQLSUPPRESSMSG（Linux(x86)，Linux(x64)で有効）

ODBCインタフェースを使って埋め込みSQL文の実行時，エラーが発生したときに出力されるKCCC8002R-Sのメッセージ出力を抑止したい場合，8002を指定します。

詳細は，「23.2.3　SQL文のエラー処理」を参照してください。

(12)　CBLSQLWMSG（Linux(x86)，Linux(x64)で有効）

ODBCインタフェースを使用してデータベースにアクセスする場合，警告メッセージの出力を抑止したいときにYESを指定します。指定しなかったときや，YES以外の値を指定したときは，警告メッセージを出力します。

詳細は，「23.2.3　SQL文のエラー処理」を参照してください。

35.3.9　デバッグ

＜この項の構成＞

(1)　CBLABNLST

(2)　CBLCORE

(3)　CBLDDUMP

(4)　CBLDMPLEVEL

(5)　CBLDMPPGMN

(6)　CBLDATADUMPFILE（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(7)　CBLEXCEPT

(8)　CBLPRMCHKW

(9)　CBLTDEXEC

(10)　CBL_FLSRVDUMP

(11)　CBLTDDISPLAY

(1)　CBLABNLST

異常終了時要約情報リストの出力先を指定します。

詳細は，「36.2　異常終了時要約情報リスト」を参照してください。

(2)　CBLCORE

シグナル発生時にコアダンプを出力するかどうかを指定します。詳細については，「36.8　コアダンプの出力」を参照してください。

(3)　CBLDDUMP

異常終了時のデータ領域ダンプの出力先を指定します。詳細については，「36.3　データ領域ダンプリスト」を参照してください。

(4)　CBLDMPLEVEL

データ領域ダンプリスト出力で，情報の出力レベルを指定します。詳細については，「36.4　データ領域ダンプリスト出力情報の選択」を参照してください。

(5)　CBLDMPPGMN

データ領域ダンプリストを出力するとき，ダンプリストを出力するプログラム名を指定します。詳細については，「36.4　データ領域ダンプリスト出力情報の選択」を参照してください。

(6)　CBLDATADUMPFILE（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

CBLDATADUMPサービスルーチンによるデータ領域ダンプの出力先を指定します。詳細は「36.3.2　データ領域ダンプリストの出力先」を参照してください。

(7)　CBLEXCEPT

この環境変数にNOSIGNALを指定すると，-DebugInf，-DebugInf,Trace，-DebugCompati，-DebugData，-TDInf，-CVInf，-DebugRangeのどれかを指定したプログラムの実行中に，例外が発生した場合，COBOLでの例外検出はしません。詳細は，「36.9　シグナル」を参照してください。

(8)　CBLPRMCHKW

形式

CBLPRMCHKW=｛YES｜NOCHK｝

YES

テストデバッグ中のプログラム間整合性エラーを警告化します。

NOCHK

-DebugCompatiオプション指定時でもプログラム間整合性チェックはしません。

プログラム間の引数および返却項目に関するエラーがあることがわかっているが，異常終了させないでテストデバッグまたはプログラムを実行したいときに指定する環境変数です。

詳細は，「36.5.2　整合性チェックの警告エラー出力」を参照してください。

(9)　CBLTDEXEC

プログラムの開始と同時に，次のテストデバッガの機能を連動させるときに指定します。この環境変数は，デバッグの対象となるプログラムを起動する前に指定しておく必要があります。

ラインモードによるテストデバッガ

カバレージ採取

カウント

プログラムからの連動実行の詳細は，マニュアル「COBOL2002　使用の手引　操作編」を参照してください。

形式

CBLTDEXEC=｛TL 引数｜CV 引数｜CN 引数｝

TL引数

ラインモードによるテストデバッグを連動実行します。

CV引数

カバレージ採取を連動実行します。

CN引数

カウントを連動実行します。

注意事項

引数に空白やタブを含むファイル名やディレクトリ名は指定してはなりません。

(10)　CBL_FLSRVDUMP

COBOL入出力サービスルーチンのデバッグ情報を出力するファイル名を指定します。詳細は，「13.5.2　インタフェース領域のダンプ出力」を参照してください。

(11)　CBLTDDISPLAY

連動実行時，テストデバッガを表示するための端末の表示先を変更するときに指定します。詳細は，マニュアル「COBOL2002　使用の手引　操作編」を参照してください。

35.3.10　オブジェクト指向

＜この項の構成＞

(1)　CBLGCINTERVAL

(2)　CBLGCSTART

(1)　CBLGCINTERVAL

前回のガーベジコレクションの終了時から，インスタンスオブジェクトの生成によってメモリ使用量がどれだけ増加するとガーベジコレクションを開始するかを指定します。

規則

指定できるバイト数の値は，0～2,147,483,647です。この値以外が指定されたときは，65,535バイトが仮定されます。

環境変数CBLGCINTERVALを指定しなかった場合は，65,535バイトが仮定されます。

指定できる値のけた数は，10けた以内です。10けたを超えているときは，65,535バイトが仮定されます。

指定例

ガーベジコレクションの実行間隔を32,768バイトにする例を次に示します。

CBLGCINTERVAL=32768
export CBLGCINTERVAL

注意事項

この環境変数の指定値を大きく設定した場合，メモリ資源を多く使用しますが，実行性能は向上する傾向にあります。指定値を小さく設定した場合，実行性能は向上しませんがメモリ資源を節約できます。アプリケーションの性質や環境を考慮に入れて指定してください。

(2)　CBLGCSTART

ガーベジコレクタの開始条件である，インスタンスオブジェクトの生成によるメモリ使用量の累積値を指定します。メモリ使用量の累積が，指定された値以上になったときガーベジコレクションが実行されます。

規則

指定できるバイト数の値は，0～2,147,483,647です。この値以外が指定されているときは，524,288バイトが仮定されます。

環境変数CBLGCSTARTを指定しなかった場合は，524,288バイトが仮定されます。

指定できる値のけた数は，10けた以内です。10けたを超えているときは，524,288バイトが仮定されます。

指定例

ガーベジコレクションの開始条件のメモリ使用量を65,536バイトにする例を次に示します。

CBLGCSTART=65536
export CBLGCSTART

注意事項

この環境変数の指定値を大きく設定した場合，メモリ資源を多く使用しますが，実行性能は向上する傾向にあります。指定値を小さく設定した場合，実行性能は向上しませんがメモリ資源を節約できます。アプリケーションの性質や環境を考慮に入れて指定してください。

36.　アプリケーションデバッグ機能

この章では，プログラムの実行時にデバッグ用のリスト出力や各種のチェックをする機能について説明します。

＜この章の構成＞

36.1　デバッグ機能の種類と概要

36.2　異常終了時要約情報リスト

36.3　データ領域ダンプリスト

36.4　データ領域ダンプリスト出力情報の選択

36.5　プログラム間整合性チェック

36.6　添字，指標の繰り返し回数，制御変数チェック

36.7　データ例外検出機能

36.8　コアダンプの出力

36.9　シグナル

36.10　DISPLAY文による一意名の16進ダンプ表示（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

36.11　テストデバッグ機能

36.12　カバレージ機能

36.1　デバッグ機能の種類と概要

アプリケーションデバッグ機能とは，プログラムの実行時に各種のエラーチェックをしたり，異常終了時やエラー発生時にデバッグに役立つリストを出力したりする機能です。

アプリケーションデバッグ機能を使うためには，デバッグ用のコンパイラオプションの指定が必要です。アプリケーションデバッグの各機能と指定するコンパイラオプションとの対応を次に示します。

表36-1　アプリケーションデバッグ機能と指定するコンパイラオプション

機能 | 指定するコンパイラオプション
異常終了時要約情報リストの出力 | -DebugInf，-DebugCompati，-DebugData，-TDInf，-CVInf，-DebugRangeのどれか（ただし，リスト中にトレースバック情報もあわせて出力するためには-DebugInf,Traceオプションの指定が必要）
データ領域ダンプリストの出力 | -DebugInf，-DebugInf,Trace，-DebugCompati，-DebugData，-TDInf，-CVInf，-DebugRangeのどれか
プログラム間整合性チェック | -DebugCompati
添字，部分参照範囲外チェック | -DebugCompati
データ例外検出機能 | -DebugData
テストデバッグ機能 | -TDInf
カバレージ機能 | -CVInf
添字の繰り返し回数の範囲外チェック | -DebugRange
デバッグ行の利用 | -DebugLine

注

-TDInfオプションを指定したプログラムをテストデバッガでデバッグするとき，-DebugCompatiオプションの指定有無に関係なく，プログラム間の引数および返却項目に関するエラーをチェックします。

また，-TDInfオプションはテストデバッガのためにゼロによる除算チェックなど，最適化に影響を与えるオブジェクトコードを生成します。これによって，-TDInfオプションを指定することで，異常終了時要約情報リストなどの行番号／欄の情報が変化する場合があります。行番号／欄の情報を常に正しく保つためには，-Optimize,0オプションを指定してください。

36.2　異常終了時要約情報リスト

COBOL2002では，プログラムが異常終了した場合に原因を究明するための情報を，異常終了時要約情報リストとして出力できます。

異常終了時要約情報リストを出力するには，COBOLプログラムのコンパイル時に-DebugInf，-DebugInf,Trace，-DebugCompati，-DebugData，-TDInf，-CVInf，-DebugRangeのどれかのオプションを指定してください。

ただし，COBOLプログラム実行時の初期処理，または終了処理中にエラーが発生した場合は，異常終了時要約情報リストが出力されない場合があります。

＜この節の構成＞

36.2.1　異常終了時要約情報リストの内容

36.2.2　トレースバック表示

36.2.3　環境変数情報表示

36.2.4　異常終了時要約情報リストの出力先

36.2.5　プログラム混在時のリストの内容

36.2.1　異常終了時要約情報リストの内容

異常終了時要約情報リストに出力される情報を，次に示します。

なお，次の説明中の「行番号」とは，コンパイルリストに示された行番号のことを指します。

最終実行文情報

異常終了したプログラムの名称※，コンパイル日時，行番号，欄が出力されます。

注※

プログラムの名称には，プログラムの種類によって次のどれかが表示されます。

関数名

クラス名／メソッド名

プログラム名

呼び出し元プログラムトレース

CALL文またはINVOKE文で呼び出されたプログラム（内側のプログラムと最外側のプログラムの呼び出しも含む）で異常終了した場合，呼び出し元のプログラムの名称※とCALL文またはINVOKE文の行番号が出力されます。

注※

プログラムの名称には，プログラムの種類によって次のどれかが表示されます。

関数名

クラス名／メソッド名

プログラム名

シグナル種別

シグナルの種別とその意味が出力されます。シグナル種別については，「36.9　シグナル」を参照してください。

トレースバック情報（-DebugInf,Traceオプション指定時だけ出力）

異常終了するまでに実行の対象となったプログラムの名称※と行番号が出力されます。詳細は，「36.2.2　トレースバック表示」を参照してください。

注※

プログラムの名称には，プログラムの種類によって次のどれかが表示されます。

関数名

メソッド名

プログラム名

環境変数情報

異常終了時の実行時環境変数の名称と指定値が出力されます。環境変数情報については，「36.2.3　環境変数情報表示」を参照してください。

出力例

異常終了時要約情報リストの出力例を，次に示します。

1.異常終了時要約情報リストの先頭に出力されるリストヘッダの内容を次に示します。

COBOL2002

COBOL2002を示します。

（X）

COBOL2002の稼働プラットフォーム識別を示します。詳細は「「付録J.2　このマニュアルでの表記」を参照してください。

VV-RR

COBOL2002のバージョン番号を示します。

YYYY-MM-DD

異常終了したプログラムの実行日付（年-月-日）を示します。

HH:MM:SS

異常終了したプログラムの実行時刻（時:分:秒）を示します。

2.-DebugInf，-DebugInf,Trace，-DebugCompati，-DebugData，-TDInf，-CVInf，-DebugRangeのどれかのオプションを指定した場合，最終実行文情報，およびCALL文またはINVOKE文のトレース情報が出力されます。

3.-DebugInf,Traceオプションを指定した場合，トレースバック情報が出力されます。

4.-DebugInf，-DebugInf,Trace，-DebugCompati，-DebugData，-TDInf，-CVInf，-DebugRangeのどれかのオプションを指定した場合，環境変数情報を出力します。

なお，1行が79カラムを超える場合は，改行します。

注意事項

最適化によって，最終実行文情報の行番号に数行のずれが発生したり，0になることがあります。正しい行番号／欄の情報を出力するには，コンパイル時に-Optimize,0オプションを指定して最適化を抑止する必要があります。

36.2.2　トレースバック表示

-DebugInf,Traceオプションを指定してコンパイルしたプログラムでは，異常終了時要約情報リストにトレースバック情報が出力されます。

トレースバック情報には，異常終了するまでに実行の対象となったプログラムの名称と次の行番号※が出力されます。

PROCEDURE DIVISIONまたはENTRY文の行番号※

実行された手続きの名称が書かれた行の行番号※

IF文などで分岐したあと，最初に実行した文の行番号※

出力される行番号※は1プログラム当たり最大240個です。

注※

行番号は，コンパイルリストに示された番号です。

トレースバック情報は，次の例の点線で示した矢印のように追跡して出力されます。この例では，プログラムSUBPRG1は実行済みであってもトレースバック情報の対象にはなりません。

（トレースバック情報出力範囲の例）

36.2.3　環境変数情報表示

COBOLプログラム異常終了時に有効な環境変数を出力します。出力する環境変数を次に示します。

COBOL2002実行時環境変数※

システム環境変数PATH，LANG，LD_LIBRARY_PATH（Linux(x86)，Linux(x64)）

システム環境変数PATH，LANG，LIBPATH（AIX(32)，AIX(64)）

注※

出力対象のCOBOL2002実行時環境変数については，「35.3.2　実行時環境変数の一覧」を参照してください。

異常終了の要因に環境変数の設定値が関係すると考えられる場合，環境変数情報からその値を容易に求められます。

36.2.4　異常終了時要約情報リストの出力先

異常終了時要約情報リストの出力先は，環境変数CBLABNLSTで指定します。

環境変数の指定例を次に示します。

形式

CBLABNLST=/users/abend.lst
export CBLABNLST

規則

ファイルは，絶対パス名で指定します。

指定したファイルがすでにある場合は，ファイルの最後にリストが追加されます。ファイルがない場合は，ファイルが新規に作成されます。

複数のプロセスから同時に一つのファイルに対して異常終了時要約情報リストを出力した場合，動作は保証しません。このため，環境変数CBLABNLSTで指定する異常終了時要約情報リストの出力先は，プロセスごとに異なるファイルとなるようにしてください。

環境変数CBLABNLSTの指定がない場合，異常終了時要約情報リストは，標準エラー（stderr）に出力されます。

また，環境変数に値を設定していない場合（"CBLABNLST="だけを指定した場合），ファイルは出力されません。

36.2.5　プログラム混在時のリストの内容

次のように種類の異なるプログラムが混在していると，出力される異常終了時要約情報リストの内容が異なります。

デバッグ用オプション（-DebugInf，-DebugInf,Trace，-DebugCompati，-DebugData，-TDInf，-CVInf，または-DebugRange）を指定したプログラムと指定しないプログラムが混在している場合

COBOL以外のプログラムが混在している場合

プログラムが混在している場合に出力される異常終了時要約情報リストの内容を次に示します。

表36-2　プログラム混在時の異常終了時要約情報リストの内容

異常終了したプログラム | 異常終了前の状態
-DebugInf,Trace指定のプログラムがすでに動作している | デバッグ用オプション指定のプログラムがすでに動作している | デバッグ用オプション指定のプログラムがまだ動作していない
デバッグ用オプションのどれかを指定したプログラム | ○※¹ | × | ×
-DebugInf,Traceを指定したプログラム | ○ | ○ | ○
デバッグ用オプション指定のないプログラム，またはCなどの他言語プログラム | ×※¹ | ×※² | リストは出力されない。

（凡例）

○：異常終了時要約情報リスト中にトレースバック情報を含む

×：異常終了時要約情報リスト中にトレースバック情報を含まない

注※1

リストは，異常終了したプログラムよりも前に制御が渡っている-DebugInf,Trace指定のプログラムから出力されます。

注※2

リストは，異常終了したプログラムよりも前に制御が渡っている-DebugInf，-DebugCompati，-DebugData，-TDInf，-CVInf，または-DebugRange指定のプログラムから出力されます。

36.3　データ領域ダンプリスト

COBOL2002では，プログラムが異常終了したとき，またはCBLDATADUMPサービスルーチンを呼び出したときのデータ領域の状態を，データ領域ダンプリストとして出力できます。

データ領域ダンプリストを出力するには，COBOLプログラムのコンパイル時に-DebugInf，-DebugInf,Trace，-DebugCompati，-DebugData，-TDInf，-CVInf，-DebugRangeのどれかのオプションを指定してください。データ領域ダンプリストには，どれかのオプションが指定されているプログラムの情報が出力されます。

HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で，COBOLプログラムの翻訳時に-SrcList,xxxxx,DataLocオプション※を指定して，コンパイルリスト（原始プログラムリスト）にデータ項目の相対位置を表示させた場合，データ領域中の各データ項目の相対位置がわかるため，データ領域を効率良く参照できます。

注※

xxxxxには，OutputAll，CopyAll，CopySup，NoCopyのどれかを指定します。

なお，相対位置の表示については，「32.5.13　リスト出力の設定」の「(1)　-SrcListオプション」および「付録C.2　リストの見方」の「(4)　相対位置表示時の原始プログラムリスト（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）」を参照してください。

＜この節の構成＞

36.3.1　データ領域ダンプリストの内容

36.3.2　データ領域ダンプリストの出力先

36.3.1　データ領域ダンプリストの内容

＜この項の構成＞

(1)　データ領域ダンプの出力条件

(2)　出力される内容

(3)　出力例

(1)　データ領域ダンプの出力条件

データ領域ダンプの出力の対象となるプログラムを次に示します。

1回以上実行され，かつ，異常終了の時点，またはCBLDATADUMPサービスルーチン実行の時点で，CANCEL文で取り消されていないプログラム

1回以上実行された利用者定義関数

異常終了した時点，またはCBLDATADUMPサービスルーチン実行の時点で動作中のメソッド

異常終了したメソッド，またはCBLDATADUMPサービスルーチン実行時に動作中のメソッドを含むクラス

(2)　出力される内容

データ領域ダンプリストに出力される情報を次に示します。

異常終了したプログラム，またはCBLDATADUMPサービスルーチンを呼び出すプログラムが実行されるまでに1度以上実行されたCOBOLプログラム名※1と，定義されているデータの内容※2

注※1

プログラムの名称には，プログラムの種類によって次のどれかが表示されます。

関数名

クラス名／メソッド名

プログラム名

注※2

実行が終了したプログラムの局所場所節（LOCAL-STORAGE SECTION）は出力されない

実行が終了したINITIAL属性プログラムの作業場所節（WORKING-STORAGE SECTION）は出力されない。

EXTERNAL句を指定したファイル名とレコード領域の内容

EXTERNAL句を指定したデータ名とデータの内容
EXTERNAL指定のファイル名およびデータ名は，外部属性を持ち，COBOL実行単位内で一つの領域を共用するため，特定のプログラムには所属しません。このため，EXTERNAL句を指定したファイル名とレコード領域およびEXTERNAL句を指定したデータ名とデータの内容は，定義されたプログラムのコンパイラオプション※指定の有無に関わらず表示されます。ただし，コンパイラオプション※を指定したプログラムが一つも実行されていない場合，EXTERNAL句を指定したファイル名とレコード領域およびEXTERNAL句を指定したデータ名とデータの内容は表示されません。

注※

コンパイラオプションは次のいずれかです。

-DebugInf, -DebugInf,Trace，-DebugCompati，-DebugData，-TDInf，-CVInf，-DebugRange

これらのリストは，それぞれの領域の先頭を0としたデータの相対的な位置と内容をダンプ形式で出力したものです。

(3)　出力例

(a)　プログラムで定義されたデータ領域の出力例

注

同一内容の行が続く場合は，「LINE(S)位置　SAME AS ABOVE」が表示されます。

このリスト中のプログラム名は，PROGRAM-ID段落に書かれたプログラム名です。

(b)　EXTERNAL句を指定したファイルのレコード領域の出力例

このリスト中のファイル名は，SELECTの直後に書かれたファイル名です。

(c)　EXTERNAL句を指定したデータ領域の出力例

このリスト中のデータ名は，EXTERNAL句を指定した01レベルのデータ名を示します。位置と内容の部分は，データの先頭を0とした相対的な位置と内容をダンプ形式で示したものです。

36.3.2　データ領域ダンプリストの出力先

データ領域ダンプの出力先は，環境変数CBLDDUMPまたは環境変数CBLDATADUMPFILEが存在する場合に指定されたファイルに出力します。

プログラム異常終了時
環境変数CBLDDUMP

CBLDATADUMPサービスルーチン使用時
環境変数CBLDATADUMPFILE

環境変数の指定方法を次に示します。

＜この項の構成＞

(1)　プログラム異常終了時

(2)　CBLDATADUMPサービスルーチン使用時

(1)　プログラム異常終了時

CBLDDUMP=/users/data.dmp
export CBLDDUMP

(2)　CBLDATADUMPサービスルーチン使用時

CBLDATADUMPFILE=/users/data.dmp
export CBLDATADUMPFILE

ファイルは，絶対パス名で指定します。

指定したファイルがすでにある場合は，ファイルの最後にリストが追加されます。ファイルがない場合は，ファイルが新規に作成されます。

環境変数の指定がない場合，および環境変数に値を設定していない場合（"CBLDDUMP="または"CBLDATADUMPFILE="だけを指定した場合），リストは出力されません。

36.4　データ領域ダンプリスト出力情報の選択

データ領域ダンプリストを出力する場合，プログラムの構成によっては，多量のリストが出力されることがあります。

リストが多量に出力されると，データ領域を参照するときに，該当する領域を探すのが困難だったり，エディタで編集できなかったりする場合があります。

出力するリストの情報を選択するためには，環境変数CBLDMPPGMNまたは環境変数CBLDMPLEVELを使用します。

なお，環境変数CBLDMPPGMNと環境変数CBLDMPLEVELは，組み合わせても使用できます。

＜この節の構成＞

(1)　環境変数の設定

(2)　環境変数の組み合わせによるデータ領域ダンプリストの出力情報の設定

(3)　出力例

(1)　環境変数の設定

(a)　CBLDMPPGMN

形式

CBLDMPPGMN=プログラム名称〔:プログラム名称〕

規則

プログラム名称には，データ領域ダンプリストのプログラムで定義されたデータ領域（EXTERNAL句指定以外）の情報で，出力したいプログラムのプログラム名称を指定します。

複数のプログラム名称を指定する場合は，コロン（:）で区切ります。

プログラム名称の直前に空白文字を入れてはいけません。

使用例

CBLDMPPGMN=SAMPLE1:SAMPLE5
export CBLDMPPGMN

プログラム名称がSAMPLE1とSAMPLE5の情報だけを出力します。

(b)　CBLDMPLEVEL

形式

CBLDMPLEVEL = ｛1｜2｝

規則

1を指定した場合は，プログラムで定義されたデータ領域（EXTERNAL句指定以外）の情報だけを出力します。

2を指定した場合は，EXTERNAL句指定ファイルのレコード領域とEXTERNAL句指定のデータ領域の情報だけを出力します。

注意事項

上記以外の値が指定された場合や，これらの環境変数の指定がない場合は，データ領域ダンプリストの出力情報の選択はできません。

(2)　環境変数の組み合わせによるデータ領域ダンプリストの出力情報の設定

環境変数CBLDMPPGMN，CBLDMPLEVELの組み合わせによる出力情報の内容を，次に示します。

表36-3　環境変数の組み合わせによるデータ領域ダンプリストの出力内容

環境変数CBLDMPPGMN | 環境変数CBLDMPLEVEL
指定なし | 指定あり
１ | ２
指定なし | Ａ，Ｂ | Ａ | Ｂ
指定あり | Ｃ，Ｂ | Ｃ | Ｂ

出力情報の内容

Ａ

プログラムで定義されたデータ領域（EXTERNAL句指定以外）の情報をすべて出力します。

Ｂ

EXTERNAL句指定ファイルのレコード領域，およびEXTERNAL句指定のデータ領域の情報を出力します。

Ｃ

プログラムで定義されたデータ領域（EXTERNAL句指定以外）の情報を指定されたプログラム名についてだけ出力します。

なお，Ｂだけ出力する場合でも，プログラムで定義されたデータ領域（EXTERNAL句指定以外）出力時のヘッダ情報は出力されます。ただし，Ａ，Ｃだけ出力する場合は，EXTERNAL句指定ファイルのレコード領域，またはEXTERNAL句指定のデータ領域出力時のヘッダ情報は出力されません。

リスト出力のプログラム名は，プログラムの種類によって，次のどれかとなります。

関数名

クラス名／メソッド名

プログラム名

(3)　出力例

次に，環境変数CBLDMPPGMNまたはCBLDMPLEVELを指定して出力したデータ領域ダンプリストの出力例を示します。

(a)　CBLDMPPGMN=SUBPRG1かつCBLDMPLEVEL=1を指定した場合

(b)　CBLDMPLEVEL=2だけを指定した場合

なお，上記のリストでは，印刷すると1.および2.で改ページされます。

36.5　プログラム間整合性チェック

引数および返却項目を利用してプログラム間の連絡をする場合，呼び出し元プログラムと呼び出し先プログラムの引数および返却項目の形式が異なると，プログラムが異常終了したり，不正な動作をしたりすることがあります。COBOL2002では，-DebugCompatiまたは-TDInfオプションを指定すれば，プログラム間の引数および返却項目の整合性をチェックできます。

なお，COBOL2002では，プログラム間整合性チェックよりも，例外名EC-PROGRAM-ARG-MISMATCHでの引数と返却項目の適合チェックの使用を推奨します。引数と返却項目の適合チェックの詳細は，マニュアル「COBOL2002　言語　標準仕様編　10.7 引数と返却項目の適合」を参照してください。

＜この節の構成＞

36.5.1　整合性チェックの内容

36.5.2　整合性チェックの警告エラー出力

36.5.1　整合性チェックの内容

-DebugCompatiまたは-TDInfオプションを指定すると，次の項目についてプログラム間の整合性をチェックできます。

引数の長さ

引数の個数

引数の属性（BY REFERENCE，BY CONTENT，BY VALUE）

返却項目の長さ

コンパイラオプションと整合性チェックの関係

呼び出し元プログラム，呼び出し先プログラムのコンパイル時に指定したオプションと，整合性チェックの関係を次に示します。

呼び出し先 | 呼び出し元
-DebugCompati | -TDInf | -DebugCompati，-TDInfなし
-DebugCompati | ○ | △ | ×
-TDInf | △ | △ | ×
-DebugCompati，-TDInfなし | × | × | ×

（凡例）

○：整合性チェックが行われる

△：テストデバッガを使用したデバッグ時だけ，整合性チェックが行われる

×：整合性チェックは行われない

規則

プログラム間の整合性チェックに関する規則を次に示します。

整合性チェックでプログラム間で受け渡す引数および返却項目に矛盾がある場合は，メッセージが出力され，プログラムが異常終了します。
ただし，-DebugCompatiオプションの指定がないプログラムをテストデバッグする場合は，環境変数CBLPRMCHKWにYESを指定すると処理を続行できます。また，環境変数CBLPRMCHKWにNOCHKを指定すると，-DebugCompatiオプション指定時およびテストデバッグ時に，プログラム間整合性チェックで不整合があってもエラーとしないで，処理を続行できます。詳細は，「36.5.2　整合性チェックの警告エラー出力」を参照してください。

整合性をチェックするのは，CALL文でCOBOLプログラムを呼び出すときで，実行時にチェックします。

CALL定数で内側のプログラムを呼び出す場合，-DebugCompatiオプションまたは-TDInfオプションの指定がないときも，翻訳時に整合性をチェックします。

COBOLプログラムとCプログラムとの間のチェックはしません。

引数が可変長項目のとき，引数の長さはチェックしません。

-Main,System，-Main,V3オプションを指定したプログラムに対しては，引数の長さ，引数の個数をチェックしません。

-SimMainオプションを指定した実行可能ファイルで，最初に制御が渡るプログラムでの引数チェックはしません。

BY VALUE指定の浮動小数点項目は，送り出し側作用対象と受け取り側作用対象で同じ属性でなければなりません。属性が異なる場合，整合性チェックでエラーとなります。

-DebugCompatiオプションを指定すると，一部の例外名に対するTURN指令が無効となります。詳細は「21.8.2　例外検出での注意事項」の「(4)　コンパイラオプションとの関連性」を参照してください。

引数が動的長基本項目の場合，送り出し側作用対象と受け取り側作用対象がともに動的長基本項目で，かつその字類が一致しなければなりません。また，LIMIT指定が双方に指定されている場合は，その値が一致していなければなりません。

36.5.2　整合性チェックの警告エラー出力

プログラム間の引数および返却項目に矛盾があっても，整合性エラーとしないでテストデバッグを実行したい場合，環境変数CBLPRMCHKWを指定します。

形式

CBLPRMCHKW =｛NOCHK｜YES｝
export CBLPRMCHKW

規則

環境変数CBLPRMCHKWにNOCHKを指定した場合
プログラム間の引数および返却項目について，整合性がチェックされません。この場合，プログラム間の引数および返却項目に不整合があっても異常終了しないで，メッセージも出力されません。
-DebugCompatiまたは-DebugRangeオプションを指定したプログラムでも，プログラム間の引数および返却項目に不整合があっても異常終了しないで，メッセージも出力されません。ただし，プログラム間の引数および返却項目の整合性チェック以外のチェック（繰り返し回数の範囲チェックなど）は，実行されます。

環境変数CBLPRMCHKWにYESを指定した場合
-DebugCompatiおよび-DebugRangeオプションを指定しないプログラムのテストデバッグ中に，プログラム間の引数および返却項目に関するエラーが発生したときには，警告メッセージが出力され実行が継続されます。
-DebugCompatiまたは-DebugRangeオプションを指定したプログラムでは，環境変数CBLPRMCHKWにYESを指定しても無効となり，エラー発生時にはメッセージが出力され異常終了します。

YES，またはNOCHK以外の文字を指定した場合は，この環境変数の指定は無効になります。

注意事項

この環境変数を指定した場合，引数および返却項目の矛盾した領域に対して不当な値を設定したり，不当な領域を参照したりすると，異常終了やシステムダウンすることがあります。また，引数および返却項目に次のような矛盾があるプログラム間で，データを受け渡しする場合はプログラムの見直しが必要です。
・RETURNING指定ありと，指定なしが混在している
・USING指定のデータ項目数が異なる
・データ項目の長さが8バイトを超えるデータと8バイト以下のデータとで受け渡しする

この環境変数の指定は，引数が不一致の場合のCOBOLの動作を保証するものではありません。

36.6　添字，指標の繰り返し回数，制御変数チェック

-DebugCompatiまたは-DebugRangeオプションを指定してコンパイルしたプログラムの実行時，次のエラーが検出されると，メッセージが出力され，実行が中止します。

＜この節の構成＞

(1)　-DebugCompatiオプション指定時

(2)　-DebugRangeオプション指定時

(3)　注意事項

(1)　-DebugCompatiオプション指定時

表操作で使用する添字または指標名が指す表要素が表の範囲外である。

部分参照の指定がデータ項目の範囲外である。

プログラム間で整合性が取れていない。

(2)　-DebugRangeオプション指定時

表操作で使用する添字または指標名の値が各次元の繰り返し回数の範囲外である。

部分参照の指定がデータ項目の範囲外である。

(3)　注意事項

-DebugCompatiまたは-DebugRangeオプションを指定すると，一部の例外名に対するTURN指令が無効となります。詳細は「21.8.2　例外検出での注意事項」の「(4)　コンパイラオプションとの関連性」を参照してください。

COBOL2002では，-DebugCompatiまたは-DebugRangeオプションよりも，例外名EC-BOUND-REF-MOD，またはEC-BOUND-SUBSCRIPTでの，添字，指標の繰り返し回数，制御変数チェックの使用を推奨します。

36.7　データ例外検出機能

-DebugDataオプションを指定してコンパイルしたプログラムを実行したとき，格納値とデータ項目の属性とがチェックされます。チェックされるのは，次の外部または内部10進項目です。格納値がデータ項目の属性と矛盾している場合，データ例外エラーとなります。

転記の送り出し側作用対象（受け取り側作用対象が2進項目の場合だけ）

算術式の作用対象

比較の作用対象

添字

部分参照の最左端位置と長さ

データ例外が検出されると，エラーメッセージが出力され，プログラムが異常終了します。

AIX(32)，AIX(64)，Linux(x86)，Linux(x64)では，-DebugData,ValueHexオプションを指定してコンパイルしたプログラムを実行した場合，データ例外が検出されると，出力されるエラーメッセージにデータ項目の属性と矛盾している格納値が16進数で表示されます。

36.8　コアダンプの出力

-DebugInf，-DebugInf,Trace，-DebugCompati，-DebugData，-TDInf，-CVInf，-DebugRangeオプションのどれかを指定してコンパイルしたプログラムが異常終了したとき，通常はコアダンプは出力されません。コアダンプが出力されるためには，環境変数CBLCOREに1を設定します。環境変数CBLCOREの形式を次に示します。

形式

CBLCORE=1

規則

1以外の値を設定したときは，コアダンプが出力されません。

注意事項

システムのcoreファイルサイズの設定値が0になっている場合，coreファイルが出力されません。システムのマニュアルなどで必要な設定値をご確認ください。

36.9　シグナル

＜この節の構成＞

(1)　COBOLが登録するシグナル

(2)　シグナルの登録と回復

(3)　シグナルの登録と回復の注意事項

(4)　プロセスの終了

(5)　プログラム実行時にシグナル登録しない環境変数CBLEXCEPT

(1)　COBOLが登録するシグナル

シグナルとは，ハードウェア，およびソフトウェアで発生する割り込みのことです。COBOLでは，-DebugInf，-DebugInf,Trace，-DebugCompati，-DebugData，-TDInf，-CVInf，-DebugRangeオプションのどれかを指定してコンパイルしたプログラムを実行する場合，次に示すシグナルを登録します。

SIGILL（無効な命令）

SIGIOT（abortによる異常終了）

SIGEMT（EMT命令）(HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Solaris(SPARC)で有効)

SIGFPE（浮動小数点例外，算術演算エラー）

SIGBUS（バスエラー）

SIGSEGV（セグメンテーション違反）

なお，マルチスレッド対応COBOLプログラムでは，さらに次の二つが追加されます。これらは，システムのシグナルではなく，異常終了時要約情報リストに表示されるシグナル種別です。

RUNTIME ERROR（実行時エラーの発生）

CBLABN（CBLABNサービスルーチンの呼び出し）

COBOL以外のプログラムで上記シグナルを登録した場合，異常終了時の結果を保証できない場合があります。詳細は，「19.1　C言語との連携」を参照してください。

上記シグナルが発生した原因として，代表的なものを次に示します。

添字，または指標の値がOCCURS句で定義した範囲を超えた場合

部分参照で一意名の範囲を超えて参照した場合

呼び出すプログラムと呼び出されるプログラムとで引数の属性，長さ，数が不一致である場合

COBOL実行時エラーの発生，CBLABNサービスルーチンの呼び出し，またはCOBOLプログラム以外abortシステムコールを発行した場合

また，-DebugInf，-DebugInf,Trace，-DebugCompati，-DebugData，-TDInf，-CVInf，-DebugRangeオプションのどれかを指定してコンパイルされたCOBOLプログラムに，一度以上制御が渡り，上記のシグナル発生によって異常終了した場合，COBOLの戻り値は1になります。

割り込み発生条件が，COBOLによって変更されることはありません。

(2)　シグナルの登録と回復

-DebugInf，-DebugInf,Trace，-DebugCompati，-DebugData，-TDInf，-CVInf，-DebugRangeオプションと-MultiThreadオプション（マルチスレッド対応COBOLプログラム）指定によるシグナルの登録と，COBOLプログラム終了時のシグナルの回復について，次に示します。

コンパイラオプション
COBOLのシグナル登録／回復

-DebugInf
-DebugInf,Trace
-DebugCompati
-DebugData
-TDInf
-CVInf
-DebugRange
-MultiThread
シグナル登録
シグナル回復

あり
あり
登録あり
シグナルは，すべてのスレッドで有効
回復なし

なし※2
登録あり
回復あり

なし※1
－
登録なし
－

あり／なしが混在
あり
登録あり
シグナルは，すべてのスレッドで有効
回復なし

なし※2
登録あり※3
回復あり※3

（凡例）

－：該当しない

注※1

-DebugInf，-DebugInf,Trace，-DebugCompati，-DebugData，-TDInf，-CVInf，-DebugRangeオプションを指定しないプログラムだけが動作した場合です。

注※2

-MultiThreadオプションを指定しないマルチスレッド非対応のCOBOLプログラムだけが動作した場合です。

注※3

-DebugInf，-DebugInf,Trace，-DebugCompati，-DebugData，-TDInf，-CVInf，-DebugRangeオプション指定プログラムが初めて動作したときにCOBOLがシグナルを登録し，COBOLプログラム終了時シグナルが回復します。

(3)　シグナルの登録と回復の注意事項

(a)　COBOLがシグナルを登録する場合

プログラム実行中にシグナルが発生したとき，COBOLは異常終了を通知するCOBOLのメッセージ，および異常終了時要約情報リストを出力して，マルチスレッド対応COBOLプログラム動作時はスレッドを終了します。マルチスレッド対応COBOLプログラム以外ではプロセスを終了します。

COBOLプログラム以外でシグナルを登録し，その後，COBOLが同じシグナルを登録するとき，COBOLがシグナルを回復しないかぎり，先に登録していたシグナルのアクションには従いません。

(b)　COBOLがシグナルを登録しない場合

プログラム実行中にシグナルが発生しても，異常終了を通知するCOBOLのメッセージ，および異常終了時要約情報リストは出力されません。プログラムの終了方法はシステムに依存します。

COBOLプログラム以外でシグナルを登録している場合は，登録時のアクションに従います。

(c)　COBOLがシグナルを回復する場合

COBOLプログラムの終了時，COBOLは登録したシグナルをCOBOLプログラム実行前の状態に回復します。

CBLENDサービスルーチン呼び出し後，シグナルはCOBOLプログラム実行前の状態に回復しています。サービスルーチンの詳細は，「29.　サービスルーチン」を参照してください。

(d)　COBOLがシグナルを回復しない場合

COBOLプログラムの終了，またはCBLENDサービスルーチン呼び出し後，COBOLはシグナルを回復しません。

COBOLプログラム以外でシグナルを登録し，その後，COBOLが同じシグナルを登録するとき，先に登録していたシグナルの動作には従いません。

(e)　マルチスレッド対応COBOLプログラムの場合

登録したシグナルは，すべてのスレッドで有効となります。

COBOLプログラムの終了時，COBOLは登録したシグナルを回復しません。このため，CBLENDサービスルーチン呼び出し後でも，シグナルはCOBOLが登録した状態です。

シグナルの動作は，プロセス内のすべてのスレッドに影響があります。
このため，次の順でシグナルが発生した場合，COBOLはシグナルをとらえ，異常終了を通知するCOBOLのメッセージを出力してシグナルが発生したスレッドを終了します。

スレッドで，-DebugInfオプション指定のプログラムを実行した。

1.以降，-DebugInfオプション指定のプログラムが動作していない別スレッドでシグナルが発生した。

(f)　COBOL以外のプログラムでのシグナル登録（ユーザの設定）

COBOLプログラムの呼び出し終了後，シグナル発生時の動作を規定する必要があるときは，COBOL以外のプログラムでシグナルの再登録を行ってください。

-DebugInfオプションを指定したプログラムが実行されたときにCOBOLが登録するシグナルが，COBOL以外のプログラムで登録するシグナルに影響があるときは，プログラムの制御を変更するか，または-DebugInfオプションを指定しなければ回避できます。

(4)　プロセスの終了

異常終了時要約情報リストを出力後，プロセスは終了コード１で終了します。

(5)　プログラム実行時にシグナル登録しない環境変数CBLEXCEPT

この環境変数にNOSIGNALを指定すると，デバッグ用コンパイラオプション-DebugInf, -DebugInf,Trace，-DebugCompati，-DebugData，-TDInf，-CVInf，-DebugRange のどれかを指定したプログラムの実行中にシグナル登録をしません。

このため，異常終了要因となるシグナルが発生しても，デバッグ情報は出力しません。終了方法は，制御プログラムの終了処理に依存します。

制御プログラムの終了処理を次に示します。

NOSIGNALを指定した場合，セグメンテーション違反など，シグナルの発生により異常終了したとき，メッセージ，および異常終了時要約情報リストなどは出力されません。このとき，coreファイルが出力されます※ので，coreファイル，実行可能ファイルからシステムデバッガ(xdbやdbxなど)のトレース情報を採取してください。
また，ユーザプログラムで例外処理（シグナル登録）があれば，ユーザプログラムに制御が移ります。
なお，ミドルソフトウェアなどで，この例外処理を実装している場合もありますので，異常終了時の出力情報を確認してください。

NOSIGNALの指定をしても，COBOL実行時エラーメッセージを出力して異常終了する場合は，従来と同じ動作となり，デバッグ用コンパイラオプションを指定したプログラムでは，メッセージ，および異常終了時要約情報リストが出力されます。

この環境変数を指定しない場合は，従来と同様に，COBOLがシグナルを登録し，シグナル発生時はデバッグ情報を出力する動作となります。

この環境変数を指定しても実行性能への影響はありません。

注※

システムのcoreファイルサイズの設定値が0になっている場合，coreファイルが出力されません。システムのマニュアルなどで必要な設定値をご確認ください。

36.10　DISPLAY文による一意名の16進ダンプ表示（AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

DISPLAY文での表示では，英数字項目に印字不可能文字が設定されている場合や，2進項目にPICTURE句のけた数を超えて値が格納されている場合には，内容を確認できないことがあります。このような場合に，一意名の格納値を16進ダンプ表示すると，一意名の内容を確認できます。

一意名の格納値をバイト単位で16進ダンプ表示するときは，DISPLAY文にIN DATA DUMPを指定します。

DISPLAY文の言語仕様については，マニュアル「COBOL2002　言語　標準仕様編」を参照してください。

各データ属性を16進ダンプ表示したときの表示例を次の表に示します。

表36-4　データ属性を16進ダンプ表示したときの表示例

データ属性
16進ダンプ表示の例

格納されている定数値
表示形式

集団項目，英字項目，英数字項目，英数字編集項目
'ABCD'
41424344​

日本語項目，日本語編集項目
N'あいう'
82a082a282a4

外部10進項目
+123
313233

内部10進項目
+123
123c

数字編集項目
+12.3
2b31322e33

2進項目，COMP-X項目，アドレス名，アドレスデータ項目，ポインタ項目
値10(H'0000000​A')が4バイトの領域に格納されている場合

ビッグエンディアンの場合

0000000​a

リトルエンディアンの場合

0a000000

外部浮動小数点項目
+0.25E+0
2b322e35452d3031

内部浮動小数点項目
+0.25E+0

ビッグエンディアンの場合

3e800000

リトルエンディアンの場合

0000803​e

外部ブール項目
B'010'
303130

内部ブール項目
B'010'
40

36.11　テストデバッグ機能

テストデバッガは，TDコマンドなどでプログラムの実行を制御しながらプログラムをテストしたり，デバッグしたりする機能です。テストデバッガで，プログラムの実行を実行文単位に中断し，データ項目に対して値を表示，代入，比較してデバッグできます。また，未完成のプログラムをテストできます。

テストデバッガには，ラインモードとバッチモードの二つの方法があります。

ラインモードでは，TDコマンドを入力することによって，対話的にテストしたり，デバッグしたりできます。ラインの入出力だけなので，応答の速いテストデバッグができます。

バッチモードでは，あらかじめ，実行したいTDコマンドをファイルにまとめて記述しておき，そのファイルを入力して起動することによって，一括してテストデバッグを実行する方法です。TDコマンドを記述したファイルを指定した起動コマンドを入力すると，ファイルに記述されたTDコマンドを一括して実行します。一度実行を開始すれば，利用者の操作を必要としないので，効率良く大量のプログラムがテストできます。

テストデバッグ機能の詳細については，マニュアル「COBOL2002　使用の手引　操作編」を参照してください。

＜この節の構成＞

(1)　デバッグ機能

(2)　テスト機能

(1)　デバッグ機能

実行プログラムの中断
プログラムの実行を実行文単位に中断し，データの代入などができます。

実行の制御
設定した中断点などに基づき実行できます。機能の概要についてはマニュアル「COBOL2002　使用の手引　操作編」を参照してください。

データの操作
COBOLプログラムのデータに対して，値の表示，値の代入，比較ができます。

(2)　テスト機能

未完成のプログラムを単体でテストできます。呼び出し元のプログラム，呼び出し先のプログラム，ファイル，またはDC（データコミュニケーション）を，TDコマンドによってシミュレーションできます。

36.12　カバレージ機能

カバレージを使用して，テスト終了後，C0メジャー，C1メジャー，未実行文情報などのカバレージ情報を集計して表示できます。カバレージ情報を確認することでテストの進捗状況や性能を数値で把握できます。カバレージには，テストの進捗状況を定量的に表すカバレージ情報，文の実行回数をカウントするカウント情報の表示機能があります。

カバレージの方法には，バッチモードがあります。

バッチモードでは，起動コマンドの指示によって，カバレージの機能を操作できます。プログラムからカバレージを連動実行させ，一括してカバレージの蓄積およびカウント情報を表示することもできます。一度実行を開始すれば，利用者の操作を必要としないので，効率良く大量のプログラムのカバレージ情報の蓄積ができます。

カバレージ機能の詳細については，マニュアル「COBOL2002　使用の手引　操作編」を参照してください。

＜この節の構成＞

(1)　カバレージ情報の表示

(2)　カウント情報の表示

(1)　カバレージ情報の表示

カバレージ情報は，テストによって実行された手続き文の割合です。計画したテスト内容に従って，プログラムに記述した手続き文がテスト実行されたかどうかを把握でき，テスト工程の進捗度を判定できます。

実行されたテストプログラムの文はカバレージ情報としてプログラム情報ファイルに記憶されます。プログラム情報ファイルに蓄積されたカバレージ情報は，次の形式で表示できます。

翻訳単位ごとに実行された文の割合を，文・分岐・呼び出し文ごとに示す。

ソース原文を表示して実行が済んだ文と実行されていない文を示す。

原始プログラムの修正によって変更された差分に対するカバレージ情報を示す。

さらに，蓄積したカバレージ情報をクリアする，別の環境で蓄積したカバレージ情報をマージするなどの機能があります。

(2)　カウント情報の表示

テスト実行させたプログラムの文の実行回数を表示します。繰り返し実行される文の実行回数や，呼び出すプログラムの実行回数も計測できるため，プログラムの実行性能を把握できます。このカウント情報を基にして，改善の施策を検討できます。

37.　64bitアプリケーションの作成

この章では，UNIX64 COBOL2002について説明します。

＜この章の構成＞

37.1　UNIX64 COBOL2002について

37.2　COBOLソースの作成とコンパイル

37.3　プログラムの実行

37.4　実行可能ファイルと共用ライブラリの作成

37.1　UNIX64 COBOL2002について

UNIX64 COBOL2002では，ポインタサイズの64bit化に対応しています。

ここでは，UNIX64 COBOL2002の機能について説明します。

＜この節の構成＞

37.1.1　使用できない機能

37.1.2　UNIX64 COBOL2002固有の言語仕様

37.1.3　UNIX64 COBOL2002各機能の固有仕様

37.1.1　使用できない機能

UNIX64 COBOL2002で使用できない機能について説明します。

＜この項の構成＞

(1)　機能

(2)　サービスルーチン

(1)　機能

UNIX64 COBOL2002では使用できない機能を次に示します。

表37-1　UNIX64 COBOL2002で使用できない機能

機能名
OS
説明

HP-UX
(IPF64)
AIX
(64)
Linux
(x64)
Linux
(IPF64)

画面節（SCREEN SECTION）による画面操作
○
○
×
×
画面節（SCREEN SECTION）を使用して画面の入出力をします。

画面節（WINDOW SECTION）による画面操作
○
○
×
×
画面節（WINDOW SECTION）を使用して画面の入出力をします。

バイトストリーム入出力サービスルーチン
○
○
○
×
COBOLのレコード定義に依存しないで，Cプログラムなどで作成したバイナリファイルの入出力をするサービスルーチンです。

XMAP3を使用した書式印刷機能
×
×
×
×
書式と行データを重ね合わせる印刷（書式オーバレイ印刷）や，印刷制御付きの行データを印刷します。

リモートファイルアクセス機能
×
×
×
×
接続されているほかのワークステーションやPC上にある，ISAMを使用する索引編成ファイルにアクセスします。

通信節による画面操作
×
×
×
×
ディスプレイとの間で画面データを送受信したり，プリンタに帳票データを送信したりします。

データコミュニケーション機能
×
○
○
○
オンラインコントロールプログラムを経由して，端末，ファイル，またはほかのプログラムとメッセージを受け渡します。

データベース操作機能（ODBCインタフェース）
×
×
○
×
SQL埋め込みCOBOLプログラムで，データベースにアクセスできます。

CGIプログラム作成支援機能
×
×
×
×
COBOL2002で作成したプログラムをCGIプログラムとして利用するための機能です。

Unicode機能
×
○
○
×
COBOLが扱うデータをUnicodeとして扱うことで，プログラム間およびファイル入出力では，Unicodeでやり取りをする機能です。

数字項目のけた拡張機能
○
○
○
×
数字項目（外部10進項目，内部10進項目），数字定数および数字編集項目で扱えるけた数の上限を18けたから38けたに拡張する機能です。

日本語集団項目
×
○
○
×
データ項目にGROUP-USAGE IS NATIONALが指定された，用途がNATIONALで字類および項類が日本語となる集団項目です。

動的長基本項目機能
×
○
○
×
DYNAMIC LENGTH句を定義することで，実行時にデータ項目（英数字項目または日本語項目）の長さを変更できます。

定数長拡張機能
×
○
○
×
英数字定数の定数長を拡張します。

XML連携機能
○
○
○
×
COBOLプログラムから，XMLデータをCOBOLのレコードとして入出力します。

（凡例）

○：使用できる

×：使用できない

(2)　サービスルーチン

UNIX64 COBOL2002では使用できないサービスルーチンを次に示します。

表37-2　UNIX64 COBOL2002で使用できないサービスルーチン

サービスルーチン名
OS
説明

HP-UX
(IPF64)
AIX
(64)
Linux
(x64)
Linux
(IPF64)

CBLADDPAIR
×
×
×
×
CGIリストの最後に「名前」と「値」の対を追加します。

CBLCGIINIT
×
×
×
×
受け取ったフォーム情報からCGIリストを作成します。

CBLCGITRACE
×
×
×
×
CGIプログラムの作成を支援します。サービスルーチンのトレース情報をファイルに出力します。

CBLCONVERTTEXT
×
×
×
×
テキスト文字列を実体参照形式に変換し，出力します。

CBLCREATELIST
×
×
×
×
CGIリストを新たに作成します。

CBLDELETEPAIR
×
×
×
×
CGIリストの現在のポイント位置の「名前」と「値」の対を削除します。

CBLDESTROYLIST
×
×
×
×
CGIリストを削除し，領域を解放します。

CBLDISPLAYTEXT
×
×
×
×
テキスト文字列を出力します。

CBLENDREPEAT
×
×
×
×
CGIリストに，HTML拡張言語のREPEATで終端を認識する終端インジケータを追加します。

CBLFILLTEMPLATE
×
×
×
×
HTMLテンプレートをインタプリットし，動的なWebページを出力します。

CBLFINDNEXTPAIR
×
×
×
×
CGIリストの，次のポイント位置から「名前」をキーにして検索し，「値」を取得します。

CBLFINDPAIR
×
×
×
×
CGIリストの先頭ポイント位置から「名前」で検索し，「値」を取得します。

CBLGETENV
×
×
×
×
環境変数の値を取得します。

CBLGETPAIR
×
×
×
×
CGIリストの現在のポイント位置から「名前」と「値」の対を取得します。

CBLGETPAIRNEXT
×
×
×
×
CGIリストの現在のポイント位置から「名前」と「値」の対を取得し，ポイント位置を進めます。

CBLHTMLBEGIN
×
×
×
×
HTMLの先頭部分を出力します。

CBLHTMLEND
×
×
×
×
HTMLの終端部分を出力します。

CBLLISTCOUNT
×
×
×
×
CGIリストから「名前」と「値」の対の数を取得します。

CBLPRINTENV
×
×
×
×
CGI環境変数の値をHTML形式で出力します。

CBLPRINTLIST
×
×
×
×
CGIリストの内容をHTML形式で出力します。

CBLSENDERROR
×
×
×
×
エラーメッセージをHTML形式で出力します。

JCPOPUP
○
○
×
×
表形式のデータ項目を主画面とは別の画面に表示し，選ばれたブロック番号をインタフェース領域に格納します。

CBLDATADUMP
×
○
○
×
COBOLプログラム実行時の任意の時点でのデータ領域ダンプリストを出力します。

（凡例）

○：使用できる

×：使用できない

37.1.2　UNIX64 COBOL2002固有の言語仕様

UNIX64 COBOL2002では，ポインタサイズの64bit化に対応しました。そのため，UNIX64 COBOL2002に対応するCOBOL2002の言語仕様にも一部変更があります。

UNIX64 COBOL2002固有の言語仕様について説明します。

＜この項の構成＞

(1)　アドレス系データを表現するデータ項目

(2)　長さを返す組み込み関数の戻り値

(1)　アドレス系データを表現するデータ項目

長さが8バイトになるアドレス系データを表現するデータ項目を，次に示します。これらの項目の自然な境界は8バイトです。SYNCHRONIZED句を指定してけた詰めする場合は，8バイト境界になります。

アドレス名

アドレスデータ項目

ポインタ項目

指標名

指標データ項目

オブジェクト参照データ項目

既定義オブジェクト参照

ADDRESS OF指定で指定した一意名のアドレス

連絡節でのBY REFERENCE指定のデータ項目

SYNCHRONIZED句については，マニュアル「COBOL2002　言語　標準仕様編　9.16.80 SYNCHRONIZED句」を参照してください。

けた詰めについては，マニュアル「COBOL2002　言語　標準仕様編　4.4.1(7) 実行用コードの効率を高めるための項目のけた詰め」を参照してください。

(2)　長さを返す組み込み関数の戻り値

返却値のサイズが8バイト2進になる組み込み関数を，次に示します。

LENGTH関数

LENGTH OF指定で生成されるデータ領域

COUNT-CHAR関数

LENGTH-OF-SUBSTRING関数

LENGTH関数については，マニュアル「COBOL2002　言語　標準仕様編　11.31 LENGTH関数」を参照してください。

COUNT-CHAR関数については，マニュアル「COBOL2002　言語　拡張仕様編　24.2.1 COUNT-CHAR関数」を参照してください。

LENGTH-OF-SUBSTRING関数については，マニュアル「COBOL2002　言語　拡張仕様編　24.2.3 LENGTH-OF-SUBSTRING関数」を参照してください。

37.1.3　UNIX64 COBOL2002各機能の固有仕様

各機能の固有仕様について説明します。

＜この項の構成＞

(1)　サービスルーチンの引数でのハンドル項目

(2)　インタフェース領域中のアドレス格納領域

(3)　併合処理のメモリサイズについて

(1)　サービスルーチンの引数でのハンドル項目

引数のハンドル項目サイズが8バイト2進になるサービスルーチンを，次に示します。

表37-3　引数のハンドル項目サイズが8バイト2進になるサービスルーチン

サービスルーチン名 | 参照先
バイトストリーム入出力サービスルーチン※ | 15.　バイトストリーム入出力サービスルーチン（UNIX32，HP-UX(IPF64)，AIX(64)，Linux(x64)で有効）

注※

UNIX64 COBOL2002では，AIX(64)，Linux(x64)，HP-UX(IPF64)で有効です。

(2)　インタフェース領域中のアドレス格納領域

インタフェース領域中のアドレス格納領域が8バイトになるサービスルーチンを，次に示します。

COBOL入出力サービスルーチン

なお，UNIX64 COBOL2002では，アドレス格納領域が自然な境界の8バイトになるように，アドレス格納領域の直前に明示的な境界の調整領域を追加しました。領域については，「13.3.2　インタフェース領域の形式」を参照してください。

(3)　併合処理のメモリサイズについて

併合処理のメモリサイズについては，アドレス格納領域として使うサイズがUNIX64 COBOL2002では8バイトになります。併合処理で使用するメモリサイズの計算式については，「11.3.2　併合処理のメモリサイズ」を参照してください。

37.2　COBOLソースの作成とコンパイル

UNIX64 COBOL2002でのCOBOLソースのコンパイル方法は，UNIX32 COBOL2002と同じです。しかし，UNIX64 COBOL2002とUNIX32 COBOL2002では使用できるコンパイラオプションの一部が違います。

UNIX64 COBOL2002が使用できるコンパイラオプションについては，「32.5.4　コンパイラオプションの一覧」を参照してください。

37.3　プログラムの実行

ここでは，プログラムの実行について説明します。

＜この節の構成＞

37.3.1　プログラムの実行環境の設定

37.3.2　プログラムの実行時の注意事項

37.3.1　プログラムの実行環境の設定

プログラムの実行環境の設定について説明します。

＜この項の構成＞

(1)　実行時環境変数の設定方法

(2)　実行時環境変数の一覧

(1)　実行時環境変数の設定方法

UNIX64 COBOL2002での実行時環境変数の設定方法は，UNIX32 COBOL2002と同じです。詳細については，「35.3.1　実行時環境変数の設定方法」を参照してください。

(2)　実行時環境変数の一覧

UNIX64 COBOL2002とUNIX32 COBOL2002では使用できる実行時環境変数の一部が違います。UNIX64 COBOL2002が使用できる実行時環境変数については，「35.3.2　実行時環境変数の一覧」を参照してください。

37.3.2　プログラムの実行時の注意事項

UNIX64 COBOL2002でのプログラム実行時の注意事項を次に示します。

HP-UX(IPF64)の場合

HP-UX(IPF64) COBOL2002で作成したアプリケーションからCALL文を使用して，HP-UX(IPF) COBOL2002で作成した実行可能ファイルを呼び出せます※。ただし，HP-UX(IPF64) COBOL2002で作成したアプリケーションからはHP-UX(IPF) COBOL2002で作成した共用ライブラリに含まれるプログラムは呼び出せません。

注※

HP-UX(IPF64) COBOL2002とHP-UX(IPF) COBOL2002がインストールされた環境で実行してください。

Linux(x64)の場合

Linux(x64) COBOL2002で作成したアプリケーションからCALL文を使用して，Linux(x86) COBOL2002で作成した実行可能ファイルを呼び出せます※。ただし，Linux(x64) COBOL2002で作成したアプリケーションからはLinux(x86) COBOL2002で作成した共用ライブラリに含まれるプログラムは呼び出せません。

注※

Linux(x64) COBOL2002とLinux(x86) COBOL2002がインストールされた環境で実行してください。

Linux(IPF64)の場合

Linux(IPF64) COBOL2002で作成したアプリケーションからCALL文を使用して，Linux(x86) COBOL2002で作成した実行可能ファイル，および共用ライブラリに含まれるプログラムは呼び出せません。

注

Linux(IPF64) COBOL2002と，Linux(x86) COBOL2002またはLinux(x64) COBOL2002は同一マシン上にインストールできません。前提となるシステムが異なります。

AIX(64)の場合

AIX(64) COBOL2002で作成したアプリケーションからCALL文を使用して，AIX(32) COBOL2002で作成した実行可能ファイルを呼び出せます※。ただし，AIX(64) COBOL2002で作成したアプリケーションからはAIX(32) COBOL2002で作成した共用ライブラリに含まれるプログラムは呼び出せません。

注※

AIX(64) COBOL2002とAIX(32) COBOL2002がインストールされた環境で実行してください。

37.4　実行可能ファイルと共用ライブラリの作成

UNIX64 COBOL2002での実行可能ファイルと共用ライブラリの作成の詳細については，「34.　実行可能ファイルと共用ライブラリの作成」を参照してください。

＜この節の構成＞

37.4.1　実行可能ファイルと共用ライブラリの作成時の注意事項

37.4.1　実行可能ファイルと共用ライブラリの作成時の注意事項

UNIX64 COBOL2002での実行可能ファイルと共用ライブラリの作成時の注意事項を次に示します。

他システムのCOBOL2002で作成したファイル（オブジェクト，共用ライブラリ，アーカイブ）をリンクすることはできません。

38.　Linux(x86) COBOL2002，Linux(x64) COBOL2002でのUTF-8ロケールの対応

この章では，Linux(x86) COBOL2002，Linux(x64) COBOL2002を使用する場合の注意事項について説明します。

＜この章の構成＞

38.1　Linux(x86) COBOL2002，Linux(x64) COBOL2002について

38.2　コンパイル時の注意事項

38.3　実行可能ファイルと共用ライブラリの作成時の注意事項

38.4　実行時の注意事項

38.1　Linux(x86) COBOL2002，Linux(x64) COBOL2002について

ここでは，Linux(x86) COBOL2002，Linux(x64) COBOL2002の動作環境，使用できる機能，使用できるサービスルーチンについて説明します。

＜この節の構成＞

38.1.1　動作環境

38.1.2　使用できる機能

38.1.3　使用できるサービスルーチン

38.1.1　動作環境

Linux(x86) COBOL2002，Linux(x64) COBOL2002では，UTF-8ロケールだけをサポートしています。

UTF-8ロケールで動作する場合，Unicode機能を前提機能としています。このため，使用できる機能，日本語項目，および多バイト文字の使用範囲に制限があります。

UTF-8ロケールの詳細については，「付録A.4　Unicodeの場合」の「(1)　UTF-8の動作環境（Linux(x86)，Linux(x64)で有効）」を参照してください。Unicode機能の詳細については，「27.　Unicode機能（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）」を参照してください。

38.1.2　使用できる機能

Linux(x86) COBOL2002，Linux(x64) COBOL2002で使用できる機能については，「27.5　Unicodeに対応する機能」を参照してください。

38.1.3　使用できるサービスルーチン

使用できるサービスルーチンに制限があります。

使用できるサービスルーチンについては，次の章を参照してください。

サービスルーチン

「29.　サービスルーチン」を参照してください。

38.2　コンパイル時の注意事項

Linux(x86) COBOL2002，Linux(x64) COBOL2002でコンパイルするときの注意事項を次に示します。

シフトJISで記述されたCOBOLソースプログラムだけがコンパイルできます。UTF-8で記述されたCOBOLソースはコンパイルできません。

コンパイル時には，-UniObjGenオプションおよび環境変数CBLSRCENCODINGにSJISを指定しなければなりません。
-UniObjGenオプションの詳細は，「32.5　コンパイラオプション」の「32.5.14　その他の設定」の「(17)　-UniObjGenオプション（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）」を参照してください。コンパイラ環境変数CBLSRCENCODINGの詳細は，「32.6.3　コンパイラ環境変数の詳細」の「(12)　CBLSRCENCODING（Linux(x86)，Linux(x64)で有効）」を参照してください。

ccblコマンドは使用できません。ccbl2002コマンドを使用してください。

日本語文字，半角かたかななど，UTF-8で多バイトとなる文字は，言語仕様上，使用できる個所に制限があります。詳細は，「27.7.2　コンパイル時の制限事項」を参照してください。

環境変数名，環境変数に設定する値，コマンドライン引数，コンパイル時に使用するファイル名，ディレクトリの絶対パス名，およびコンパイルを実行するカレントディレクトリの絶対パス名には，UTF-8で多バイトとなる文字は使用できません。詳細は，「27.7.2　コンパイル時の制限事項」を参照してください。

Linux(x86) COBOL2002，Linux(x64) COBOL2002で使用できるコンパイラオプションについては，「32.5.4　コンパイラオプションの一覧」を参照してください。また，-UniObjGenオプションと同時に指定した場合に無効となるオプションについては，「32.5.3　コンパイラオプションの優先順位」の「(2)　オプション間の優先順位」の「(b)　オプションを指定すると，ほかのオプションが無効となる場合」を参照してください。

Linux(x86) COBOL2002，Linux(x64) COBOL2002で使用できるコンパイラ環境変数については，「32.6.2　コンパイラ環境変数の一覧」を参照してください。

コンパイルリストはシフトJISで出力されます。詳細は，「27.6　入出力情報と取り扱う文字コード」を参照してください。

コンソールに出力するエラーメッセージはUTF-8で出力されます。詳細は，「27.6　入出力情報と取り扱う文字コード」を参照してください。

38.3　実行可能ファイルと共用ライブラリの作成時の注意事項

Linux(x86) COBOL2002，Linux(x64) COBOL2002で，実行可能ファイルと共用ライブラリを作成するときの注意事項を次に示します。

Linux(x86) COBOL85で作成したファイル（オブジェクト，共用ライブラリ，アーカイブ）をリンクすることはできません。COBOL2002環境下で再コンパイルが必要です。

実行可能ファイル名および共用ライブラリ名にUTF-8で多バイトとなる文字を使用しないでください。使用した場合の動作は保証しません。

38.4　実行時の注意事項

Linux(x86) COBOL2002，Linux(x64) COBOL2002の実行時の注意事項を次に示します。

Linux(x86) COBOL85で作成した実行可能ファイル，または共用ライブラリは，COBOL2002環境下で実行および呼び出すことはできません。COBOL2002環境下で，COBOL85で作成したプログラムが実行または呼び出された場合，KCCC0117R-Sのメッセージが出力されます。

実行時には，環境変数CBLLANGにUNICODEを指定しなければなりません。環境変数CBLLANGなどのUnicode機能で使用する環境変数については，「27.　Unicode機能（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）」の「27.4.2　実行」を参照してください。

日本語文字，半角かたかななど，UTF-8で多バイトとなる文字は，ファイル名に使用できないなどの制限があります。詳細は，「27.7.3　実行時の制限事項」を参照してください。

付録

＜この付録の構成＞

付録A　COBOLで使用する文字集合

付録B　日立COBOL85からの古い仕様

付録C　コンパイルリスト

付録D　COBOLで使用するファイル

付録E　コンパイラの制限値

付録F　入出力状態の値

付録G　COBOL85とCOBOL2002のコンパイラオプションの対応

付録H　サービスルーチンのリソース一覧

付録I　各バージョンの変更内容

付録J　このマニュアルの参考情報

付録K　用語解説

付録A　COBOLで使用する文字集合

ここでは，COBOLで使用する文字集合について説明します。

＜この節の構成＞

付録A.1　概要

付録A.2　シフトJISの場合

付録A.3　EUCの場合

付録A.4　Unicodeの場合

付録A.1　概要

このシステムでは，「計算機コード化文字集合の国別文字集合」および「COBOL文字集合における拡張文字」の表現形式として次の文字を使用できます。

シフトJIS

日本語EUC

Unicode（ただし，Unicode機能を使用する場合。COBOL文字集合には使用できない。）

COBOLで使用する文字集合の分類と定義に関する詳細については，マニュアル「COBOL2002　言語　標準仕様編　4.1 文字集合」を参照してください。

各システムで使用できる動作環境および文字コードについて，次に示します。

＜この項の構成＞

(1)　動作環境と文字コード

(2)　文字コードに関する注意事項

(1)　動作環境と文字コード

環境変数LANGの設定値と，コンパイル，実行の動作環境，およびCOBOLで使用する文字コードを次に示します。

表A-1　動作環境と文字コード

システム
環境変数LANG
の設定値
動作環境
（ロケール）
文字コード

HP-UX(IPF)
ja_JP.SJIS
シフトJIS
シフトJIS
Unicode※

ja_JP.eucJP
日本語EUC
日本語EUC

HP-UX(IPF64)
ja_JP.SJIS
シフトJIS
シフトJIS

ja_JP.eucJP
日本語EUC
日本語EUC

AIX(32)
AIX(64)
Ja_JP
シフトJIS
シフトJIS
Unicode※

ja_JP
日本語EUC
日本語EUC

Solaris(SPARC)
ja_JP.PCK
シフトJIS
シフトJIS(PCK)

ja
日本語EUC
日本語EUC

Linux(IPF64)
ja_JP.eucJP
ja_JP.ujis
日本語EUC
日本語EUC

Linux(x86)
Linux(x64)
ja_JP.UTF-8
ja_JP.utf8
UTF-8
Unicode※

注※

Unicode機能を使用することで，Unicodeデータを扱うことができます。詳細については，「付録A.4　Unicodeの場合」を参照してください。

(2)　文字コードに関する注意事項

(a)　環境変数LANGの扱い

環境変数LANGの設定値について詳しくは，「付録A.2　シフトJISの場合」，「付録A.3　EUCの場合」，および「付録A.4　Unicodeの場合」を参照してください。

環境変数LANGに値を指定しなかった場合，または表中の環境変数LANGの値以外を指定した場合，エラーメッセージは英語で表示されます。

日本語項目に対する表意定数の値

日本語項目に対する表意定数の値は，次のようになります。

シフトJISコード，およびPCKコードの場合

SPACE：(8140)₁₆

ZERO：(824F)₁₆

日本語EUCコードの場合

SPACE：(A1A1)₁₆

ZERO：(A3B0)₁₆

Unicodeの場合

Unicode機能を使用した場合の表意定数については，「27.5　Unicodeに対応する機能」の「27.5.1　基本機能」を参照してください。

付録A.2　シフトJISの場合

環境変数LANGにシフトJISに対応した設定値が設定された環境（シフトJIS環境）では，コンパイル時および実行時の動作環境がシフトJISとなります。シフトJIS環境では，シフトJISコードで記述されたCOBOLソースをコンパイルおよび実行できます。シフトJISに対応した環境変数LANGの設定値を次に示します。

表A-2　動作環境がシフトJISとなる環境変数LANGの設定値

OS
環境変数LANGの設定値

HP-UX(IPF)
HP-UX(IPF64)
ja_JP.SJIS

AIX(32)
AIX(64)
Ja_JP

Solaris(SPARC)
ja_JP.PCK

Linux
設定できません。

シフトJIS環境で作成したCOBOLプログラム（オブジェクト，アーカイブライブラリ，共用ライブラリ，または実行可能ファイル）は，シフトJIS環境で実行する必要があります。また，ほかの環境で作成したCOBOLプログラムと混在して使用することはできません。シフトJIS環境以外で実行した場合，およびほかの環境で作成したCOBOLプログラムと混在して使用した場合は，動作は保証しません。

付録A.3　EUCの場合

＜この項の構成＞

(1)　EUCコードを使用したCOBOLプログラム

(2)　-EucPositionオプション（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC)で有効）

(1)　EUCコードを使用したCOBOLプログラム

(a)　使用方法

環境変数LANGに，日本語EUCに対応した設定値が設定された環境（日本語EUC環境）では，コンパイル時および実行時の動作環境が日本語EUCとなります。日本語EUC環境では，日本語EUCコードで記述されたCOBOLソースをコンパイルおよび実行できます。日本語EUCに対応した環境変数LANGの設定値を次に示します。

表A-3　動作環境が日本語EUCとなる環境変数LANGの設定値

OS
環境変数LANGの設定値

HP-UX(IPF)
HP-UX(IPF64)
ja_JP.eucJP

AIX(32)
AIX(64)
ja_JP

Solaris(SPARC)
ja

Linux(x86)
Linux(x64)
設定できません。

Linux(IPF64)
ja_JP.eucJP
ja_JP.ujis

日本語EUC環境で作成したCOBOLプログラム（オブジェクト，アーカイブライブラリ，共用ライブラリ，または実行可能ファイル）は，日本語EUC環境で実行する必要があります。また，ほかの環境で作成したCOBOLプログラムと混在して使用することはできません。日本語EUC環境以外で実行した場合，およびほかの環境で作成したCOBOLプログラムと混在して使用した場合は，動作は保証しません。

(b)　 注意事項

次の内容に反した場合の結果は保証しません。また，エラーチェックもその旨の記述がないときは行われません。

半角かたかな文字は，2バイト文字となります。そのため，半角かたかな文字がある文字定数と関連する定義エリアは2バイト分必要となります。

（例）

文字定数に関する既存のエラーチェックも半角かたかな1文字を2バイトとして行います。

半角かたかな文字は，日本語定数の中に含めることはできません。日本語定数の中に半角かたかな文字を指定した場合，コンパイルエラーとなります。

半角かたかな文字は，2バイトで1文字しか印刷されません。そのため，後ろのデータ項目の印刷位置が半角かたかな文字の文字数分だけずれます。

固定形式正書法では72バイト目までが翻訳の対象とされ，73バイト目以降の記述は無視されます。シフトJIS環境で作成された半角かな文字を含む原始プログラムをEUCコードに変換して使用すると，半角かな文字の部分が右側にずれます。73バイト目以降にずれた部分は，翻訳の対象とみなされません。

利用者語およびデータ項目として，3バイトの外字は使用できません。

外字，機種依存文字およびシフトJISコードの2バイト文字データ，シフトJISコードの半角かたかな文字のデータ自体をプログラム中で使用する場合は，16進文字定数または16進日本語文字定数で指定してください。

2バイト文字，半角かたかな文字のCOBOLソースファイルファイル名，ディレクトリ名は使用できません。コード体系の相違から問題が発生する場合があります。

-Switch,EBCDIK／-Switch,EBCDICオプション指定時，またはPROGRAM COLLATING SEQUENCE句の指定時に，比較条件に半角かたかな文字を含むALL文字定数を指定した場合の動作は保証しません。

(2)　-EucPositionオプション（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC)で有効）

EUCコード使用時に見かけ上の文字位置で，固定形式正書法の境界を決定するときに指定します。このオプションを指定した場合，半角かたかな文字は2バイトとして扱われます。しかし，固定形式正書法の境界を決定するときには，見かけ上の1バイトとして扱われます。

（例）

このCOBOLソースファイルがEUCコードで書かれていた場合，コンパイルエラーとなります。

-EucPositionオプションを指定すると，このままコンパイルできます。ただし，この場合でもPIC X(5)ではなく，PIC X(10)にする必要があります。

(a)　使用方法

コンパイル時に，-EucPositionオプションを指定します。

(b)　-EucPositionオプション指定時の注意事項

-EucPositionオプションの対象となるCOBOLソースファイルがEUCコードでない場，その結果は保証しません。

環境変数LANGに，「表A-3　動作環境が日本語EUCとなる環境変数LANGの設定値」に示す設定値が指定されていない環境で-EucPositionオプションが指定されたとき，-EucPositionオプションは無視されます。

自由形式正書法のCOBOLソースファイルに対して，-EucPositionオプションは指定できません。自由形式正書法のCOBOLソースファイルに-EucPositionオプションを指定した場合は，コンパイルエラーとなります。自由形式正書法とオプションとの関係については，「32.2.3　正書法」の「(4)　自由形式正書法で指定できないコンパイラオプション」を参照してください。

付録A.4　Unicodeの場合

Unicodeについては，「27.　Unicode機能（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）」を参照してください。

＜この項の構成＞

(1)　UTF-8の動作環境（Linux(x86)，Linux(x64)で有効）

(2)　Unicodeデータを扱うCOBOLプログラム（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(1)　UTF-8の動作環境（Linux(x86)，Linux(x64)で有効）

環境変数LANGにUTF-8に対応した設定値が設定された環境（UTF-8環境）では，コンパイル時および実行時の動作環境がUTF-8となります。UTF-8環境では，シフトJISコードで記述されたCOBOLソースをコンパイルおよび実行できます。UTF-8に対応した環境変数LANGの設定値を次に示します。

表A-4　動作環境がUTF-8となる環境変数LANGの設定値

OS
環境変数LANGの設定値

Linux(x86)
Linux(x64)
ja_JP.UTF-8
ja_JP.utf8

注意事項

Unicode機能を使用する必要があります。

UTF-8環境で作成したCOBOLプログラム（オブジェクト，アーカイブライブラリ，共用ライブラリ，または実行可能ファイル）は，UTF-8環境で実行する必要があります。また，ほかの環境で作成したCOBOLプログラムと混在して使用することはできません。UTF-8環境以外で実行した場合，およびほかの環境で作成したCOBOLプログラムと混在して使用した場合は，動作は保証しません。

UTF-8環境では，Unicodeで記述されたCOBOLソースはコンパイルおよび実行できません。

ccblコマンドは使用できません。

(2)　Unicodeデータを扱うCOBOLプログラム（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

COBOL2002では，Unicode機能を使用してUnicodeのデータを扱うCOBOLプログラムをコンパイルおよび実行できます。Unicode機能の詳細は，「27.　Unicode機能（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）」を参照してください。

付録B　日立COBOL85からの古い仕様

ここでは，COBOL85で作成したプログラムを移行するために用意されている機能について説明します。

COBOL2002で新規にプログラムを作成する場合は，-IdentCallオプション（COBOL85形式オプション -i ）や環境変数CBL_ファイル名を使用しないで，-DynamicLink,IdentCallオプション（COBOL85形式オプション -Bs）や環境変数CBLD_ファイル名を使用してください。

＜この節の構成＞

付録B.1　COBOL85移行用コンパイラオプション

付録B.1　COBOL85移行用コンパイラオプション

＜この項の構成＞

(1)　-IdentCallオプション（COBOL85形式オプション -i ）

(2)　CBL_ファイル名

(1)　-IdentCallオプション（COBOL85形式オプション -i ）

形式

COBOL2002形式オプション

-IdentCall プログラム名 [,プログラム名…]

COBOL85形式オプション

-i プログラム名 [,プログラム名…]

一意名指定のCALL文で呼び出す可能性のあるプログラム名称を指定して，動的なリンクで呼び出すシミュレーションができます。ただし，このオプションで指定するプログラム名称が格納されているCOBOLソースファイル，またはオブジェクトファイルをコンパイルしたときに同時に指定し，同一ロード上でリンクしてください。

-IdentCallオプションを指定して動的なリンクでの呼び出しのシミュレーションを行っている一意名指定のCALL文は，-DynamicLink,IdentCallオプション（COBOL85形式オプション -Bs）へ移行することを推奨します。

-DynamicLink,IdentCallオプションの詳細については，「32.5.4　コンパイラオプションの一覧」を参照してください。

(2)　CBL_ファイル名

環境変数CBL_ファイル名は，UNIX COBOL85の互換ため用意されている環境変数です。COBOL2002では，環境変数CBLD_ファイル名を使用してください。

規則

環境変数CBL_ファイル名は，環境変数CBLD_ファイル名の指定がある場合，無効となります。

そのほかの規則，および設定方法については，「35.3.5　ファイル」の「(3)　CBLD_ファイル名」を参照してください。

設定例

（COBOLでの記述例）

SELECT A-FILE ASSIGN TO SYS000.

（環境変数の設定例）

CBL_A_FILE=ISAMDL:NOISAMPREV

付録C　コンパイルリスト

＜この節の構成＞

付録C.1　リストの出力

付録C.2　リストの見方

付録C.1　リストの出力

コンパイラが出力するリストの種類と出力方法について説明します。

＜この項の構成＞

(1)　コンパイルリストの種類

(2)　リストの出力方法

(3)　コンパイルリストの出力に関連する翻訳指令

(1)　コンパイルリストの種類

(a)　情報リスト

プログラム情報やエラー総数などのコンパイル時の情報を要約して出力したものです。

(b)　原始プログラムリスト

コンパイル時に入力した原始プログラムを出力したものです。相互参照情報やコンパイル時にエラーが検出されたときのエラーメッセージなども出力されます。

(c)　エラーリスト

コンパイルエラーのエラーレベルやエラーメッセージを出力したものです。

(2)　リストの出力方法

(a)　コンパイラオプションの指定

COBOLプログラムをコンパイルしてコンパイルリストを出力するオプションを次に示します。これらのコンパイラオプションを指定しない場合，コンパイルリストを出力しません。

-SrcList,NoCopy

COPY文で複写した登録集原文の内容を原始プログラムリスト中に展開しません。

-SrcList,CopySup

SUPPRESS指定のあるCOPY文で複写した登録集原文の内容は原始プログラムリスト中に展開しません。SUPPRESS指定のないCOPY文の場合はすべて展開します。

-SrcList,CopyAll

COPY文で複写した登録集原文の内容をすべて原始プログラムリスト中に展開します。

-SrcList,OutputAll

COPY文の指定や条件翻訳，LISTING指令にかかわらず，強制的にすべてのソース原文をコンパイルリストに展開します。SUPPRESS指定のあるCOPY文の場合も展開します。

-SrcList,xxxxx,NoFalsePath

条件翻訳結果の無効行はコンパイルリストに出力しません。

xxxxxには，CopyAll，CopySup，NoCopyのどれかを指定します。

-SrcList,xxxxx,DataLoc（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

コンパイルリスト（原始プログラムリスト）にデータ項目の相対位置と長さ（バイト）を16進数で表示します。相対位置は，データ部のファイル節／作業場所節／局所場所節の各節の先頭からの位置を表示します。

xxxxxには，OutputAll，CopyAll，CopySup，NoCopyのどれかを指定します。

NoCopy，CopySup，CopyAll，およびOutputAllサブオプションは，同時には指定できません。同時に指定した場合，最後に指定したオプションが有効になります。

NoFalsePathサブオプションは，その他のオプションと同時に指定する必要があります。ただし，OutputAllサブオプションと同時に指定した場合は，すべての行が出力されるため，NoFalsePathサブオプションは意味を持ちません。

HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)でDataLocサブオプション指定時にSレベル／Uレベルのコンパイルエラーが発生した場合，DataLocサブオプションの指定があっても相対位置は表示しません。

HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)でDataLocサブオプションを指定する場合，OutputAll，CopyAll，CopySup，NoCopyのどれかと同時に指定する必要があります。指定がない場合は，コンパイルエラーとなります。

(b)　コンパイルリストの出力先

情報リストと原始プログラムリストはコンパイルリストファイル（.lst）に出力されます。

また，エラーリストは標準エラー出力（stderr）に出力されます。

(3)　コンパイルリストの出力に関連する翻訳指令

コンパイルリストの出力に関連する翻訳指令について，説明します。

(a)　LISTING指令

LISTING指令は，コンパイルリストにソースを出力するかどうかを指定します。

>>LISTING ON

この行以降のソースをコンパイルリストに出力します。

>>LISTING OFF

この行の次行以降のソースをコンパイルリストに出力しません。

なお，LISTING指令の行そのものは，ON／OFFの状態に関係なく，常にコンパイルリストに出力されます。

LISTING指令の例を次に示します。下線部分は，コンパイルリストに出力されません（出力されない行は詰められます）。

（例1）

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
      ENVIRONMENT DIVISION.
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      >>LISTING OFF
      01 A PIC X(10).
      >>LISTING ON
      01 B PIC X(10).
      PROCEDURE DIVISION.

          DISPLAY 'OK'.

上記のプログラムを-SrcList,CopyAllオプションを指定してコンパイルした場合，次のようなコンパイルリストが出力されます。

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
      ENVIRONMENT DIVISION.
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      >>LISTING OFF
      >>LISTING ON
      01 B PIC X(10).
      PROCEDURE DIVISION.

          DISPLAY 'OK'.

コンパイルリストへの出力がOFFの状態でも，LISTING OFFの行は出力されます。LISTING OFFが出力される例を次に示します。

（例2）

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE2.
      ENVIRONMENT DIVISION.
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      >>LISTING OFF
      01 A PIC X(10).
      >>LISTING OFF       ←この行は出力される
      01 B PIC X(10).
      >>LISTING ON
      PROCEDURE DIVISION.

          DISPLAY 'OK'.

上記のプログラムを-SrcList,CopyAllオプションを指定してコンパイルした場合，次のようなコンパイルリストが出力されます。

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE2.
      ENVIRONMENT DIVISION.
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      >>LISTING OFF
      >>LISTING OFF
      >>LISTING ON
      PROCEDURE DIVISION.

          DISPLAY 'OK'.

LISTING指令を含むCOBOLプログラム（登録集原文）をCOPY文で複写した場合，LISTING指令の効果は登録集原文の終わりで終了し，複写元のプログラムのCOPY文が持つLISTING指令の状態に戻ります。COPY文の言語仕様については，マニュアル「COBOL2002　言語　標準仕様編　3.2.2 COPY文」を参照してください。

原始プログラム（SAMPLE1.CBL）中のCOPY文で，LISTING指令を含むCOBOLプログラム（登録集原文　SAMPLE2.CBL）を複写した場合の例を次に示します。

（例3）

原始プログラムSAMPLE1.CBL

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
      ENVIRONMENT DIVISION.
      COPY SAMPLE2.
      PROCEDURE DIVISION.

          DISPLAY 'OK'.

登録集原文 SAMPLE2.CBL

      DATA DIVISION.
      WORKING-STORAGE SECTION.
      >>LISTING OFF
      01 A PIC X(10).

登録集原文複写後のプログラム

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
      ENVIRONMENT DIVISION.
      COPY SAMPLE2.
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      >>LISTING OFF
      01 A PIC X(10).
      PROCEDURE DIVISION.  ←この行以降は出力される

          DISPLAY 'OK'.

上記のプログラムを-SrcList,CopyAllオプションを指定してコンパイルした場合，次のようなコンパイルリストが出力されます。

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
      ENVIRONMENT DIVISION.
      COPY SAMPLE2.
C1     DATA DIVISION.
C1     WORKING-STORAGE SECTION.
C1     >>LISTING OFF
      PROCEDURE DIVISION.

          DISPLAY 'OK'.

(b)　PAGE指令

PAGE指令は，コンパイルリストの改ページを指定します。PAGE指令のコンパイルリストでの効果は，固定形式正書法の改ページ標識「/」と同じです。

PAGE指令の例を次に示します。

（例）

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
      ENVIRONMENT DIVISION.
      >>PAGE   ←この行から改ページする
      DATA DIVISION.
      WORKING-STORAGE SECTION.

コンパイルリスト

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
      ENVIRONMENT DIVISION.

（この位置で改ページ）

      >>PAGE
      DATA DIVISION.
      WORKING-STORAGE SECTION.

(c)　LISTING指令およびPAGE指令の共通規則

このシステムでは，翻訳処理の最後にLISTING指令およびPAGE指令が処理されます。そのため，条件翻訳の無効行（条件翻訳の結果，コンパイル対象とならなかった行）にLISTING指令またはPAGE指令が現れた場合，これらの指令は無効となります。

LISTING指令およびPAGE指令が条件翻訳の無効行にある場合の例を次に示します。

（例）

      IDENTIFICATION DIVISION.
      PROGRAM-ID. SAMPLE1.
      ENVIRONMENT DIVISION.
      >>DEFINE ABC 123
      >>IF ABC  = 123
     *>  コメント
      >>ELSE
        >>PAGE          ←この>>PAGEは効果がない
        >>LISTING OFF   ←この>>LISTING OFFは効果がない
      >>END-IF
      DATA DIVISION.
      WORKING-STORAGE SECTION.
      PROCEDURE DIVISION.

付録C.2　リストの見方

リストのヘッダと各リストの見方について説明します。

＜この項の構成＞

(1)　リストのヘッダ

(2)　情報リスト

(3)　原始プログラムリスト

(4)　相対位置表示時の原始プログラムリスト（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(5)　エラーリスト

(1)　リストのヘッダ

リストの先頭に出力されるヘッダの出力形式を次に示します。

図C-1　ヘッダの出力形式

COBOL2002：COBOL2002であることの記述

（ｃ）：COBOL2002の稼働プラットフォームの識別記号
識別記号については「付録J.2　このマニュアルでの表記」を参照

VV-RR：COBOL2002のバージョン番号

CCC・・・CCC：リストの名称（「情報リスト」または，「原始プログラムリスト」）

YYYY-MM-DD：コンパイル日付（年-月-日）

HH:MM:SS：コンパイル時刻（時:分:秒）

(2)　情報リスト

情報リストの出力形式を次に示します。リスト1行当たりのカラム数は80カラムです。

図C-2　情報リストの出力形式

プログラム名

a.

IDENTIFICATION DIVISIONの行番号

b.

最外側の原始プログラムのPROGRAM-ID段落で指定した名称

c.

PROGRAM-ID段落で指定されたプログラム属性

出力内容は，INITIAL／RECURSIVEのどちらかとなります。

PROGRAM-ID段落でプログラム属性を指定していない場合は出力されません。

スタックコンパイル機能（連続コンパイル機能）を使用している場合，最外側のプログラム定義が複数ある場合があります。この場合，プログラム名は1行に一つずつ出力されます。

クラス名

a.

IDENTIFICATION DIVISIONの行番号

b.

CLASS-ID段落で指定した名称

c.

CLASS-ID段落で指定した属性

出力内容は，FINALだけとなります。

属性が指定されていない場合は，出力されません。

スタックコンパイル機能（連続コンパイル機能）を使用している場合，クラス定義が複数ある場合があります。この場合，クラス名は1行に一つずつ出力されます。

インタフェース名

a.

IDENTIFICATION DIVISIONの行番号

b.

INTERFACE-ID段落で指定した名称

スタックコンパイル機能（連続コンパイル機能）を使用している場合，インタフェース定義が複数ある場合があります。この場合，インタフェース名は1行に一つずつ出力されます。

関数名

a.

IDENTIFICATION DIVISIONの行番号

b.

FUNCTION-ID段落で指定した名称

スタックコンパイル機能（連続コンパイル機能）を使用している場合，関数定義が複数ある場合があります。この場合，関数名は1行に一つずつ出力されます。

入力ファイル名：コンパイラに入力したファイルの名称

エラー総数：発生したエラーの総数
ただし，メッセージ番号9000番台以降を除きます。また，Uレベル（回復不能）エラーの個数を含みます。
エラー総数が0以外の場合，Wレベル，Sレベルが必ず表示されます。
　　Wレベル：警告エラーの個数
　　Sレベル：重大エラーの個数
情報提示レベルのメッセージが発生した場合，Iレベルが表示されます。
　　Iレベル：情報提示レベルのメッセージ

オプション：コンパイル時に有効となったコンパイラオプション
オプションは，1行に一つずつ出力されます。ただし，80カラムを超えた場合は，次の行に出力されます。

入力ソース枚数：入力した原始プログラムのレコード枚数
主入力：主入力のレコード枚数
登録集：登録集のレコード枚数
記述項：データ名の個数
文：手続き部の文の個数
ただし，「文」には，ELSE，END動詞は含みません。また，EXEC SQL ～ END-EXECは1文として数えます。

登録集原文名
行番号：COPY文が記述されている原始プログラム中の行番号
登録集原文名：COPY文で取り込む登録集原文が格納されているファイルの名称

リポジトリファイル名
行番号：構成節中でクラス名／インタフェース名が指定された行番号
リポジトリファイル名：取り込んだリポジトリファイル名（絶対パス）

サブスキーマ情報
行番号：サブスキーマ名が記述されている原始プログラム中の行番号
サブスキーマ名：サブスキーマ名
スキーマ名：スキーマ名

ファイル情報
行番号：入出力処理で使用するファイルを定義している行番号
ファイル名：ファイル記述項で指定したファイル名

編成：ファイル編成

S：順編成ファイル

SX：XMAP3のプリンタ（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）だけを使用する順編成ファイル

Sx：実行時にXMAP3のプリンタ（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効），または順編成ファイルの使用を指定できるファイル

I：索引編成ファイル

R：相対編成ファイル

T：テキスト編成ファイル

SR：整列用ファイル

CV：CSV編成ファイル

RB：HiRDBによる索引編成ファイル

アクセス：ファイルのアクセス法

SEQ：順アクセス

RAN：乱アクセス

DYN：動的アクセス

OPEN種別：ファイルオープンの目的の種別

I：INPUT

O：OUTPUT

I-O：I-O

E：EXTEND

外部プログラム名
CALL文で呼び出す外部プログラムの名称
80カラムを超えた場合は，次の行に出力されます。
コンパイラ内部で生成したCALL文の外部プログラム名は出力されません。
また，スタックコンパイルの場合は，翻訳グループ内で解決済みの外部プログラム名は出力されません。

内部プログラム名

a.

内部プログラム（最外側のプログラム以外のプログラム）のIDENTIFICATION DIVISIONの行番号

b.

内部プログラムのPROGRAM-ID段落で指定したプログラム名

80カラムを超えた場合は，次の行に出力されます。

c.

内部プログラムのPROGRAM-ID段落で指定されたプログラム属性

PROGRAM-ID段落でプログラム属性が指定されていない場合は出力されません。

内部プログラムが複数ある場合，内部プログラム名は1行に一つずつ出力されます。
ここで表示される内容および形式は，1.のプログラム名と同じです。

ファクトリメソッド名

a.

ファクトリメソッドのIDENTIFICATION DIVISIONの行番号

b.

ファクトリメソッドのMETHOD-ID段落で指定したメソッド名

c.

METHOD-ID段落で指定した属性

出力内容は，FINAL／OVERRIDE／GET PROPERTY／SET PROPERTYとなります。ただし，SET PROPERTY／GET PROPERTYは，ほかの属性と同時に指定できません。

また，メソッド名だけの場合は，何も出力されません。

クラスを継承している場合，スーパクラスのファクトリメソッド名は出力されません。また，インタフェースを継承している場合，継承されているインタフェースのメソッド名は出力されません。

インスタンスメソッド名

a.

インスタンスメソッドのIDENTIFICATION DIVISIONの行番号

b.

インスタンスメソッドのMETHOD-ID段落で指定したメソッド名

c.

METHOD-ID段落で指定した属性

出力内容は，FINAL／OVERRIDE／GET PROPERTY／SET PROPERTYとなります。ただし，SET PROPERTY／GET PROPERTYは，ほかの属性と同時に指定できません。

また，メソッド名だけの場合は，何も出力されません。

クラスを継承している場合，スーパクラスのファクトリメソッド名およびインスタンスメソッド名は出力されません。また，インタフェースを継承している場合，継承されているインタフェースのメソッド名は出力されません。

インタフェース定義中のメソッド情報

a.

インタフェース定義中のメソッドのIDENTIFICATION DIVISIONの行番号

b.

インタフェース定義中のMETHOD-ID段落で指定したメソッド名

c.

METHOD-ID段落で指定された属性

出力内容は，GET PROPERTY／SET PROPERTYのどちらかとなります。

また，メソッド名だけの場合は，何も出力されません。

関数名
呼び出している利用者定義関数の名称

注意事項

該当する定義がソース中にない場合，情報リストにその部分は出力されません。

SQL情報（SQL構文内の実行文の数）は出力されません。

プログラム名などが長くなった場合には，次の行に折り返して出力されます。折り返した場合には，前行の開始位置と同じ位置から開始します。また，行番号は，折り返した行には出力されません。

全角文字が折り返しの境界にわたった場合，その全角文字は，次の行に出力されます。

(3)　原始プログラムリスト

原始プログラムリストの出力形式を次に示します。リスト1行当たりのカラム数は134カラムです。ただし，自由形式正書法のソースの場合，または-EucPositionオプション指定の場合はソースの1行の長さによって，307カラムまで拡張されます。

図C-3　原始プログラムリストの出力形式

行番号
COPY文で複写した原始プログラムの行番号が昇順に並ばない場合，この原始プログラムに対してコンパイラが生成した行番号が出力されます。EXEC SQL～END-EXECの間もコンパイラが生成した行番号が出力されます。また，入力した原始プログラムの行番号が昇順になっていない部分についても，新しい行番号を生成します。これらの行番号は，該当する行の左にゼロサプレス右寄せで出力されます。

D
翻訳指令（Compiler Directive）に関する情報

X

条件翻訳の結果，無効になる行に出力されます。

CP
COPY文で複写した原始プログラムの種別

Cn

COPY文で複写した原始プログラムが展開された行に出力されます。

「n」は1～9の整数で，COPY文の入れ子レベルを示します。入れ子レベルが10以上のときは「C*」が出力されます。

F

PREFIXING指定またはSUFFIXING指定のCOPY文の行に出力されます。

COPY文によって展開された行は，通常とCOPY文と同じようにCnを出力します。

DB

サブスキーマによって展開された原始プログラムの行に出力されます。

N
プログラムと文の入れ子レベル
プログラムの入れ子レベルは，IDENTIFICATION DIVISIONとEND PROGRAMの行に英字A～Zの順番で出力されます。Zを超えたときは「#」が出力されます。また，プログラムだけでなく，END METHOD，END FACTORY，END CLASS，END OBJECT，END FUNCTIONのように，IDENTIFICATION DIVISIONと対になるものには，すべて出力されます。
文の入れ子レベルは1～9の整数で出力されます。10以上のときは「*」が出力されます。1行中に複数の文があって入れ子のレベルが異なるときは，先頭の文の入れ子レベルが出力されます。

相互参照
定義／参照している行の参照情報コード
参照情報コードとその意味については，リストの上段で説明しています。
行番号が「，」で区切ってあるときは行中の1データ名が複数行で参照されていることを示し，「；」で区切ってあるときは行中に複数個のデータ名が記述してあることを示します。
次に相互参照情報の見方の例を示します。

(a)1002行（定義側）

YEARSというデータ名は，行番号1500中の2か所と行番号1600および行番号1800で参照されています。参照している行番号を','で区切って表示されます。

(b)1800行（参照側）

YEARSとMTH-PAMは，それぞれ行番号1002と1102で定義されています。これら二つは別名称なので，';'で区切って表示されます。

エラーメッセージ
エラーが発生したとき，その直後にエラーメッセージとエラーのカラムの位置が出力されます。カラムの位置は「？」で表示されます。

COBOL特殊レジスタ
使用したCOBOL特殊レジスタが原始プログラムの次に出力されます。特殊レジスタを使用しているファイル名とプログラム名も出力されます。

既定義オブジェクト
既定義オブジェクトのSELFまたはEXCEPTION-OBJECTの相互参照情報が出力されます。

注意事項

9000番台以降のメッセージは，原始プログラムリスト中に出力されません。

SQL文のエラー情報と相互参照情報は出力されません。

Uレベル（回復不能）エラー発生時は，リストが最後まで出力されない場合があります。

スタックコンパイル機能（連続コンパイル機能）を使用している場合，すべてのプログラムが連続して出力されます。

(4)　相対位置表示時の原始プログラムリスト（HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効）

(a)　原始プログラムリストの内容

-SrcList,xxxxx,DataLocオプション※1指定時，原始プログラムリストの原文の前に相対位置と長さを表示します。COBOLプログラムの実行で異常終了時に出力されるデータ領域ダンプリスト※2と，原始プログラムリストに表示される相対位置を付き合わせることで，プログラムの異常終了時のデータ項目内容を効率良く参照できます。

注※1

xxxxxは，OutputAll，CopyAll，CopySup，NoCopyのどれかを指定してください。

注※2

データ領域ダンプリストについては，「36.3　データ領域ダンプリスト」を参照してください。

データロケーションを表示した場合，リスト1行当たりのカラム数は161カラムです。ただし，自由形式正書法のソースの場合はソースの1行の長さによって，334カラムまで拡張されます。HP-UX(IPF)，AIX(32)，AIX(64)の場合，-EucPositionオプションが有効なときも，ソースの1行の長さによって，334カラムまで拡張されます。

相対位置表示時の原始プログラムリストの出力形式を次に示します。

図C-4　相対位置表示時の原始プログラムリストの出力形式

出力される原始プログラムリストの内容を次に示します。なお，次に示す内容以外のものは，「(3)　原始プログラムリスト」を参照してください。

相対位置
この行には，データ項目の相対位置（バイト）を16進数で表示します。相対位置は，データ部のファイル節／作業場所節／局所場所節に定義されたデータ項目に表示します。

長さ
この行には，データ項目の長さ（バイト数）を16進数で表示します。

O
OCCURS句を含むデータ名またはその従属項目を表します。

V
相対位置が可変となるデータ名を表します。

0～7
内部ブール項目の場合にビット位置を表示します。

注意事項

条件名，定数名，指標名およびアドレス名に対しては，相対位置および長さは表示しません。

コンパイル時にSレベルまたはUレベルのコンパイルエラーが発生した場合，-SrcList,xxxxx,DataLocオプションの指定があっても相対位置は表示しません。

(b)　データ領域ダンプリストの出力対象

相対位置をコンパイルリストに表示するにあたり，翻訳単位ごとのデータ領域ダンプリストの出力対象を次の表に示します。なお，コンパイルリストに表示する相対位置は，データ領域ダンプリストに表示されるデータ項目に対して表示します。

表C-1　翻訳単位ごとのデータ領域ダンプリスト出力対象

節
翻訳単位

プログラム定義
関数定義
インタフェース定義
クラス定義

メソッド定義
ファクトリ定義
オブジェクト定義
メソッド定義

ファイル節
FILE SECTION
○
○
－
○
○
－

作業場所節
WORKING-STORAGE SECTION
○
○
－
○
○
－

局所場所節
LOCAL-STORAGE SECTION
○
○
－
－
－
○

連絡節
LINKAGE SECTION
×
×
－
－
－
×

サブスキーマ節
SUBSCHEMA SECTION
×
×
－
－
－
－

通信節
COMMUNICATION SECTION
×
×
－
×
×
－

報告書節
REPORT SECTION
×
×
－
×
×
－

画面節
SCREEN SECTION※
×
×
－
×
×
－

画面節
WINDOW SECTION※
×
×
－
×
×
－

（凡例）

○：データ領域ダンプリストに表示される

×：データ領域ダンプリストに表示されない

－：節を指定できない

注※

HP-UX(IPF)で有効です。

(c)　データ種別ごとの相対位置表示の可否

データ種別ごとの各節での相対位置の表示の可否を次の表に示します。

表C-2　データ種別ごとの各節での相対位置の表示の可否

データ種別 | 指定された句やデータ名 | ファイル節※ | 作業場所節※ | 局所場所節
データ記述項 | データ名がFILLER | ○ | ○ | ○
ADDRESSED句のアドレス名 | － | × | ×
ADDRESSED句を含むデータ名 | － | ○ | ○
INDEXED句の指標名 | × | × | ×
EXTERNAL句 | ○ | ○ | －
GLOBAL句 | ○ | ○ | ○
JUSTIFIED句 | ○ | ○ | ○
OCCURS句 | ○ | ○ | ○
OCCURS句を含むデータ名の従属項目 | ○ | ○ | ○
可変反復データ項目に続くデータ項目 | ○ | ○ | ○
PROPERTY句 | ○ | ○ | ○
REDEFINES句 | ○ | ○ | ○
RENAMES句 | ○ | ○ | ○
SAME AS句を含むデータ名 | ○ | ○ | ○
SAME AS句を含むデータ名の従属項目 | △ | △ | △
SYNCHRONIZED句 | ○ | ○ | ○
TYPE句を含むデータ名 | ○ | ○ | ○
TYPE句を含むデータ名の従属項目 | △ | △ | △
TYPEDEF句 | ○ | ○ | ○
アドレスデータ項目 | USAGE ADDRESS | ○ | ○ | ○
指標データ項目 | USAGE INDEX | ○ | ○ | ○
オブジェクト参照データ項目 | USAGE OBJECT REFERENCE | － | ○ | ○
ポインタ項目 | USAGE POINTER | ○ | ○ | ○
外部ブール項目 | USAGE DISPLAY | ○ | ○ | ○
内部ブール項目 | USAGE BIT | ○ | ○ | ○
2進項目など | その他のUSAGE句 | ○ | ○ | ○
独立データ項目 | 77レベルのデータ名 | － | ○ | ○
定数名 | 78レベルのデータ名 | × | × | ×
条件名 | 88レベルのデータ名 | × | × | ×

（凡例）

○：相対位置を表示できる

△：従属項目はコンパイルリストに表示されないため，従属項目の相対位置を参照したい場合は，「(d)　データ項目ごとの相対位置の見方」の「TYPE句／SAME AS句を含むデータ名の従属項目」を参照のこと

×：相対位置を表示できない

－：節に指定できない

注※

クラス定義の場合は，データ部先頭からの相対位置となります。

(d)　データ項目ごとの相対位置の見方

●OCCURS句を含むデータ名の従属項目

OCCURS句を含むデータ名の従属項目については，基本データ項目と同様に節の先頭からの相対位置を16進数で表示します。また，OCCURS句を含むデータ名およびその従属項目であることを示す「O」を相対位置の左側に表示します。

OCCURS句を含むデータ名が集団項目の場合の相対位置の表示を次に示します。

なお，要素の相対位置については，次の計算式で求めてください。

計算式

表中のデータ名の相対位置=参照するデータ名の相対位置の値※＋（参照する表要素のその次元での出現番号－1）×表の1要素の長さ

注※

　　相対位置に「O」の表示があるデータ名

図C-5　OCCURS句を含むデータ名の従属項目の相対位置の表示

O
OCCURS句を含むデータ名またはその従属項目を表します。

例：「データ名：DATA312」の3番目の要素の場合

表中のデータ名の相対位置=（0x0000001d）＋（3－1）×（0x0000000f）

=（0x0000003b）

=59バイト

上記の図に対応したデータ領域ダンプリストの内容を次に示します。

データ領域ダンプリストの<WORKING-STORAGE SECTION>の先頭から（0x0000003b）（59バイト）目の内容を5バイト参照することで，「データ名：DATA312」の3番目の内容を確認できます。

OCCURS句を含むデータ名が基本項目の場合の相対位置の表示を次に示します。

図C-6　OCCURS句を含むデータ名が基本項目の場合の相対位置の表示

例：「データ名：DATA31」の3番目の要素の場合

表中のデータ名の相対位置=（0x00000018）＋（3－1）×（0x00000005）

=（0x00000022）

=34バイト

上記の図に対応したデータ領域ダンプリストの内容を次に示します。

データ領域ダンプリストの<WORKING-STORAGE SECTION>の先頭から（0x00000022）（34バイト）目の内容を5バイト参照することで，「データ名：DATA31」の3番目の要素の内容を確認できます。

●可変反復データ項目に続くデータ項目

可変反復データ項目に続くデータ項目は，繰り返し回数によって長さが可変となります。そのため，可変反復データ項目に続くデータ項目の相対位置も可変となります。この可変反復データ項目に続くデータ項目の相対位置は，定義された節の先頭からの相対位置ではなく，最初に現れたデータ項目を0とした相対位置を16進数で表示します。また，相対位置が可変となるデータ名であることを示す「V」を，相対位置の左側に表示します。

相対位置が可変となるデータ名が基本項目の場合の相対位置の表示を次に示します。

図C-7　相対位置が可変となるデータ名が基本項目の場合の相対位置の表示

V
相対位置が可変となるデータ名には「V」を表示します。

制御変数
DEP1に5を設定しているので，繰り返し回数は5回で計算します。

要素の相対位置については，次の計算式で求めてください。

計算式

相対位置が可変となるデータ名※1の相対位置=DEPENDING ON指定があるOCCURS句を含むデータ名※2の相対位置の値＋プログラムが異常終了した時点の表の繰り返し回数の値※3×表の1要素の長さ※4＋参照するデータ名の相対位置の値

注※1

　　相対位置に「V」の表示があるデータ名

注※2

　　相対位置に「O」の表示があるデータ名

注※3

　　OCCURS～DEPENDING ONに指定されたデータ名に設定した値

注※4

　　相対位置に「O」の表示があるデータ名の長さ

例：「データ名：DATA33」の場合

可変反復データ項目に続くデータ名の相対位置=（0x00000010）＋5×（0x0000000f）＋（0x0000000a）

=（0x00000065）

=101バイト

上記の図に対応したデータ領域ダンプリストの内容を次に示します。

データ領域ダンプリストの<WORKING-STORAGE SECTION>の先頭から（0x00000065）（101バイト）目の内容を10バイト参照することで，「データ名：DATA33」の内容を確認できます。

相対位置が可変となるデータ名がOCCURS句を含んでいる場合の相対位置の表示を次に示します。

図C-8　相対位置が可変となるデータ名がOCCURS句を含んでいる場合の相対位置の表示

O，V
相対位置が可変となるデータ名がOCCURS句を含んでいる場合は，「O」と「V」を表示します。

制御変数
DEP1に5を設定しているので，繰り返し回数は5回で計算します。

要素の相対位置については，次の計算式で求めてください。

計算式

相対位置が可変となるデータ名※1の相対位置=DEPENDING ON指定があるOCCURS句を含むデータ名※2の相対位置の値＋プログラムが異常終了した時点の表の繰り返し回数の値※3×表の1要素の長さ※4＋参照するデータ名の相対位置の値＋（参照する表要素のその次元での出現番号－1）×表の1要素の長さ※5

注※1

　　相対位置に「O」と「V」の表示があるデータ名

注※2

　　相対位置に「O」の表示があるDEPENDING ON指定があるOCCURS句を含むデータ名

注※3

　　OCCURS～DEPENDING ONに指定されたデータ名に設定した値

注※4

　　相対位置に「O」の表示があるDEPENDING ON指定があるOCCURS句を含むデータ名の長さ

注※5

　　相対位置に「O」と「V」の表示があるOCCURS句を含むデータ名の長さ

例：「データ名：DATA332」の場合

相対位置が可変となるデータ名の相対位置=（0x00000010）＋5×（0x0000000f）＋（0x0000000f）＋（3－1）×（0x0000000a）

=（0x0000007e）

=126バイト

上記の図に対応したデータ領域ダンプリストの内容を次に示します。

データ領域ダンプリストの<WORKING-STORAGE SECTION>の先頭から（0x0000007e）（126バイト）目の内容を5バイト参照することで，「データ名：DATA332」の内容を確認できます。

●内部ブール項目

内部ブール項目については，相対位置としてビット位置も表示します。そのため，（）内に16進数でバイト位置を，［］内にビット位置を10進数でそれぞれ表示します。また，長さはビット数を16進数で表示します。

内部ブール項目の相対位置の表示を次に示します。

図C-9　内部ブール項目の相対位置の表示

0～7
［］内にビット位置を10進数で表示します。

長さ
ビット数を16進数で表示します。

上記の図に対応したデータ領域ダンプリストの内容を次に示します。

データ領域ダンプリストの<WORKING-STORAGE SECTION>の先頭から（0x00000010）（16バイト）目の内容を1バイト参照することで，「データ名：DATA3」または「データ名：DATA31」のビット値を確認できます。

●EXTERNAL句を含むレコード記述項

EXTERNAL句を含むレコード記述項は，レコードの先頭の相対位置を0として表示します。

EXTERNAL句を含むレコード記述項の相対位置の表示を次に示します。

図C-10　EXTERNAL句を含むレコード記述項の相対位置の表示

相対位置
レコード先頭の相対位置を0として表示します。

上記の図に対応したデータ領域ダンプリストの内容を次に示します。

EXTERNAL句を含むレコード記述項は，レコードの先頭から内容を参照できます。

●クラス定義のファイル節／作業場所節

クラス定義のファクトリ／オブジェクト定義中のファイル節／作業場所節の各データ項目の相対位置は，各節の先頭からの値ではなく，データ部先頭からの値になります。

クラス定義のファイル節／作業場所節の相対位置の表示を次に示します。

図C-11　クラス定義のファイル節／作業場所節の相対位置の表示

相対位置
データ部先頭からの値になります。

上記の図に対応したデータ領域ダンプリストの内容を次に示します。

クラス定義の場合は，コンパイルリストでデータ部の先頭からの相対位置を表示しているため，データ領域ダンプリストも領域の先頭からの相対位置で参照できます。

●TYPE句／SAME AS句を含むデータ名の従属項目

TYPE句またはSAME AS句を含むデータ名の従属項目は，コンパイルリストに表示されません。そのため，従属項目の相対位置を参照したい場合は，ユーザ自身でTYPE句またはSAME AS句を含むデータ名の従属項目の相対位置を求めてください。

TYPE句／SAME AS句の定義がある原始プログラムリストを次に示します。

図C-12　TYPE句／SAME AS句の定義がある原始プログラムリスト

従属項目
TYPEDEF句を含むデータ名の従属項目を示します。

TYPE句を含むデータ名の従属項目
暗黙的にTYPEDEF句を含むデータ名の従属項目が展開されます。ただし，SAME AS句もTYPE句と同様にコンパイルリストには表示されません。

TYPE句を含む「データ名：BDAT2」の従属項目は，TYPEDEF句を含むデータ名の従属項目である三つのデータ名（"ADAT1"/"ADAT2"/"ADAT3"）になります。TYPEDEF句で定義したときの相対位置は，TYPEDEF句を含むデータ名の相対位置を0として表示します。そのため，TYPE句を含むデータ名の従属項目となるデータ名の相対位置は，次の計算式で求めてください。

計算式

参照するTYPE句を含むデータ名の従属項目であるデータ名の相対位置=TYPE句を含むデータ名の相対位置＋参照するTYPEDEF句を含むデータ名の従属項目の相対位置

例：「データ名：ADAT3」の場合

「データ名：ADAT3」の相対位置=（0x0000005）＋（0x0000000a）

=（0x0000000f）

=15バイト

上記の図に対応したデータ領域ダンプリストの内容を次に示します。

データ領域ダンプリストの<WORKING-STORAGE SECTION>の先頭から（0x0000000f）（15バイト）目の内容を5バイト参照することで，「データ名：ADAT3」の内容を確認できます。

(5)　エラーリスト

エラーリストの出力形式を次に示します。リスト1行当たりのカラム数は80カラムです。

図C-13　エラーリストの出力形式

エラーがある原始プログラムのファイル名
COPY文で入力したプログラムにエラーがあるときは，そのファイル名が出力されます。

エラーがある原始プログラム内の行番号（原始プログラムの先頭行からの相対行数）

メッセージ番号

エラーレベルの種類
I：情報提示レベルのメッセージ
W：警告エラー
S：重大エラー
U：回復不能エラー

エラーメッセージの本文

付録D　COBOLで使用するファイル

＜この節の構成＞

付録D.1　COBOL2002で使用するファイル

付録D.2　COBOLプログラムの実行時に必要なファイル

付録D.1　COBOL2002で使用するファイル

COBOL2002で使用するファイルの一覧を，次に示します。

表D-1　COBOL2002で使用するファイル

拡張子
ファイル種別
内容
出力元
入力先

.a
ライブラリファイル
ライブラリを格納するファイル。
リンカ
－

.cblほか※¹
COBOLソースファイル
COBOL原始プログラムを格納するファイル。
－
コンパイラ

.cbl※4
XMLアクセス用データ定義
XMLドキュメントへのアクセスに必要なCOBOLのデータ定義を格納するファイル。
XMLアクセス用COBOLソース生成コマンド
コンパイラ

.cbl※4
XMLアクセス用ステータス定義
XMLアクセスルーチンのステータス名称を定義する登録集原文。
－
コンパイラ

.cbl※4
XMLアクセスルーチン
XMLドキュメントにアクセスするCOBOL副プログラムを格納するファイル。
XMLアクセス用COBOLソース生成コマンド
コンパイラ

.cbl※2※3
COBOL UAP引数定義ファイル
Cosminexus連携機能から呼び出したいCOBOL UAP引数を定義したファイル。
－
Cosminexus連携機能

.cbp
プログラム情報ファイル
テストデバッグ情報やカバレージ情報を格納するファイル。-TDInfまたは-CVInfオプションを指定してコンパイルしたときに出力される。
コンパイラ
コンパイラ，テストデバッガ

.cbs
擬似プログラム用プログラム情報ファイル
-SimMain，-SimSub，-SimIdentのどれかのオプションを指定してコンパイルしたときに出力されるプログラム情報ファイル。
コンパイラ
テストデバッガ

.class※3
Cosminexus上Java実行ファイル
Cosminexus連携機能を呼び出すJava実行ファイル。
－
Cosminexus連携機能

.cll
カバレージ情報リストファイル
カバレージ情報をリスト形式にして格納するファイル。
カバレージ
－

.cnl
カウント情報リストファイル
カウント情報をリスト形式にして格納するファイル。
カバレージ
－

.cno
実行結果出力ファイル（カウント情報の表示）
プログラムからの連動実行によるカウント情報を表示するとき，実行結果とトラブルシュート情報を出力するファイル。
カバレージ
－

.cvo
実行結果出力ファイル（カバレージ情報の蓄積）
プログラムからの連動実行によるカバレージ情報を蓄積するとき，実行結果とトラブルシュート情報を出力するファイル。
カバレージ
－

.cxc※4
カタログファイル
公開識別子とファイルの対応づけを定義するファイル。
－
XMLアクセス用COBOLソース生成コマンド
XMLアクセス用実行時ライブラリ

.cxd※4
XMLデータ定義ファイル
XMLドキュメントの要素とCOBOLのデータ構造とのマッピングを記述したファイル。
－
XMLアクセス用COBOLソース生成コマンド

.DAT
データレコードファイル
索引順編成ファイルで，実際にレコードを格納しているファイル。
ISAM
ISAM

.DEF
キー定義ファイル
索引順編成ファイルで，データファイルとキーファイルとの対応を表すデータを格納するファイル。
ISAM
ISAM

.dtd※4または.xml※4
XML文書型定義ファイル
XMLドキュメントのマークづけ要素とその構造を定義したファイル。
－
XMLアクセス用COBOLソース生成コマンド

.env
CGI環境ファイル
CGI用環境変数を格納するファイル。
ライブラリ
ライブラリ

拡張子規定なし
実行可能ファイル
コンパイル，リンクをして実行可能になったプログラムを格納するファイル。
リンカ
－

.htm
または
.html
HTMLファイル
Webページに出力する内容を格納するファイル。
－
HTML
トランスレータ

.java※3
COBOLアクセス用Bean（Javaソースファイル）
Cosminexus連携機能が出力するCOBOLアクセス用Beanを格納するファイル。
Cosminexus連携機能
－

.java※3
EJB関連Javaソースファイル
Cosminexus連携機能が出力するEJB用ホームインタフェース，リモートインタフェース，Enterprise Beanを格納するファイル。
Cosminexus連携機能
－

.K01
主キーファイル
索引順編成ファイルで，主レコードキーでレコードを検索するためのファイル。
ISAM
ISAM

.K02～.K99
副キーファイル
索引順編成ファイルで，副レコードキーでレコードを検索するためのファイル。
ISAM
ISAM

.lst
コンパイルリストファイル
コンパイルリストを格納するファイル。-SrcListオプションを指定してコンパイルしたときに出力される。
コンパイラ
－

.o
オブジェクトファイル
コンパイルの結果であるオブジェクトプログラムを格納するファイル。
コンパイラ
リンカ

.rep
リポジトリファイル
プログラム定義，関数定義，クラス定数，およびインタフェース定義の中で規定された情報を格納するファイル。
コンパイラ
コンパイラ

.sl
.so
共用ライブラリファイル
共用ライブラリファイル。
リンカ
－

.tdi
TDコマンド格納ファイル（中断点情報）
中断点情報のTDコマンドを格納するファイル。-TestCmd,Fullまたは-TestCmd,Breakオプションを指定してコンパイルしたときに出力される。
コンパイラ
テストデバッガ

.tdo※5
実行結果出力ファイル（テストデバッグ）
プログラムからの連動実行によるテストデバッグを実行するとき，実行結果とトラブルシュート情報を出力するファイル。
テストデバッガ
－

.tds
TDコマンド格納ファイル（シミュレーション情報）
使用するシミュレーション情報のTDコマンドを格納するファイル。-TestCmd,Simオプションを指定してコンパイルしたときに出力される。
コンパイラ
テストデバッガ

.trc
トレース情報ファイル
CGIプログラムの作成を支援するサービスルーチンの，トレース情報を格納するファイル。
ライブラリ
－

.xml※3
デプロイ情報（DDファイル）
Cosminexus連携機能が出力するEJB用デプロイ情報を格納するファイル。
Cosminexus連携機能
－

（凡例）

－：該当しない

注

出力元，入力先欄の略称の意味は次のとおりです。

ライブラリ：実行時ライブラリ

ISAM：ISAMユティリティ

注※1

目的に応じて次の拡張子を使用します。

固定形式正書法で書かれた原始プログラムをコンパイルする場合
.cbl，.CBL，.cob，.ocb，または環境変数CBLFIXで指定した拡張子

自由形式正書法で書かれた原始プログラムをコンパイルする場合
.cbf，.ocf，または環境変数CBLFREEで指定した拡張子

注※2

目的に応じて次の拡張子を使用します。

固定形式正書法で書かれたCOBOL引数定義ファイルの場合
.cbf，または環境変数CBLFIXで指定した拡張子を除く，すべての拡張子

自由形式正書法で書かれたCOBOL引数定義ファイルの場合
.cbf，または環境変数CBLFREEで指定した拡張子

注※3

Cosminexus連携機能で使用します。Cosminexus連携機能の詳細は，マニュアル「COBOL2002　Cosminexus連携機能ガイド」を参照してください。

注※4

XML連携機能で使用します。XML連携機能の詳細は，マニュアル「COBOL2002　XML連携機能ガイド」を参照してください。

注※5

AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効です。

付録D.2　COBOLプログラムの実行時に必要なファイル

COBOLプログラムの実行時に必要なファイルの一覧を，次に示します。

表D-2　COBOLプログラムの実行時に使用するファイル

拡張子 | ファイル種別 | ファイルが必要な条件
.sl，.so | 共用ライブラリ | 呼ばれるプログラムを共用ライブラリとして作成している場合
規定なし | 実行可能ファイル | 必須
.DRF | データレコードファイル | ISAMによる索引編成ファイルを使用する場合
.KDF | キー定義ファイル
.K01 | 主キーファイル
.K02～.K99 | 副キーファイル

付録E　コンパイラの制限値

コンパイラの制限値，限界値を次に示します。

表E-1　コンパイラの制限値，限界値

区分
項目
制限値，限界値

全般規定
語の長さ
31文字

英数字定数，日本語文字定数の長さ
1～160文字※14

固定小数点数字定数のけた数
1～18けた※9

浮動小数点数字定数のけた数
仮数部1～16けた
指数部2けた

単精度浮動小数点数字定数の値の範囲（絶対値）
約10-37.9以上約1038.5以下，または0

倍精度浮動小数点数字定数の値の範囲（絶対値）
約10⁻³⁰⁸以上約10³⁰⁸以下，または0

連結式で連結できる定数の長さ
2～1,024文字

基本機能
作業場所節のデータ項目の長さ
16,777,215バイト（クラス定義）
1,073,741,823バイト（上記以外）

局所場所節のデータ項目の長さ
1,073,741,823バイト

ファイル節のデータ項目の長さ
16,777,191バイト※1（クラス定義のファイル節FD記述項）
1,073,741,799バイト※1（上記以外のファイル節FD記述項）
65,535バイト（ファイル節SD記述項）

連絡節のデータ項目の長さ
16,777,215バイト（BY VALUE,RETURNING項目）
1,073,741,823バイト（上記以外）

上記以外の節のデータ項目の長さ
16,777,215バイト

1レコードに含まれる可変長項目の制御変数
100個

PICTURE文字列の長さ
30文字※13

作業場所節の英字項目のけた数
16,777,215けた（クラス定義）
1,073,741,823けた（上記以外）

局所場所節の英字項目のけた数
1,073,741,823けた

ファイル節の英字項目のけた数
16,777,191バイト※1（クラス定義のファイル節FD記述項）
1,073,741,799バイト※1（上記以外のファイル節FD記述項）
65,535バイト（ファイル節SD記述項）

連絡節の英字項目のけた数
16,777,215けた（BY VALUE,RETURNING項目）
1,073,741,823けた（上記以外）

上記以外の英字項目のけた数
16,777,215けた

外部10進，内部10進項目のけた数
18けた※10

2進項目のけた数
18けた

外部浮動小数点数字項目のけた数
仮数部1～16けた
指数部2けた

作業場所節の英数字，英数字編集項目のけた数
16,777,215けた（クラス定義）
1,073,741,823けた（上記以外）

局所場所節の英数字，英数字編集項目のけた数
1,073,741,823けた

ファイル節の英数字，英数字編集項目のけた数
16,777,191バイト※1（クラス定義のファイル節FD記述項）
1,073,741,799バイト※1（上記以外のファイル節FD記述項）
65,535バイト（ファイル節SD記述項）

連絡節の英数字，英数字編集項目のけた数
16,777,215けた（BY VALUE,RETURNING項目）
1,073,741,823けた（上記以外）

上記以外の英数字，英数字編集項目のけた数
16,777,215けた

数字編集項目のけた数
249けた
（数字は18けた以内※12）

ブール項目のけた数
2,034けた

日本語項目のけた数
16,383けた

動的長基本項目のLIMITに指定できる値
英数字項目の場合

16,777,214けた

日本語項目の場合

16,382けた

外部浮動小数点数字項目の値の範囲（絶対値）
約10-37.9以上約1038.5以下，または0

条件文の入れ子
1,000重

うちPERFORM文の入れ子
100重

PERFORM文のVARYING指定で変化させられる一意名の数
7個（AFTER指定の数は6個以内）

EVALUATE文の入れ子
50重

GO TO DEPENDING文の一意名のけた数
9けた

STOP文の定数の長さ
160文字※14

ACCEPT文で一度に転送できるデータのサイズ
114バイト（FROM CONSOLE指定時）

COPY文の入れ子
20重

原文名の長さ
31文字※2

仮原文の原文語
1～322文字

演算結果を保証する算術式の中間結果のけた数
30けた※11

算術式に含まれる算術演算子
100個

作業場所節※3の節の合計サイズ
16,777,215バイト（クラス定義）
1,073,741,823バイト（上記以外）

局所場所節の節の合計サイズ
1,073,741,823バイト

ファイル節※3※4の節の合計サイズ
16,777,215バイト（クラス定義）
1,073,741,823バイト（上記以外）

その他の節（連絡節を除く）の合計サイズ
16,777,215バイト

算術式中に含まれる算術演算子
100個

表操作機能
作業場所節のOCCURS句の整数2の値，添字の値，部分参照の値
16,777,215（クラス定義）
1,073,741,823（上記以外）

局所場所節のOCCURS句の整数2の値，添字の値，部分参照の値
1,073,741,823

ファイル節のOCCURS句の整数2の値，添字の値，部分参照の値
16,777,191（クラス定義のファイル節FD記述項）
1,073,741,799（上記以外のファイル節FD記述項）
65,535（ファイル節SD記述項）

連絡節のOCCURS句の整数2の値，添字の値，部分参照の値
16,777,215（BY VALUE,RETURNING項目）※5
1,073,741,823（上記以外）

上記外の節のOCCURS句の整数2の値，添字の値，部分参照の値
16,777,215

OCCURS句に指定できる指標名の数
12個

OCCURS句に定義した指標名に設定できる最大値
10けた（クラス定義以外の作業場所節，クラス定義以外のファイル節FD記述項，局所場所節，BY VALUE／RETURNING項目以外の連絡節）
9けた（BY VALUE／RETURNING項目の連絡節および上記以外の節）

OCCURS句の次元数
7次元

OCCURS KEYの個数
12個

SEARCH文の入れ子
15重

入出力機能
RECORD CONTAINS CHARACTERS句で指定できる値
16,777,191※1
（クラス定義のファイル節FD記述項）
1,073,741,799※1
（上記以外のファイル節FD記述項）
65,535
（ファイル節SD記述項）

BLOCK CONTAINS句で指定できる値
16,777,191※1
（クラス定義のファイル節FD記述項）
1,073,741,799※1
（上記以外のファイル節FD記述項）

WRITE ADVANCINGで指定できる整数
0～99

RECORD KEY句で指定できるキーの最大長
255バイト

ALTERNATE RECORD KEY句で指定できるキーの最大長
255バイト

ALTERNATE RECORD KEY句で指定できるキーの個数
98個

LINAGE句で指定できる整数
1～32,767

LINAGE FOOTINGで指定できる整数
0～32,767

LINAGE TOPで指定できる整数
0～32,767

LINAGE BOTTOMで指定できる整数
0～32,767

RECORD IS VARYING句のFROMに指定できる整数
1～16,777,191※1
（クラス定義のファイル節FD記述項）
1～1,073,741,799※1
（上記以外のファイル節FD記述項）
1～65,535
（ファイル節SD記述項）

RECORD IS VARYING句のTOに指定できる整数
1～16,777,191※1
（クラス定義のファイル節FD記述項）
1～1,073,741,799※1
（上記以外のファイル節FD記述項）
1～65,535
（ファイル節SD記述項）

ファイルのブロック長に指定できる値
1～16,777,191※1
（クラス定義）
1～1,073,741,799
（上記以外）

CSV編成ファイルのREAD／WRITE文で扱える基本項目の最大数
UNIX32の場合

2,729個（-NumCsvオプション指定ありの場合）

5,459個（-NumCsvオプション指定なしの場合）

UNIX64の場合

2,047個（-NumCsvオプション指定ありの場合）

4,094個（-NumCsvオプション指定なしの場合）

ASSIGN句のデータ名1に指定できるデータ項目の最大長
32,767バイト

プログラム間連絡機能
プログラム名，利用者定義関数名，クラス名，インタフェース名，メソッド名の長さ
31文字（定数指定でない場合）

プログラム名，メソッド名を定数指定する場合の長さ
160バイト※15

-Main,V3オプションで引数を受け取るときに指定できる最大長
100バイト

FD EXTERNAL句の数（プログラム単位，実行時単位）
255個

01 EXTERNAL句の数（外部属性）
実行単位内で32,767個
プログラム単位で32,767個※6

入れ子のプログラムの個数
65,535個

入れ子のプログラムのネストの深さ
255レベル

ENTRY文の個数
32,767個

CALL文，INVOKE文のBY VALUE，BY CONTENT，RETURNINGに指定されたデータ項目のサイズ
16,777,215バイト

利用者定義関数の引数として指定されたデータ項目のサイズ（ただし，対応する仮引数にBY VALUEが指定または仮定される場合，および返却値だけ）
16,777,215バイト

整列併合機能
SORT文，MERGE文の入力ファイル数
12個

整列併合用キーの指定個数
64個

整列併合用キーのサイズの合計
4,080バイト

整列併合用レコードのサイズ
65,535バイト

オブジェクト指向機能
クラス定義中に記述可能なメソッドの数
65,530※7

その他
コンパイル可能なソース行数
999,999行

手続き名の個数
1,048,575個

ファイルの数
255個

自由形式正書法での1行のバイト数
255バイト

COPY文PREFIXING指定およびSUFFIXING指定に指定できる語の長さ
30文字

一つの実行単位が使用できるスタックサイズの上限
システムのスタックサイズの設定値に依存

COBOL2002で扱えるファイル名の長さの上限
パス名を含めて255バイト※8

注

ソース行数以外の制限値は独立していないため，すべての制限値が同時に適用されるとは限りません。

注※1

索引ファイルは，割り当てるファイルによって次のようになります。

ISAMを使用する場合：65,503バイト

HiRDBによる索引編成ファイルを使用する場合：1,073,741,799バイト
ただし，CREATE TABLE定義の指定に依存する。

注※2

-V3Recまたは-CompatiV3オプション（VOS3 COBOL85互換のオプション）を指定した場合，先頭の8文字だけが有効となります。

注※3

-MultiThreadオプション指定時，ファイル節，作業場所節の合計の上限は，16,777,215バイトとなります。

注※4

ファイル節の合計サイズは，次のように計算します。

Σ（各記述項のレコード長＋24+α）

α：レコード間の境界調整で生じる遊びバイト

レコード間は8バイト境界調整される。

注※5

添字の値，および部分参照の値の場合，上限は1,073,741,823となります。

注※6

ただし，プログラム単位では，アドレスデータ項目の個数や連絡節の01レベルデータ項目の個数によって，上記の最大数まで指定できないことがあります。

注※7

クラス定義に含まれるファクトリ定義，オブジェクト定義のデータ記述項にPROPERTY句が指定されている場合は次のようになります。

クラス定義中に記述可能なメソッドの数

= 65,530 - （SET,GET指定がないPROPERTY句の数）×2 - （SET,GET指定があるPROPERTY句の数）

注※8

パス名を含めないファイル名の長さの上限も255バイトです。

使用できるファイル名の長さが機能により個別に規定されている場合は，その長さが上限となります。

また，指定されたファイル名は内部的に絶対パス名に変換することがありますが，このとき内部的に処理できる絶対パス名の長さの上限は，1,023バイトです。

注※9

-MaxDigits38オプションを指定した場合，けた数は1～38けたとなります。

注※10

-MaxDigits38オプションを指定した場合，けた数の上限は38けたとなります。

注※11

-IntResult,DecFloat40オプションを指定した場合，けた数は40けたとなります。

注※12

AIX(64)，Linux(x64)の場合，-MaxDigits38オプションの指定がある場合，数字は38けた以内となります。

注※13

AIX(64)，Linux(x64)の場合，-MaxDigits38オプションを指定したとき，PICTURE文字列の長さは60文字となります。

注※14

AIX(32)，AIX(64)，Linux(x86)，Linux(x64)の場合，-LiteralExtend,Alnumオプションを指定したとき，英数字定数の長さは1～8,191文字（バイト）となります。

注※15

AIX(32)，AIX(64)，Linux(x86)，Linux(x64)の場合，-LiteralExtend,Alnumオプションを指定した場合，プログラム名およびメソッド名を定数指定するときの長さは，1～1,024文字（バイト）となります。

付録F　入出力状態の値

入出力状態の値が表す内容を，次に示します。

表F-1　入出力状態の値

条件
入出力状態の値
順編成ファイル，相対編成ファイル，
索引編成ファイルの場合
HiRDBによる索引編成ファイルの場合
COBOL入出力サービスルーチンの場合

成功
00
入出力文の実行が成功した。その入出力動作に関しては，これ以上情報がない。
○
○

02
入出力文の実行は成功したが，重複キーが検出された。

READ文で読み込んだレコードキーの参照キーの値が，その索引での次のレコードの参照キーと等しい。

REWRITE文，またはWRITE文によって指定されたレコードの副レコードキーの値が，すでにファイルにある。ただし，この副レコードキーは重複した値が許されているので，誤りではない。

×
×

04
READ文の実行は成功した。しかし，処理したレコードの長さが，そのファイルのファイル固有属性に従っていない（テキスト編成ファイルだけ）。
または，CSV編成ファイルから入力した一つのセルの文字列長が，入力領域より長い。
－
×

05
OPEN文の実行は成功した。しかし，OPEN文を実行したとき，参照した不定ファイルはない。OPEN文のモードが入出力両用，または拡張ならば，ファイルは生成される。
○
（入力モードの場合だけ）
×

07
入出力文の実行は成功した。ただし，REEL／UNIT指定のCLOSE文で参照したファイルが非リール／ユニットの媒体上にある（順編成ファイルだけ）。
－
×

ファイル終了
10
順アクセスのREAD文を実行しようとしたが，次のレコードがない。次の場合のどちらかである。

ファイルの終わりに達した。

存在しない不定入力ファイルに対して，順アクセスのREAD文を初めて実行しようとした。

○
○
（1.の場合だけ）

14
相対編成ファイルに対して順アクセスのREAD文を実行しようとしたが，相対レコード番号の有効けた数がそのファイルの相対キーデータ項目のサイズよりも大きい（相対編成ファイルだけ）。
－
○
（相対編成ファイルの場合だけ）

無効キー
21
順アクセスで，順序誤りがあった。成功したREAD文と次のREWRITE文の間で主レコードキーの値が変更されたか，またはWRITE文の実行時に主レコードキーの値が昇順になっていない。
○
×

22
重複キーがあった。

すでにレコードがある位置に，重ねてWRITE文でレコードを書き出そうとした。

WRITE文，またはREWRITE文で索引編成ファイルに書き出そうとしたレコードの主レコードキー，または副レコードキーの値が，すでにファイル中にある。ただし，この副レコードキーには，DUPLICATESが指定されていない。

○
（2.の場合だけ）
○
（相対編成ファイルで1.の場合だけ）

23
次の場合のどちらかである。

物理ファイル中に存在しないレコードをランダムに呼び出そうとした。

存在しない不定入力ファイルに対してSTART文，または乱アクセスのREAD文を，実行しようとした。

○
○
（相対編成ファイルの場合だけ）

24
次の場合のどれかである。

COBOLの外部で定義されたファイルの区域外に書き出そうとした。区域の定め方は，作成者が決める。

順アクセスのWRITE文を実行しようとしたが，そのレコードの相対レコード番号の有効けた数がそのファイルの相対キーデータ項目より大きい。

乱アクセスのWRITE文を実行しようとしたが，その相対レコード番号が0以下である。

○
（1.の場合だけ）
○
（相対編成ファイルの場合だけ）

永続誤り
30
永続誤りがある。次のどれかである。

相対可変長ファイルのレコード領域が破壊されている。

相対編成ファイルのスロットが破壊されている。有効，無効レコードの識別ができない。

特定のファイルを指定し，OPEN文が成功したが，そのあと入出力矛盾が発生した（ファイル破壊を検出した場合など）。

相対編成ファイルで，最大レコード長および最小レコード長の範囲を超えている。

ファイル位置指示子が不定となっている。例えば，COMMIT文，ROLLBACK文の実行によってファイル位置指示子が有効なレコードを指していない。
○
（相対編成ファイルで，1.，2.の場合だけ）

34
区域外書き出しによる永続誤りがある。
COBOLの外部で定義されたファイルの区域外にレコードを書き出そうとした（順編成ファイルだけ）。
－
○

35
不定ファイルでないファイルがないとき，INPUT指定，I-O指定，またはEXTEND指定を持つOPEN文を実行しようとしたことによる永続誤りがある。
○
○

37
OPEN文を実行しようとしたが，指定されたファイルが，そのOPEN文で指定されたモードを使えない。
次の場合のどれかである。

EXTEND指定，またはOUTPUT指定が指定されていたが，そのファイルでは出力動作が使えない。

I-O指定が指定されていたが，そのファイルでは，入出力両用モードで開かれている索引編成ファイルに対して許される入出力動作が使えない。

INPUT指定が指定されたが，そのファイルでは入力動作が使えない。

OUTPUT指定以外が指定されたが，書式印刷機能でプリンタの出力動作が使えない。

×
○
（1.，2.，および3.の場合だけ）

38
施錠して閉じたファイルに対して，OPEN文を実行しようとしたことによる永続誤りがある。
○
×

39
ファイル固有属性とプログラム中で指定した属性との間で矛盾が検出されたため，OPEN文が不成功になった。
×
○

論理誤り
41
開かれているファイルにOPEN文を実行しようとした。
○
○

42
開かれていないファイルにCLOSE文を実行しようとした。
○
○

43
順アクセスで，DELETE文，またはREWRITE文を実行する前に，関連するファイルに対して実行された最後の入出力文が，成功したREAD文でない。
○
○

44
次のどちらかの条件で，区域外書き出しが起こった。

関連するファイル名のRECORD IS VARYING句によって許される最大のレコードより大きい，または最小のレコードより小さいレコードを書き出そうとした，または書き換えようとした。

レコードを書き換えようとしたが，そのレコードは，書き換えられるレコードと同じサイズでない。

○
（1.の場合だけ）
○※¹

46
入力モードまたは入出力両用レコードで開かれたファイルに順アクセスのREAD文を実行しようとしたが，有効な次のレコードがない。次の場合のどれかである。

先行するSTART文が不成功であった。

先行するREAD文が，ファイル終了条件によって不成功であった。

先行するREAD文が，ファイル終了条件を引き起こした。

○
○
（1.は相対編成ファイルの場合だけ）

47
入力モード，または入出力両用モードで開かれていないファイルに，READ文，またはSTART文を実行しようとした。
○
○

48
入出力両用モード，出力モード，または拡張モードで開かれていないファイルに，WRITE文を実行しようとした。
○
○

49
入出力両用モードで開かれていないファイルに，DELETE文，またはREWRITE文を実行しようとした。
○
○

作成者規定
90
入出力文の実行時，実行できない状態になった。
次のどれかである。

入出力に必要なメモリが不足した。

ファイルにディレクトリが指定された。

CBL_外部装置名で示される環境変数がない。

1プロセス内でオープンできるファイル数の上限を超えた。

CLOSE文実行時，バッファに残っていた内容をファイルに書き出すとき，大容量の記憶ファイルの許容範囲を超えた。

ファイル名指定に誤りがある。

ラージファイル入出力機能の環境変数指定とファイル属性情報，またはファイルシステムの属性情報とで矛盾がある。

ラージファイル入出力機能を使用していない場合にファイルサイズが2GBを超えて入出力を実行した。

ISAMによる索引編成ファイルのクローズ時のディスク書き込み保証で使用する関数アドレスの取得に失敗した。

○※²
○※³

92
入出力文の妥当でない使い方によって実行が不成功になった。

レコード長がDEPENDING ON指定で指定されている場合，指定されたデータ名中の値が数字以外である。

レコード番号が処理できる最大値を超えた（相対編成ファイルだけ）。

開かれていないファイルにUNLOCK文を実行しようとした。

○
（1.，および3.の場合だけ）
○※⁴

93
次の場合のどちらかである。

OPEN文を実行しようとしたが，該当ファイルまたは該当ファイル中のレコードはすでに使用されている。

書式印刷機能を使用するとき，プリンタはすでに使用されている。

×
○
（1.の場合だけ）

98
該当せず。
出力モード指定，または不定ファイルに対応する入出力両用，拡張モード指定のOPEN文を実行しようとしたが，ファイルがなかった。
×

99
入出力文（OPEN文，CLOSE文を除く）を実行しようとしたが，該当レコードはすでに使用されている。
×
○

（凡例）

○：標準仕様と同じ

×：値は返されない

－：該当しない

注※1

2.，および次の場合に該当する。

ファイルオープン時に指定した最大のレコードより大きい，または最小のレコードより小さいレコードを書き出そうとした，または書き換えようとした。

注※2

1.～6.，および次の場合に該当する。

副レコードキーの個数が，98を超えている。

データが不正である。

注※3

1.，2.，4.，5.，6.，7.，8.，および次の場合に該当する。

サービスルーチンに指定したパラメタインタフェース領域に誤りがある。

サービスルーチンで取り扱えないファイル名を指定した。

COBOL実行時ライブラリが組み込まれていない。

入出力のためのシステム関数でエラーが発生した。

注※4

2.，3.，および次の場合に該当する。

指定できないファイル編成，およびアクセス法でCBLSTARTサービスルーチンを実行した。

指定できないファイル編成，およびアクセス法でNEXT指定のCBLREADサービスルーチンを実行した。

指定できないファイル編成，およびアクセス法でKEY指定のCBLREADサービスルーチンを実行した。

指定できないファイル編成でCBLDELETEサービスルーチンを実行した。

順ファイルに対してLOCK MODE MANUALの指定をした。

開かれていないファイルに対してCBLWDISKサービスルーチンを実行した。

付録G　COBOL85とCOBOL2002のコンパイラオプションの対応

COBOL85のccblコマンドと，COBOL2002のccbl2002コマンドでの，コンパイラオプションの対応関係を，次に示します。

項番
ccblコマンドの
オプション名
ccbl2002コマンドの
オプション名
機能

1
-Ai
-NumAccept
ACCEPT文に数字項目を指定できるようにする。

2
-B1
-Bin1Byte
1バイトの2進項目を有効にする（PICTURE句の指定で2けたまでは1バイトとして扱う）。

3
-Bb※1
-BigEndian,Bin
2進データ項目をビッグエンディアン形式で処理する。

-Fb※1
-BigEndian,Float
浮動小数点データ項目をビッグエンディアン形式で処理する。

4
-Bd
-DynamicLink,Call
プログラムの呼び出しで，動的なリンク（ダイナミックリンク）を行う。

-Bs
-DynamicLink,IdentCall
一意名指定のCALL文でプログラムを呼び出す場合，動的なリンク（ダイナミックリンク）を行う。定数指定のCALL文は，静的なリンク（スタティックリンク）となる。

5
-Be※2
-ExternRef
外部属性を持つデータ項目が8バイト境界に整列されていないことを想定したオブジェクトを生成する。

6
-C1
-Compile,CheckOnly
コンパイル時，オブジェクトファイル，実行可能ファイルを出力しない。

-C2
-Compile,NoLink
コンパイル時，実行可能ファイルを出力しない。

7
-Ci
-NumCsv
CSV編成ファイルで，セルデータを数値として入出力できるようにする。

8
-Cm
-StdMIA,13
MIA1.3仕様の範囲外チェックをする。

-Cy
-StdMIA,14
MIA1.4仕様の範囲外チェックをする。

-Cu
-Std85,High
JIS仕様の範囲外チェックをする。

-Cj
-Std85,High,Obso
JIS仕様の範囲外と廃要素をチェックする。

-Cv
-Std85,Middle
JIS仕様の中位集合範囲外（上位集合，JIS仕様の範囲外）チェックをする。

-Cw
-Std85,Low
JIS仕様の下位集合範囲外（中位集合，上位集合，JIS仕様の範囲外）チェックをする。

-Cr
-Std85,Report
JIS仕様の報告書作成機能をチェックする。

9
-Cs
-MainNotCBL
すべて副プログラムとして作成する。

10
-d
-DebugLine
デバッグ行を有効にする。

11
-Dz
-MinusZero
10進項目で負の符号を持つゼロを正の符号を持つゼロに変換する。

12
-Ec※3
-Switch,EBCDIC
字類条件をEBCDICに指定する。

-Ek※3
-Switch,EBCDIK
字類条件をEBCDIKに指定する。

－
-Switch,xxxxx,Unprintable※8
英数字の照合順序を指定したコードに切り替える。また，1バイトで印字できないコードも，照合順序として固有の文字位置に割り付ける（xxxxxには，EBCDICまたはEBCDIKを指定する）。

－
-Switch,xxxxx,noApplyJpnItem※8
日本語項目を-Switchオプションの適用対象外とする（xxxxxには，EBCDICまたはEBCDIKを指定する）。

13
-F8
-Cblctr
CBL-CTR特殊レジスタを使用できるようにする。

14
-Gm
-SimMain
主プログラムをシミュレーションする。

-Gs
-SimSub
副プログラムをシミュレーションする。

15
-H8
-H8Switch
HITAC8000シリーズの仕様でコンパイルする。

16
-Hd
-IgnoreLCC
行送り制御文字を無視する。

17
-Hf※9
-V3Rec,Fixed
メインフレーム（VOS3）の固定長レコード形式のプログラムを，VOS3の日本語文字の扱いに合わせてコンパイルする。

-Hv※9
-V3Rec,Variable
メインフレーム（VOS3）の可変長レコード形式のプログラムを，VOS3の日本語文字の扱いに合わせてコンパイルする。

18
－
-V3RecFCSpace※11
空白に関する機能キャラクタの扱いをメインフレームと同等にする。

19
－
-V3RecEased,QuoteCheck※11
-V3Recオプション指定時の仕様チェックを緩和する（定数の分離符のチェック）。

－
-V3RecEased,WordCheck※11
-V3Recオプション指定時の仕様チェックを緩和する（語またはPICTURE文字列の制限値のチェック）。

20
-i
-IdentCall
動的なリンクでの呼び出しをシミュレーションする。

21
-K1※3
-EucPosition
EUC環境下で，見かけ上の文字位置で固定形式正書法の境界を決定するときに指定する。

22
-Ks※4
-XMAP,LinePrint
書式印刷機能を使用して，順編成ファイルをプリンタに出力する。

23
-M1
-CmAster
1カラム目が'*'の行を注記行とする。

24
-Md
-CmDol
7カラム目が'$'の行を注記行とする。

25
-Mw
-Main,System
先頭の最外側プログラムを主プログラムとして作成する。引数の形式は，システム固有のargc，argv形式とする。

-Mh
-Main,V3
先頭の最外側プログラムを主プログラムとして作成する。引数の形式は，メインフレーム（VOS3）形式とする。

26
-Mt
-MultiThread
マルチスレッド対応COBOLプログラムを作成する。

27
-Na※3
-JPN,Alnum
日本語項目，日本語編集項目，および日本語文字定数をそれぞれ英数字項目，英数字編集項目，および英数字定数として扱う。

－
-JPN,V3JPN※3
STRING文，UNSTRING文，INSPECT文を除く日本語項目，日本語編集項目，および日本語文字定数をそれぞれ英数字項目，英数字編集項目，および英数字定数として扱う。

－
-JPN,V3JPNSpace※8
-CompatiV3オプション指定時に，日本語項目，日本語編集項目，および日本語文字定数をそのままの属性で扱う。

28
-Nl
-International
インターナショナリゼーション機能を使用するときに指定する。

29
-o
-OutputFile
生成する実行可能ファイル名を指定する。

30
-O0
-Optimize,0
コンパイル時，最適化をしない。

-O1
-Optimize,1
コンパイル時，文の中で閉じた最適化をする。

-O2
-Optimize,2
コンパイル時，広域的な最適化をする。

-O3
-Optimize,3
コンパイル時，広域的な最適化をし，10進項目を2進項目に変換する。

31
－
-SQLDisp※12
埋め込みSQL文に用途（USAGE句）が表示用（DISPLAY）のデータ項目を指定できるようにする。

32
－
-SQL,ODBC※12
埋め込みSQL文をODBCで使用できるようにする。

－
-SQL,ODBC,NoCont※12
埋め込みSQL文をODBCで使用できるようにする。SQL構文内の浮動継続指示子を有効としない。

33
-P1
-SrcList,NoCopy
コンパイルリストに情報を出力する。すべてのCOPY文の展開を抑止する。

-P2
-SrcList,CopySup
コンパイルリストに情報を出力する。プログラムにSUPPRESS指定があるときだけ，COPY文の展開を抑止する。

-P3
-SrcList,CopyAll
コンパイルリストに情報を出力する。SUPPRESS指定を無視して，すべてのCOPY文を強制的に展開する。

－
-SrcList,OutputAll
コンパイルリストに情報を出力する。
COPY文のSUPPRESS指定，翻訳指令を無視して，すべての情報を出力する。

－
-SrcList,xxxxx,NoFalsePath
コンパイルリストに情報を出力するとき，条件翻訳の無効行を出力しない（xxxxxには，CopyAll，CopySup，またはNoCopyを指定する）。

－
-SrcList,xxxxx,DataLoc※6
コンパイルリスト（原始プログラムリスト）にデータ項目の相対位置と長さを表示する（xxxxxには，OutputAll，CopyAll，CopySup，またはNoCopyを指定する）。

34
-Rd※3
-RDBTran
HiRDBによる索引ファイル入出力機能を使用する。

35
-RG
-Profile,Gprof
gprofでのプロファイル用オブジェクトファイルを作成する。

-Rp※5
-Profile,Prof
profでのプロファイル用オブジェクトファイルを作成する。

36
-S1
-StdVersion,1
第1次規格の解釈でコンパイルする。

-S2
-StdVersion,2
第2次規格の解釈でコンパイルする。

37
-Sz
-PIC,Std
共用ライブラリに使う位置独立（PIC）コードを作成する場合に指定する。

-SZ
-PIC,Expand
-PIC,Stdオプションを指定してリンクエラーになった場合に使用する。

38
-T1
-DebugInf
異常終了時，エラー要約情報を出力する。

-T2
-DebugInf,Trace
異常終了時，エラー要約情報およびトレースバック情報を出力する。

-T3
-DebugCompati
実行時に次のチェックをする。

添字，指標名の繰り返し回数の範囲外チェック

プログラム間整合性チェック

-T4
-DebugData
データ例外を検出する。

－
-DebugData,ValueHex
データ例外検知機能でデータ例外が検出された場合，出力されるエラーメッセージにデータ項目の属性と矛盾している格納値を16進数で表示する。

-T5
-TDInf
テストデバッグ情報を出力する。

-T6
-CVInf
カバレージ情報を出力する。

-T7
-DebugRange
添字，指標名の繰り返し回数について，次元ごとの範囲外チェックをする。

-Tt
-TestCmd,Full
中断点情報，シミュレーション情報のTDコマンドをTDコマンド格納ファイルに出力する。

-Tb
-TestCmd,Break
中断点情報のTDコマンドをTDコマンド格納ファイルに出力する。

-Ts
-TestCmd,Sim
シミュレーション情報のTDコマンドをTDコマンド格納ファイルに出力する。

39
-Un
-EquivRule,NotExtend
拡張コード文字と標準コード文字を等価とみなさない。

-Ue
-EquivRule,NotAny
拡張コード文字と標準コード文字を等価とみなさない。さらに，標準コードの英大文字と標準コードの英小文字も等価とみなさない。

－
-EquivRule,StdCode
拡張コード文字と標準コード文字を等価とみなさない。さらに，日本語文字定数中に標準コードの空白を書いてもエラーとしない。

40
-v
-Details
コンパイラオプションの詳細情報を出力する。また，一部の環境変数の内容を出力できる。

41
-V3※9
-CompatiV3
VOS3 COBOL85との互換機能を有効にする。

42
-Va
-CBLVALUE
環境変数CBLVALUEを有効にする。

43
-Vx
-BinExtend
2進データ項目に指定できる初期値を拡張する。

44
-Wl
-Link
リンカに渡すオプションを指定する。

45
-X5
-Comp5
COMP-5を指定できるようにする。

46
-Xb
-DigitsTrunc
転記文で上位けたを切り捨てる。

47
-Xc
-DoubleQuote
引用符（ " ）を分離符とみなしてコンパイルする。

48
-Xe
-TruncCheck,Binary
転記でのデータ切り捨てをチェックする。さらに，送り出し側作用対象が2進項目で，受け取り側作用対象が外部10進項目／内部10進項目のとき，送り出し側作用対象の2進項目は格納可能な最大けた数でチェックする。

-Xo
-TruncCheck
転記でのデータ切り捨てをチェックする。

49
-Xr
-SQL,XDM
リレーショナルデータベース（XDM/RD）操作シミュレーション機能を使用する。

50
指定なし
-Help
コマンドのヘルプを出力する。

51
－
-SimIdent
副プログラム（一意名CALL文）をシミュレーションする。

52
－
-Std2002,OutRange
COBOL2002規格仕様をチェックする。

－
-Std2002,Obso
COBOL2002規格仕様の廃要素をチェックする。

－
-Std2002,Archaic
COBOL2002仕様の古典的要素をチェックする。

53
－
-Compati85,IoStatus
入出力状態1x，2xに対する処理をUNIX COBOL85と同様にする。

－
-Compati85,Linage
LINAGE値が不正なときの処理をUNIX COBOL85と同様にする。

－
-Compati85,Call
CALL文のON EXCEPTION，またはON OVERFLOW指定の無条件文を実行するエラーの条件をUNIX COBOL85と同様にする。

－
-Compati85,Power
べき乗演算の精度，エラー時の処理をUNIX COBOL85と同様にする。

－
-Compati85,Syntax
コンパイル時の解釈をUNIX COBOL85と同様にする。

－
-Compati85,IDParag
見出し部の構文チェックを緩和する。

－
-Compati85,RsvWord
UNIX COBOL85の予約語と同じ範囲でコンパイルする。

－
-Compati85,NoPropagate
プログラムへの伝播を抑止し，オブジェクトファイルサイズを縮小する。

－
-Compati85,All
-Compati85オプションのすべてのサブオプションを仮定する。

54
－
-ErrSup,I
Iレベルエラーの出力を抑止する。

－
-ErrSup,W
Wレベルエラーの出力を抑止する。

55
－
-Repository,Gen
コンパイル時，リポジトリファイルだけを出力する。

－
-Repository,Sup
リポジトリファイルがすでにある場合，更新しない。

56
－
-RepositoryCheck
翻訳グループ中の定義と外部リポジトリ中の情報に相違があるかどうかをチェックする。

57
－
-Define
コンパイル時に有効となる，翻訳変数名とその値を定義する。

58
－
-OldForm
UNIX COBOL85のオプションを指定する。

59
－
-UniObjGen※6
シフトJISのCOBOLソースからUnicodeのオブジェクトを生成する。

－
-UniEndian,Little※6
シフトJISで記述された日本語文字定数をUTF-16LEに変換する。

－
-UniEndian,Big※6
シフトJISで記述された日本語文字定数をUTF-16BEに変換する。

60
－
-V3Spec
VOS3 COBOL85に対するUNIX COBOL2002固有の構文をチェックする。

－
-V3Spec,CopyEased
VOS3 COBOL85に対するUNIX COBOL2002固有の構文をチェックする。ただし，COPY文，REPLACE文の一部のエラーチェックをしない。

61
－
-V3ConvtName
VOS3 COBOL85からのソースファイル互換のため，COPY文の原文名定数中の'¥'と'@'を変換する。

62
－
-UscoreStart
先頭が下線のCALL定数を指定できるようにする。

63
－
-LowerAsUpper
定数指定のCALLに指定された英小文字を英大文字に変換してプログラムを呼び出す。

64
－
-Lx64ConventionCheck※7
Linux(x64)でC言語との連携を行うときに問題となる可能性のあるコードがあるかどうかをチェックする。

65
－
-MaxDigits38※10
数字項目および数字定数に指定できる最大けた数を18けたから38けたに拡張する。

66
－
-IntResult,DecFloat40※10
算術演算の中間結果の表現形式を40けたの10進浮動小数点形式にする。

67
－
-VOSCBL,OccursKey※11
メインフレーム互換機能を有効にする。OCCURS句のKEY IS指定のデータ名の名前の有効範囲を，そのOCCURS句のある記述項または，それに従属する記述項とする。

－
-VOSCBL,ReportControl※11
メインフレーム互換機能を有効にする。制御脚書きの印刷中に改ページが起こったとき，ページ頭書きでSOURCE句によって制御用データ項目を参照している場合，その制御用データ項目の値を元の値で参照する。

68
－
-LiteralExtend,Alnum※11
英数字定数と定数指定のプログラム名の長さを拡張する。

69
－
-IgnoreAPPLY,FILESHARE※11
APPLY FILE-SHARE句を覚え書きとみなす。

70
－
-PortabilityCheck,Literal※11
メインフレームと動作が異なる可能性がある定数にお知らせメッセージを出力する。

－
-PortabilityCheck,Numeric※11
メインフレームと動作が異なる可能性がある数字項目，浮動小数点定数にお知らせメッセージを出力する。

71
－
-SpaceAsZero※11
外部10進項目中の空白に対して特殊処理を行う。

（凡例）

－：対応するコンパイラオプションがない

注※1

Linuxで有効です。

注※2

Solaris(SPARC)で有効です。

注※3

HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC)で有効です。

注※4

HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効です。

注※5

HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Solaris(SPARC)で有効です。

注※6

HP-UX(IPF)，AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効です。

注※7

Linux(x64)で有効です。

注※8

AIX(32)，AIX(64)で有効です。

注※9

AIX(32)，AIX(64)，Linux(x86)，Linux(x64)の場合，コンパイラ環境変数CBLV3UNICODEにYESを指定したときだけ有効です。

注※10

HP-UX(IPF64)，AIX(64)，Linux(x64)で有効です。

注※11

AIX(32)，AIX(64)，Linux(x86)，Linux(x64)で有効です。

注※12

Linux(x86)，Linux(x64)で有効です。

付録H　サービスルーチンのリソース一覧

リソースの標準値が格納されているアプリケーションリソースファイル名称を，次に示します。

JCPOPUPサービスルーチン

リソースファイル名

HP-UX(IPF)，AIX(32)，Solaris(SPARC)の場合：Cbl2002popup

HP-UX(IPF64)，AIX(64)の場合：Cbl2002popup64

リソースファイルのクラス名

HP-UX(IPF)，AIX(32)，Solaris(SPARC)の場合：Cbl2002popup

HP-UX(IPF64)，AIX(64)の場合：Cbl2002popup64

リソースファイルの格納場所については，「12.4　リソース一覧」を参照してください。

リソース一覧を次に示します。

リソース名
内容
指定値，標準値

background
背景色
任意
標準値…white

foreground
前景色
任意
標準値…black

showPF1
終了キーメニュー中に［PF1］キーを表示
True…表示する
False…表示しない
標準値…True

showPF2
終了キーメニュー中に［PF2］キーを表示

showPF3
終了キーメニュー中に［PF3］キーを表示

showPF4
終了キーメニュー中に［PF4］キーを表示

showPF5
終了キーメニュー中に［PF5］キーを表示

showPF6
終了キーメニュー中に［PF6］キーを表示

showPF7
終了キーメニュー中に［PF7］キーを表示

showPF8
終了キーメニュー中に［PF8］キーを表示

showPF9
終了キーメニュー中に［PF9］キーを表示

showPF10
終了キーメニュー中に［PF10］キーを表示

showPF11
終了キーメニュー中に［PF11］キーを表示

showPF12
終了キーメニュー中に［PF12］キーを表示

showPF13
終了キーメニュー中に［PF13］キーを表示

showPF14
終了キーメニュー中に［PF14］キーを表示

showPF15
終了キーメニュー中に［PF15］キーを表示

showPF16
終了キーメニュー中に［PF16］キーを表示

showPF17
終了キーメニュー中に［PF17］キーを表示

showPF18
終了キーメニュー中に［PF18］キーを表示

showPF19
終了キーメニュー中に［PF19］キーを表示

showPF20
終了キーメニュー中に［PF20］キーを表示

showPF21
終了キーメニュー中に［PF21］キーを表示

showPF22
終了キーメニュー中に［PF22］キーを表示

showPF23
終了キーメニュー中に［PF23］キーを表示

showPF24
終了キーメニュー中に［PF24］キーを表示

PF1.labelString
［PF1］キーのラベル文字列
任意
標準値…PF1

PF2.labelString
［PF2］キーのラベル文字列
任意
標準値…PF2

PF3.labelString
［PF3］キーのラベル文字列
任意
標準値…PF3

PF4.labelString
［PF4］キーのラベル文字列
任意
標準値…PF4

PF5.labelString
［PF5］キーのラベル文字列
任意
標準値…PF5

PF6.labelString
［PF6］キーのラベル文字列
任意
標準値…PF6

PF7.labelString
［PF7］キーのラベル文字列
任意
標準値…PF7

PF8.labelString
［PF8］キーのラベル文字列
任意
標準値…PF8

PF9.labelString
［PF9］キーのラベル文字列
任意
標準値…PF9

PF10.labelString
［PF10］キーのラベル文字列
任意
標準値…PF10（a）

PF11.labelString
［PF11］キーのラベル文字列
任意
標準値…PF11（b）

PF12.labelString
［PF12］キーのラベル文字列
任意
標準値…PF12（c）

PF13.labelString
［PF13］キーのラベル文字列
任意
標準値…PF13（d）

PF14.labelString
［PF14］キーのラベル文字列
任意
標準値…PF14（e）

PF15.labelString
［PF15］キーのラベル文字列
任意
標準値…PF15（f）

PF16.labelString
［PF16］キーのラベル文字列
任意
標準値…PF16（g）

PF17.labelString
［PF17］キーのラベル文字列
任意
標準値…PF17（h）

PF18.labelString
［PF18］キーのラベル文字列
任意
標準値…PF18（i）

PF19.labelString
［PF19］キーのラベル文字列
任意
標準値…PF19（j）

PF20.labelString
［PF20］キーのラベル文字列
任意
標準値…PF20（k）

PF21.labelString
［PF21］キーのラベル文字列
任意
標準値…PF21（l）

PF22.labelString
［PF22］キーのラベル文字列
任意
標準値…PF22（m）

PF23.labelString
［PF23］キーのラベル文字列
任意
標準値…PF23（n）

PF24.labelString
［PF24］キーのラベル文字列
任意
標準値…PF24（o）

付録I　各バージョンの変更内容

各バージョンの変更内容を示します。

変更内容（3000-3-D08-10）　COBOL2002 Net Server Suite 03-02（適用OS：AIX V6.1，AIX V7.1），COBOL2002 Net Server Runtime 03-02（適用OS：AIX V6.1，AIX V7.1），COBOL2002 Net Server Suite(64) 03-02（適用OS：AIX V6.1，AIX V7.1），COBOL2002 Net Server Runtime(64) 03-02（適用OS：AIX V6.1，AIX V7.1）

追加・変更内容

AIX(32)，AIX(64)で次に示す機能に対応した。

日本語集団項目

動的長基本項目機能

英数字定数の定数長拡張機能（-LiteralExtend,Alnumオプション）

初期化属性プログラムの作業場所節にある，VALUE句の指定がないデータ項目の初期値をNULL（X'00'）に設定する機能（コンパイラ環境変数CBLINITVALUE）

移行向けチェック機能（-PortabilityCheckオプション）

テキスト編成ファイルでレコード末尾の空白文字を出力する機能

テキスト編成ファイルのUnicodeシグニチャ出力の切り替え機能と実行時環境変数 CBLTEXTSUPPRESSBOM，CBLD_ファイル名={TEXTSUPPRESSBOM｜NOTEXTSUPPRESSBOM}

空白に関する機能キャラクタの扱いをメインフレーム（VOS3）と同等にするオプション（-V3RecFCSpaceオプション）

次に示す-VOSCBLコンパイラオプション
・-VOSCBL,OccursKeyコンパイラオプション（OCCURS句のKEY IS指定のデータ名に対するコンパイル時の解釈をVOS3 COBOL85と同等にする）
・-VOSCBL,ReportControlコンパイラオプション（制御用データ項目の値を元の値で参照する）

入出力状態値90が設定されたときに実行時メッセージを出力するファイル入出力文でのエラー情報出力機能（実行時環境変数CBLIOMESSAGE）

コンパイルリストに，データ項目の相対位置と長さ(バイト)を16進数で表示する機能（-SrcList,xxxxx,DataLocオプション）

メインフレーム互換機能（-JPN,V3JPNSpaceオプション）

ファイルバッファサイズ指定機能（環境変数CBLINBUFSIZE，CBLOUTBUFSIZE，CBLD_ファイル名={NOINBUFSIZE｜NOOUTBUFSIZE}）

AIX(64)で次に示す機能に対応した。

数字項目のけた拡張機能

COBOLのレコード定義に依存することなく，Cプログラムなどで作成したバイナリファイルの読み書きができる機能（バイトストリーム入出力サービスルーチン）

XML連携機能

Cosminexus連携機能

CBLDATADUMPサービスルーチン

AIX(32)，AIX(64)で，順編成ファイルの場合，COBOL入出力サービスルーチンを使用してラージファイルに対する入出力をできるようにした。

AIX(32)，AIX(64)で，DISPLAY文で16進ダンプ表示をサポートした。これに伴い，次の項目を追加した。
DISPLAY文の形式

IN DATA DUMP

AIX(32)，AIX(64)で，動的なリンクによる呼び出しのプレロード機能およびプログラム検索トレース機能をサポートした。

AIX(32)，AIX(64)で次に示す機能をサポートした。

外部10進項目に空白文字があるとき，ゼロとみなして比較，演算，転記を実行する機能（-SpaceAsZeroオプション）

AIX(32)，AIX(64)で，データ例外検知機能でデータ例外が検出された場合，出力されるエラーメッセージにデータ項目の属性と矛盾している格納値を16進数で表示できるようにした。これに伴い，次のオプションを追加した。

-DebugData,ValueHex

COBOL2002 Net Server Suite 03-02（適用OS：Linux 5 AP (x86)，Linux 5 AP (AMD/Intel 64)，Linux Server 6 (32-bit x86)，Linux Server 6 (64-bit x86_64)，Linux Server 7 (64-bit x86_64)），COBOL2002 Net Server Runtime 03-02（適用OS：Linux 5 AP (x86)，Linux 5 AP (AMD/Intel 64)，Linux Server 6 (32-bit x86)，Linux Server 6 (64-bit x86_64)，Linux Server 7 (64-bit x86_64)），COBOL2002 Net Server Suite(64) 03-02（適用OS：Linux 5 AP (AMD/Intel 64)，Linux Server 6 (64-bit x86_64)，Linux Server 7 (64-bit x86_64)），COBOL2002 Net Server Runtime(64) 03-02（適用OS：Linux 5 AP (AMD/Intel 64)，Linux Server 6 (64-bit x86_64)，Linux Server 7 (64-bit x86_64)）

追加・変更内容

次のOSに対応した。

Linux Server 7 (64-bit x86_64)

Linux(x86)，Linux(x64)で，DISPLAY文で16進ダンプ表示をサポートした。これに伴い，次の項目を追加した。
DISPLAY文の形式

IN DATA DUMP

Linux(x86)，Linux(x64)で，動的なリンクによる呼び出しのプレロード機能およびプログラム検索トレース機能をサポートした。

Linux(x86)，Linux(x64)で次に示す機能をサポートした。

外部10進項目に空白文字があるとき，ゼロとみなして比較，演算，転記を実行する機能（-SpaceAsZeroオプション）

Linux(x86)，Linux(x64)で，データ例外検知機能でデータ例外が検出された場合，出力されるエラーメッセージにデータ項目の属性と矛盾している格納値を16進数で表示できるようにした。これに伴い，次のオプションを追加した。

-DebugData,ValueHex

変更内容（3000-3-D08）　COBOL2002 Net Server Suite 03-01（適用OS：Linux 5 AP (x86)，Linux 5 AP (AMD/Intel 64)，Linux Server 6 (32-bit x86)，Linux Server 6 (64-bit x86_64)），COBOL2002 Net Server Runtime 03-01（適用OS：Linux 5 AP (x86)，Linux 5 AP (AMD/Intel 64)，Linux Server 6 (32-bit x86)，Linux Server 6 (64-bit x86_64)），COBOL2002 Net Server Suite(64) 03-01（適用OS：Linux 5 AP (AMD/Intel 64)，Linux Server 6 (64-bit x86_64)），COBOL2002 Net Server Runtime(64) 03-01（適用OS：Linux 5 AP (AMD/Intel 64)，Linux Server 6 (64-bit x86_64)）

追加・変更内容

Linux(x86)，Linux(x64)で次に示す機能をサポートした。

日本語集団項目

動的長基本項目機能

英数字定数の定数長拡張機能（-LiteralExtend,Alnumオプション）

CBLDATADUMPサービスルーチン

初期化属性プログラムの作業場所節にある，VALUE句の指定がないデータ項目の初期値をNULL（X'00'）に設定する機能（コンパイラ環境変数CBLINITVALUE）

実行時環境変数CBLDATADUMPFILE

テキスト編成ファイルのUnicodeシグニチャ出力の切り替え機能と実行時環境変数 CBLTEXTSUPPRESSBOM，CBLD_ファイル名={TEXTSUPPRESSBOM｜NOTEXTSUPPRESSBOM}

移行向けチェック機能（-PortabilityCheckオプション）

XML連携機能

Linux(x86)，Linux(x64)で異常終了時要約情報リストの内容を変更した。

Linux(x86)で次に示す機能をサポートした。

カバレージ機能をマルチスレッドプログラムに対応

実行時環境変数CBLIOMESSAGE

実行時環境変数CBLTEXTWRITESPACE，CBLD_ファイル名={ TEXTWRITESPACE | NOTEXTWRITESPACE }

空白に関する機能キャラクタの扱いをメインフレーム（VOS3）と同等にするオプション（-V3RecFCSpaceオプション）

次に示す-VOSCBLコンパイラオプション
・-VOSCBL,OccursKeyコンパイラオプション（OCCURS句のKEY IS指定のデータ名に対するコンパイル時の解釈をVOS3 COBOL85と同等にする）
・-VOSCBL,ReportControlコンパイラオプション（制御用データ項目の値を元の値で参照する）

COBOL2002 Net Server Suite(64) 01-04（適用OS：Linux 5 AP (AMD/Intel 64)，Linux Server 6 (64-bit x86_64)），COBOL2002 Net Server Runtime(64) 01-04（適用OS：Linux 5 AP (AMD/Intel 64)，Linux Server 6 (64-bit x86_64)）

追加・変更内容

実行時環境変数CBLIOMESSAGEをサポートした。

けた拡張機能で，次に示す項目をサポートした。

数字編集項目の数字けた位置の最大を18から38に拡張した。

PICTURE文字列の長さの最大を30文字から60文字に拡張した。

添字および部分参照子にPICTURE句の数字けた位置の個数が19～38の数字項目を指定できるようにした。

数字けた位置の個数が19～38の数字項目および数字編集項目にBLANK WHEN ZERO句を指定できるようにした。

ADDR関数，LENGTH関数の引数に，PICTURE句の数字けた位置の個数が19～38の数字項目および数字編集項目を指定できるようにした。

-CompatiV3オプションと-IntResult,DecFloat40オプションを同時に指定できるようにした。

COBOLのレコード定義に依存することなく，Cプログラムなどで作成したバイナリファイルの読み書きができる，バイトストリーム入出力サービスルーチンをサポートした。

-VOSCBLコンパイラオプションのサポートで，次に示すオプションを指定できるようにした。

-VOSCBL,OccursKeyコンパイラオプション（OCCURS句のKEY IS指定のデータ名に対するコンパイル時の解釈をVOS3 COBOL85と同等にする）

-VOSCBL,ReportControlコンパイラオプション（制御用データ項目の値を元の値で参照する）

Linux(x64)で空白に関する機能キャラクタの扱いをメインフレーム（VOS3）と同等にするオプション（-V3RecFCSpaceオプション）をサポートした。

COBOL2002 Net Server Suite 01-02（適用OS：Linux 5 AP (x86)，Linux 5 AP (AMD/Intel 64)，Linux Server 6 (32-bit x86)，Linux Server 6 (64-bit x86_64)）

追加・変更内容

次のOSに対応した。

Linux Server 6 (32-bit x86)，Linux Server 6 (64-bit x86_64)

COBOL2002 Net Server Suite(64) 01-02，COBOL2002 Net Server Runtime(64) 01-02（適用OS：HP-UX 11i (IPF)）

追加・変更内容

環境変数CBLSORTWORKを指定しなかった場合の作業ディレクトリについて説明を追加した。

拡張機能の数字項目のけた拡張機能で，共通例外処理を制限付きで使用できるように変更した。

-UniObjGenオプションと実行時環境変数CBLLANGの関係にHP-UX(IPF)の説明を追加した。

オプションを指定すると，ほかのオプションが無効となる場合の注意事項の説明を変更した。

オプションを指定すると仮定されるオプションの注意事項の説明を変更した。

-IntResult,DecFloat40オプション，-MaxDigits38オプション，および-CompatiV3オプションを同時に指定した場合の注意事項の説明を変更した。
また，-UniObjGenオプションと-CompatiV3オプションを同時に指定した場合の注意事項の説明を追加した。

内部ブール項目のデータ領域ダンプリストについて，「データ名：DATA313」の説明から「データ名：DATA3」または「データ名：DATA31」の説明に変更した。

変更内容（3000-3-D42-90）COBOL2002 Net Server Suite(64) 01-03，COBOL2002 Net Server Runtime(64) 01-03（適用OS：Linux 5 AP (AMD/Intel 64)）

追加・変更内容

カバレージ情報の蓄積だけマルチスレッド対応COBOLプログラムに対応した。

数字項目のけた拡張機能について追加した。

可変反復データ項目に続くデータ項目の要素の相対位置を求める計算式の説明を変更した。

COBOL2002 Net Server Suite(64) 01-02，COBOL2002 Net Server Runtime(64) 01-02（適用OS：HP-UX 11i (IPF)）

追加・変更内容

数字項目のけた拡張機能について追加した。

HiRDBのクライアント環境変数PDDDLDEAPRPEXEの設定時の注意事項を追加した。

バイトストリーム入出力サービスルーチンをサポートした。

バイトストリーム入出力サービスルーチンを使用するときの注意事項を変更した。

変更内容（3000-3-D42-80）COBOL2002 Net Server Suite 01-02，COBOL2002 Net Server Runtime 01-02（適用OS：HP-UX 11i(IPF)）

追加・変更内容

適用OSごとに記述している個所に，HP-UX(IPF) COBOL2002 01-02の内容を追加した。

リソースファイルの格納場所を追加した。

COBOL2002 Net Server Suite 01-02，COBOL2002 Net Server Runtime 01-02（適用OS：Linux 5 AP(x86)，Linux 5 AP（AMD/Intel64）），COBOL2002 Net Server Suite(64) 01-02，COBOL2002 Net Server Runtime(64) 01-02（適用OS：Linux 5 AP(AMD/Intel64））

追加・変更内容

実行単位中のすべてのファイルに対して，ラージファイル入出力機能を適用する方法を追加した。

ファイル入出力拡張機能を追加した。

「ファイルサイズがレコード長の整数倍でない固定長形式の順ファイルの入出力」を6.11.1に移動した。

コンパイラ環境変数CBLV3UNICODEを追加した。

適用OSごとに記述している個所に，Linux(x86)，Linux(x64) COBOL2002の内容を追加した。

-SrcListオプションにDataLocサブオプションを追加した。

次のコンパイラオプションの注意事項を追加した。

-V3Recオプション

-JPNオプション

-UniObjGenオプション

次の環境変数を追加した。

CBLINBUFSIZE

CBLLARGEFILE

CBLOUTBUFSIZE

環境変数CBLD_ファイル名に設定できるオプション「NOINBUFSIZE／NOOUTBUFSIZE」を追加した。

変更内容（3000-3-D42-70）COBOL2002 Net Server Suite(64) 01-00，COBOL2002 Net Server Runtime(64) 01-00（適用OS：AIX 5L V5.3，AIX V6.1）

追加・変更内容

適用OSごとに記述している個所に，AIX(64) COBOL2002の内容を追加した。

ISAMによる索引編成ファイルとの物理的制限事項の相違点に，作成できる列の数を追加した。

表中の「Insert」，「Delete」,「Alt+矢印」の説明を削除した。

画面節（SCREEN SECTION)による画面機能の注意事項を追加した。

画面節（WINDOW SECTION)による画面機能の注意事項を追加した。

リンク方法の例題に，-Lオプションの指定を追加した。

CANCEL文を実行した場合のバイトストリームの状態を追加した。

CBLSTMREADの引数3および引数4の説明を変更した。

COBOLプログラム間で定数の引数を渡す場合の型の対応を変更した。

共用ライブラリの動的リンク時に指定が必要なライブラリ(HP-UX(IPF),HP-UX(IPF64)の場合)の説明を変更した。

共用ライブラリの動的なリンクを使用するプログラム作成時の注意事項を変更した。

他言語で標準出力や標準エラー出力をする場合の注意事項を追加した。

COBOLプログラムのデータ項目とCプログラムの型の対応について変更した。

C言語との連携についての注意事項を追加した。

COBOLの入出力機能についてのサービスルーチンの説明を変更した。

次のコンパイラオプションの注意事項を変更した。

-BigEndianオプション

リンケージ方法の例題に-L指定を追加した。

xxx.soライブラリのリンク時の注意事項を追加した。

COBOL2002 Net Server Suite 01-02，COBOL2002 Net Server Runtime 01-02（適用OS：AIX 5L V5.1，AIX 5L V5.2，AIX 5L V5.3，AIX V6.1）

追加・変更内容

適用OSにAIX V6.1を追加した。

適用OSごとに記述している個所のAIXの表記を，AIX(32)に変更した。

AIX(32)がラージファイル入出力機能で使用できるファイル形式に，CSV編成ファイルを追加した。

AIX(32)でプロファイル情報に出力されるプロパティメソッド名を変更した。

変更内容（3000-3-D42-60）COBOL2002 Net Server Suite 01-00，COBOL2002 Net Server Runtime 01-00（適用OS：Solaris(SPARC)）

追加・変更内容

適用OSにSolaris(SPARC)を追加した。

適用OSごとに記述している個所に，Solaris(SPARC) COBOL2002の内容を追加した。

Linux(x86)，Linux(x64)，およびLinux(IPF64)を併記してある表記を「Linux」に変更した。

Windowsの改行文字の説明を変更した。

COBOLプログラムがスレッド開始関数となる例の，スレッド起動プログラムの内容を変更した。

次のコンパイラオプションの注意事項を変更した。

-Profile

次のコンパイラオプションを追加した。

-ExternRef

付録J　このマニュアルの参考情報

このマニュアルを読むに当たっての参考情報を示します。

＜この節の構成＞

付録J.1　関連マニュアル

付録J.2　このマニュアルでの表記

付録J.3　英略語

付録J.4　KB（キロバイト）などの単位表記について

付録J.1　関連マニュアル

このマニュアルの関連マニュアルを次に示します。必要に応じてお読みください。

COBOL2002　使用の手引　操作編（3000-3-D09）

COBOL2002　言語　標準仕様編　（3020-3-D44）

COBOL2002　言語　拡張仕様編　（3020-3-D45）

COBOL2002　XML連携機能ガイド　（3020-3-D89）

COBOL2002　Cosminexus連携機能ガイド　（3020-3-D90）

COBOL2002　メッセージ　（3020-3-D99）

索引順編成ファイル管理 ISAM　（3000-3-169）

ソートマージ　（3000-3-151）

ソートマージ　（3020-3-N73）

日立コード変換ユーザーズガイド　（3000-7-415）※1

日立コード変換ユーザーズガイド　（3020-7-351）※1

Hitachi Code Converter（UNIX編）　（3020-7-358）※1

画面・帳票サポートシステム XMAP3 Server　（3000-7-508）

XMAP3 Version 5 画面・帳票サポートシステム XMAP3 概説　（3020-7-511）

XMAP3 Version 5 画面・帳票サポートシステム XMAP3 開発ガイド　（3020-7-512）

XMAP3 Version 5 画面・帳票サポートシステム XMAP3 プログラミングガイド　（3020-7-513）

XMAP3 Version 5 画面・帳票サポートシステム XMAP3 実行ガイド　（3020-7-514）

画面・帳票サポートシステム XMAP3 開発・実行ガイド　（3020-7-591）

画面・帳票サポートシステム XMAP3 プログラミングガイド 帳票編　（3020-7-593）

画面・帳票サポートシステム XMAP3 プログラミングガイド 画面編　（3020-7-594）

HiRDB Version 7 解説（UNIX(R)用）　（3000-6-271）※2

HiRDB Version 7 コマンドリファレンス（UNIX(R)用）（3000-6-275）※3

HiRDB Version 7 UAP開発ガイド（UNIX(R)/Windows(R)用）　（3000-6-276）※4

HiRDB Version 7 SQLリファレンス（UNIX(R)/Windows(R)用）　（3000-6-277）※5

HiRDB Version 7 メッセージ（UNIX(R)/Windows(R)用）（3000-6-278）

HiRDB Version 8 解説（UNIX(R)用）　（3000-6-351）※2

HiRDB Version 8 コマンドリファレンス（UNIX(R)用）　（3000-6-355）※3

HiRDB Version 8 UAP開発ガイド　（3020-6-356）※4

HiRDB Version 8 SQLリファレンス　（3020-6-357）※5

HiRDB Version 8 メッセージ　（3020-6-358）

HiRDB Version 9 解説（3020-6-450）※2

HiRDB Version 9 システム導入・設計ガイド（UNIX(R)用）　（3000-6-452）

HiRDB Version 9 システム定義（UNIX(R)用）　（3000-6-453）

HiRDB Version 9 システム運用ガイド（UNIX(R)用）　（3000-6-454）

HiRDB Version 9 コマンドリファレンス（UNIX(R)用）　（3000-6-455）※3

HiRDB Version 9 UAP開発ガイド（3020-6-456）※4

HiRDB Version 9 SQLリファレンス（3020-6-457）※5

HiRDB Version 9 メッセージ（3020-6-458）

注※1

このマニュアルでは，「コード変換ライブラリのマニュアル」と表記しています。

注※2

このマニュアルでは，「HiRDBの解説マニュアル」と表記しています。

注※3

このマニュアルでは，「HiRDBのコマンドリファレンスマニュアル」と表記しています。

注※4

このマニュアルでは，「HiRDBのUAP開発ガイドマニュアル」と表記しています。

注※5

このマニュアルでは，「HiRDBのSQLリファレンスマニュアル」と表記しています。

付録J.2　このマニュアルでの表記

このマニュアル中では，「このシステム」と表現している場合「COBOL2002」を，「UNIX」と表現している場合「HP-UX(IPF※)」，「HP-UX(IPF※64)」，「AIX(32)」，「AIX(64)」，「Linux(x86)」，「Linux(x64)」，「Linux(IPF※64)」，および「Solaris(SPARC)」を，「UNIX32」と表現している場合「HP-UX(IPF※)」，「AIX(32)」，「Linux(x86)」，および「Solaris(SPARC)」を，「UNIX64」と表現している場合「HP-UX(IPF※64)」，「AIX(64)」，「Linux(x64)」，および「Linux(IPF※64)」を示しています。

注※

IPF：Itanium(R) Processor Family

また，このマニュアルは，製品種別によって相違点があります。本文中での製品種別ごとの表記を次に示します。

マニュアルでの表記
該当する製品の
形名

COBOL2002
UNIX COBOL2002
UNIX32 COBOL2002
AIX(32)※ COBOL2002
P-1M36-1131
P-1M36-2131

Linux(x86)※ COBOL2002
P-9S36-1131
P-9S36-2131

UNIX64 COBOL2002
AIX(64)※ COBOL2002
P-1M36-1231
P-1M36-2231

Linux(x64)※ COBOL2002
P-9W36-1231
P-9W36-2231

注※

AIX(32)：32bit版AIX

AIX(64)：64bit版AIX

Linux(x86)：32bit版Linux(x86)

Linux(x64)：64bit版Linux(x64)

Linux(x86) COBOL2002，Linux(x64) COBOL2002を総称して，Linux COBOL2002と表記しています。

バージョンを明確にする必要がある場合の表記を次に示します。

マニュアルでの表記
該当する製品の形名

COBOL2002 V1
HP-UX(IPF) COBOL2002
P-1J36-1111
P-1J36-2111

HP-UX(IPF64) COBOL2002
P-1J36-1211
P-1J36-2211

AIX(32) V1 COBOL2002
P-1M36-1111
P-1M36-2111

AIX(64) V1 COBOL2002
P-1M36-1211
P-1M36-2211

Linux(x86) V1 COBOL2002
P-9S36-1111
P-9S36-2111

Linux(x64) V1 COBOL2002
P-9W36-1211
P-9W36-2211

Linux(IPF64) COBOL2002
P-9V36-1211
P-9V36-2211

Solaris(SPARC) COBOL2002
P-9D36-1111
P-9D36-2111

プラットフォームを明確にする必要がある場合の表記を次に示します。

マニュアルでの表記 | 該当する製品の形名
UNIX | UNIX32 | AIX(32) | P-1M36-1131，P-1M36-2131
Linux(x86)※ | P-9S36-1131，P-9S36-2131
UNIX64 | AIX(64) | P-1M36-1231，P-1M36-2231
Linux(x64)※ | P-9W36-1231，P-9W36-2231

注※

これらの製品を総称してLinuxと表記しています。

また，このマニュアルでは各製品を次のように表記しています。

マニュアルでの表記 | 製品名
AIX | AIX 5L V5.1
AIX 5L V5.2
AIX 5L V5.3
AIX V6.1
AIX V7.1
AIX V7.2
HP-UX 11i (IPF) | HP-UX 11i V2(IPF)
HP-UX 11i V3(IPF)
Linux | Linux AS 3 (IPF) | Red Hat Enterprise Linux(R) AS 3 (IPF)
Linux AS 4 (IPF) | Red Hat Enterprise Linux(R) AS 4 (IPF)
Linux 5 AP (AMD/Intel 64) | Red Hat Enterprise Linux(R) 5 (AMD/Intel 64)
Red Hat Enterprise Linux(R) 5 Advanced Platform (AMD/Intel 64)
Linux 5 AP (Intel Itanium) | Red Hat Enterprise Linux(R) 5 Advanced Platform (Intel Itanium)
Linux 5 AP (x86) | Red Hat Enterprise Linux(R) 5 (x86)
Red Hat Enterprise Linux(R) 5 Advanced Platform (x86)
Linux Server 6 (32-bit x86) | Red Hat Enterprise Linux(R) Server 6 (32-bit x86)
Linux Server 6 (64-bit x86_64) | Red Hat Enterprise Linux(R) Server 6 (64-bit x86_64)
Linux Server 7 (64-bit x86_64) | Red Hat Enterprise Linux(R) Server 7 (64-bit x86_64)
Solaris(SPARC) | Solaris 9(SPARC)
Solaris 10(SPARC)
XMAP3 | XMAP3/Enterprise Edition Run Time System Version 4
XMAP3/Enterprise Edition Version 4
XMAP3/NET Run Time System Version 4
XMAP3/NET Version 4
XMAP3/REPORT3 Run Time System Version 4
XMAP3/REPORT3 Version 4
XMAP3/Web Version 4
XMAP3 Server
XMAP3 Developer Version 5
XMAP3 Client Runtime Version 5

XMAP3の製品を区別する必要がある場合は，それぞれの製品名称を表記しています。

日立COBOL2002のことを日立COBOL2002，または単にCOBOL2002と表記しています。

日立COBOL85のことを日立COBOL85，または単にCOBOL85と表記しています。また，プラットフォームを明確にする必要がある場合は，「PC COBOL85」「VOS3 COBOL85」のように表記しています。

特に断り書きがない場合，プログラム定義，関数定義，およびメソッド定義を総称して「プログラム」と表記しています。

リストのヘッダ部に表示されるCOBOL2002の識別記号を次のように表記しています。識別記号以外については，「付録C.2　リストの見方」を参照してください。

識別記号（ｃ） | 内容
Fと表示された場合 | COBOL2002の稼働プラットフォームがHP-UX(IPF)であることを示します。
Hと表示された場合 | COBOL2002の稼働プラットフォームがHP-UX(IPF64)であることを示します。
Aと表示された場合 | COBOL2002の稼働プラットフォームがAIX(32)であることを示します。
Bと表示された場合 | COBOL2002の稼働プラットフォームがAIX(64)であることを示します。
Jと表示された場合 | COBOL2002の稼働プラットフォームがLinux(x86)であることを示します。
Kと表示された場合 | COBOL2002の稼働プラットフォームがLinux(x64)であることを示します。
Lと表示された場合 | COBOL2002の稼働プラットフォームがLinux(IPF64)であることを示します。
Sと表示された場合 | COBOL2002の稼働プラットフォームがSolaris(SPARC)であることを示します。

コンパイラオプションの説明では，次の表記を使用します。

「XXXオプション」，または単に「XXX」とオプション名が表記されている場合

XXXオプションについて，サブオプションの組み合わせを含む，すべての場合を意味します。

「XXX,YYYオプション」，または単に「XXX,YYY」とサブオプションを含めたオプション名が表記されている場合

XXX,YYYオプションだけの場合を意味します。

「XXXコンパイラオプション」と表記されている場合

リンカオプションなど，ほかのオプションと明確に区別する必要がある場合を意味します。

（例1）

「-Compileオプション」または「-Compile」と記載している場合，-Compileオプションのサブオプションの組み合わせすべて（-Compile,CheckOnly／-Compile,NoLink）を意味します。

（例2）

「-Compile,CheckOnlyオプション」または「-Compile,CheckOnly」と記載している場合，-Compile,CheckOnlyだけを意味します。

付録J.3　英略語

このマニュアルで使用する英略語を次に示します。

英略語 | 英字での表記
CGI | Common Gateway Interface
CSV | Comma Separated Values
DBMS | Database Management System
HTML | Hyper Text Markup Language
ISAM | Index Sequential Access Method file
ODBC | Open Database Connectivity
PC | Personal Computer
RDB | Relational Database

付録J.4　KB（キロバイト）などの単位表記について

1KB（キロバイト），1MB（メガバイト），1GB（ギガバイト），1TB（テラバイト）はそれぞれ1,024バイト，1,024²バイト，1,024³バイト，1,024⁴バイトです。

付録K　用語解説

（記号）

-Mainオプションが指定されたプログラム

アプリケーションの主プログラム（main関数を持つプログラム）となるCOBOLプログラムのこと。COBOL2002では，-Main,Systemまたは-Main,V3オプションを指定してコンパイルすると，-Mainオプションが指定されたプログラムを作成できる。

（英字）

BASEクラス（BASE class）

COBOL2002で使用できる標準クラス。BASEクラスには，オブジェクトの生成や初期化などのメソッドが定義されている。BASEクラスのサブクラスならば，どのクラスでもBASEクラスの機能が利用できる。

BOM（バイトオーダマーク）

ファイルの先頭に付加された，Unicodeの表現形式を表す情報。

COBOL2002では，テキスト編成ファイルに対してこの情報を付加する。本文中では，Unicodeシグニチャと表記する。

CGI（Common Gateway Interface）

Webサーバの機能を拡張するためのAPIのこと。CGIを使用すると，Webサーバとほかのプログラムを連携させてWebクライアントに複雑なサービスを使用できる。

CSV編成ファイル

CSV（Comma Separated Value）形式でデータが記述されたファイルのこと。表計算プログラムファイルともいう。

CSV形式とは，表計算プログラムやリレーショナルデータベースでデータを扱えるテキストデータの形式をいう。データの区切りをコンマ（,），レコードの区切りを改行で表す。レコードは可変長形式になる。コンマで区切られた個々のデータは，セルと呼ばれる。

HTML（Hyper Text Markup Language）

インターネット経由で閲覧できるWebページを作成するための言語。テキストファイル中にタグと呼ばれる制御文字を埋め込むと，文字書式の設定や画像の埋め込み，ほかのページへのリンクなどを表現できる。

IVS（Ideographic Variation Sequence/Selector）

漢字を表すUnicodeの直後にVariation Selectorと呼ばれるコードを付加し，漢字の「異体字」を表現する方法のこと。

COBOL2002では，用途がDISPLAYおよびNATIONALの項目で使用する。

SELF

メッセージの受け手のオブジェクトを参照するための名前のこと。SELFが参照するオブジェクトをSELFオブジェクトという。メソッド中で使用されるSELFは，そのメソッドの呼び起こし対象のオブジェクト自身のことを表す。

SUPER

SELFと同様に，メッセージの受け手のオブジェクトを参照するための名前のこと。SUPERは，INHERITS句が指定されたクラスのメソッド実装定義中だけで使用できる。SUPERが参照するオブジェクトは，SELFが参照するオブジェクトだが，メソッドの検索方法がSELFの場合と異なる。メソッド実装定義中にSUPERを指定すると，そのメソッド実装定義が含まれるクラスのスーパクラスを起点に，メソッドが検索される。

TDコマンド

テストデバッグで使用するコマンド。

UCS-2（Universal multi-octet Character Set 2）

符号化文字集合の一つの形式。1文字を2バイトで表現する。

COBOL2002では，用途がDISPLAYおよびNATIONALの項目でサポートする。

UCS-4（Universal multi-octet Character Set 4）

符号化文字集合の一つの形式。1文字を4バイトで表現する。

COBOL2002では，用途がDISPLAYおよびNATIONALの項目でUCS-4の範囲をサポートする。

Unicode

1バイトでは表現できない文字セットを含めあらゆる文字セットをサポートした文字コード。代表的な符号化文字集合としてUCS-2，UCS-4がある。代表的なエンコーディングスキーマとしてUTF-8，UTF-16がある。

COBOL2002では，UCS-4の範囲（UCS-2の範囲を含む）をサポートする。

本文中では，符号化文字集合，およびエンコーディングスキーマを文字コードと表記する。

Unicodeシグニチャ

Unicodeの表現形式（UTF-16LE／UTF-16BE／UTF-8），またはそれを識別するための情報。

UTF-16(16-bit UCS Transformation Format)

エンコーディングスキーマの一つの形式。1つのコード単位を2バイトとし，1文字を1コード単位（2バイト），または2コード単位（4バイト）で表現する。UTF-16では2バイトのコード単位の1バイト目を先に書くビッグエンディアン形式（UTF-16BE）と1バイト目を後に書くリトルエンディアン形式（UTF-16LE）がある。

COBOL2002では，用途がNATIONALの項目でUCS-4の範囲（UCS-2の範囲を含む）をサポートする。

UTF-8（8-bit UCS Transformation Format）

エンコーディングスキーマの一つの形式。ASCII文字を1バイト，日本語文字を3～8バイト，半角かたかなを3バイトで表現する。COBOL2002では，用途がDISPLAYの項目で使用する。

（ア行）

アプリケーションの主プログラム

main関数を持つプログラムのこと。

COBOL2002では，-Main,Systemまたは-Main,V3オプションを指定してコンパイルすると，アプリケーションの主プログラムとなるCOBOLプログラムを作成できる。また，他言語で作成したアプリケーションの主プログラムから，COBOLプログラムを呼び出して利用することもできる。

入れ子のプログラム

原始プログラムが入れ子構造になっている場合の，内側のプログラムのこと。内側のプログラム，または内部プログラムともいう。

インスタンスオブジェクト（instance object）

あるクラスに属するオブジェクトのこと。「BASEクラス」のファクトリオブジェクトのメソッド「NEWクラス」の呼び起こしによって生成され，実行単位の終了か，ガーベジコレクションによって消滅させられる。

インスタンスデータ

インスタンスオブジェクトが独自に持つデータのこと。インスタンスメソッドによって操作される。

インスタンスメソッド

インスタンスデータを操作するためのメソッド。

インタフェース（interface）

メッセージの送り手から見えるオブジェクトの部分のこと。

例えば，現金支払い機を一つのオブジェクトとすると，「引き出し」「預け入れ」などのメニューがインタフェースに当たり，そのサービスを実現するための内部的な仕組みが実装に当たる。インタフェースは，メソッド原型の集合である。つまり，どのようなメソッド原型を持つかによって，オブジェクトが持つインタフェースの型が決まる。インタフェースは，クラスとは別に定義できる。

内側のプログラム

原始プログラムが入れ子構造になっている場合の，内側のプログラムのこと。入れ子のプログラム，または内部プログラムともいう。

オブジェクト（object）

データとそのデータを操作するメソッド（手続き）を一体化させたモジュール。オブジェクトは，ある特定の仕事を受け持ち，所定のメッセージに対してメソッドを動作させることで問題を処理する。オブジェクト指向のプログラムでは，オブジェクト同士がメッセージをやり取りすることによって，問題が処理される。

オブジェクト参照データ項目

オブジェクトを参照するためのデータ。オブジェクト参照は，データ項目に，USAGE IS OBJECT REFERENCE句を指定したもの。

オブジェクト指向（Object Orientation）

現実にある「もの」（オブジェクト）同士のやり取りをモデル化し，それをそのままコンピュータの世界でも実現しようとする考え方のこと。

オブジェクトの消滅（object destruction）

ファクトリオブジェクト，インスタンスオブジェクトを使用できない状態にすること。ファクトリオブジェクトは実行単位の終了によって消滅させられる。また，インスタンスオブジェクトは，実行単位の終了か，ガーベジコレクションによって自動的に消滅させられる。

オブジェクトの生成（object creation）

オブジェクトを使用できる状態にすること。オブジェクトはプログラムの実行時に生成される。COBOL2002のオブジェクト指向機能では，「BASEクラス」のファクトリオブジェクトのメソッド「NEWメソッド」を呼び起こすことでオブジェクトが生成される。

オブジェクトプロパティ（object property）

データ項目にPROPERTY句を書くか，METHOD-IDにPROPERTY指定を書くと，そのデータ項目は別のクラスやプログラムから直接参照できるようになる。このデータ項目は，オブジェクト中のほかの属性（INVOKE文による呼び起こしによってだけ参照される）に対して，特性（オブジェクトプロパティ）であると宣言される。

オプション

コンパイラやコマンドへの動作を指示するためのもの。

（カ行）

ガーベジコレクション（garbage collection）

実行単位のどこからも参照されなくなったオブジェクトを，COBOL2002のオブジェクト指向機能が検索し，自動的に消滅させる仕組みのこと。

外部スイッチ

ハードウェアまたはソフトウェアの装置であって，作成者によって定義，命名され，二者択一の状態のどちらかであることを示すために使用される。

外部プログラム

原始プログラムが入れ子構造になっている場合の，最も外側のプログラムのこと。このマニュアルでは，外部プログラムのことを最外側のプログラムと呼ぶ。

外部変数

C言語で，関数外で宣言され，どの関数からでも参照できる変数（グローバル変数）のこと。外部変数は，プログラム実行中に常に同じ場所に配置され，値を保持し続ける。

カウント情報

プログラム中の文の実行回数をカウントして数値で表したもの。

型（type）

ある集合の中の個々を，何によって識別するかを明示するもの。例えば，プログラムを構成する要素をデータごとに識別する場合は，データ型となる。

活性化されるプログラム

CALL文の対象となるプログラムで，実行時に呼び出し元プログラムと組み合わされて1個の実行単位となる。このマニュアルでは，活性化されるプログラムのことを呼び出し先のプログラムと呼ぶ。

活性化するプログラム

CALL文を実行してほかのプログラムを呼ぶプログラム。このマニュアルでは，活性化するプログラムのことを呼び出し元のプログラムと呼ぶ。

カバレージ情報

テストの進捗状況を数値で表したもので，C0メジャー情報，C1メジャー情報，S1メジャー情報，およびこれらの差分情報がある。

カプセル化（encapsulation）

データとそのデータを操作するメソッドから成るオブジェクトを，外部から隠ぺいすること。カプセル化によって個々のオブジェクトの独立性が高まり，データまたはプログラム間の相互依存性が減少するので，ほかのデータやモジュールへの影響を心配しないで，処理内容の変更や修正ができるようになる。

環境変数

コンパイラ環境へのオプションを変数として設定や実行可能ファイルおよびその実行環境へのオプションを変数として設定しておくもの。

既定義オブジェクト参照

COBOL2002のオブジェクト指向機能で，言語仕様としてあらかじめ定義された一意名のことで，SELF，SUPER，NULL，およびEXCEPTION-OBJECTがある。それぞれは決まったオブジェクトを参照する。

共通例外処理

COBOL2002で新しく追加された新機能の例外処理のこと。

クラス（class）

ある共通の性質を持つオブジェクトを一つのグループにまとめて定義したもの。クラスでは，それに属するオブジェクトのデータおよびメソッドを定義することで，そのクラスに属するオブジェクトの型を規定する。

継承（inheritance）

スーパクラスから，その性質（メソッド）をサブクラスが受け継ぐ仕組みのこと。COBOL2002のオブジェクト指向機能では，INHERITS句を指定することでスーパクラスから，その性質を継承できる。一つのクラスの性質を継承することを単純継承という。これに対して，複数のスーパクラスの性質を継承することを多重継承という。また，多重継承の結果，同じクラスを重複して継承することをダイヤモンド継承という。

コンパイル

原始プログラムを翻訳すること。

COBOLプログラムのコンパイルは，ccbl2002コマンドで実行する。

（サ行）

最外側のプログラム

原始プログラムが入れ子構造になっている場合の，最も外側のプログラムのこと。外部プログラムともいう。

サブクラス（subclass）

クラスの階層関係の中で，継承する側のクラスのこと。

サロゲート

UTF-16の拡張で，2つのコード単位（4バイト）で1文字を表す機能。この2つのコード単位の組み合わせのことをサロゲートペアと呼ぶ。

COBOL2002では，用途がNATIONALの項目で使用する。

シグナル

ハードウェア，およびソフトウェアで発生する割り込みのこと。

実行可能プログラム

呼び出し元プログラムと呼び出し先プログラムをコンパイル，リンクし，一つの実行できるプログラムにしたもの。

実行時要素

プログラム定義，メソッド定義，および関数定義の総称。このマニュアルでは，実行時要素のことをプログラムと呼ぶ。

スーパクラス（superclass）

クラスの階層関係の中で，継承される側のクラスのこと。

制御プログラム

このシステムのOS（オペレーティングシステム）のことを指す。

（タ行）

ダイヤモンド継承（repeated inheritance，diamond inheritance）

多重継承の結果，同じクラスを直接的または間接的に重複して継承すること。

多重継承（multiple inheritance）

複数のクラスをスーパクラスとして継承すること。

単純継承（simple inheritance）

一つのクラスをスーパクラスとして継承すること。

定数長拡張機能

英数字定数の定数長を拡張できるようにする機能。英数字定数の長さの限界値を160文字（バイト）から8,191文字（バイト）に拡張できる。

定数長を拡張するプログラムのコンパイル時には，-LiteralExtend,Alnumコンパイラオプションを指定する。

適合（conformance）

メッセージの送り先のオブジェクトが適切かどうかを調べるための概念。適合は，オブジェクトが持つインタフェースに基づいてチェックされる。あるインタフェースBを持つオブジェクトに対するメッセージが，別のインタフェースAを持つオブジェクトでも対応できる場合，インタフェースAはインタフェースBに適合しているという。インタフェースAがインタフェースBに適合する場合，インタフェースBに適合するインタフェース型のオブジェクトが使用できれば，インタフェースAに適合するインタフェース型のオブジェクトも使用できる。適合は，コンパイル時または実行時にチェックされる。これによって，オブジェクトの誤用が避けられるだけでなく，同じメッセージを異なるクラスのオブジェクトに送れるようになる。

動的長基本項目（dynamic-length elementary item）

実行時に長さを変更できるデータ項目（英数字項目または日本語項目）のこと。DYNAMIC LENGTH句で定義する。動的長基本項目に新しい値が格納されると，項目の長さは自動的に調整される。

動的長基本項目は格納する値によって長さが変わる。想定以上にデータ項目の長さが長くなることを防ぐため，データ項目の最大長はLIMITで指定できる。

登録集原文

COBOLプログラム中でよく利用される標準化した手続き，ファイル記述，レコード記述，または完全な一つのプログラムなどを，コンパイルするプログラムとは別のファイルに登録したもの。

（ナ行）

内部プログラム

原始プログラムが入れ子構造になっている場合の，内側のプログラムのこと。このマニュアルでは，内部プログラムのことを内側のプログラム，または入れ子のプログラムと呼ぶ。

日本語集団項目（national group item）

用途がNATIONALで字類および項類が日本語となる集団項目。日本語集団項目となるデータ項目には，明示的にまたは暗黙的にGROUP-USAGE IS NATIONALの指定が必要。

日本語集団項目の従属項目は，日本語項目，日本語編集項目および日本語集団項目だけとなる。

（ハ行）

バイトオーダ

2バイト以上のデータの記録を行なう順序のこと。例えば，0x1234のデータを0x1234のように最上位のバイトから順番に記録する方式をビッグエンディアン，0x3412のように最下位のバイトから順番に記録する方式をリトルエンディアンという。2バイトのUTF-16は，バイトオーダを意識する。

標準クラス

COBOL2002のオブジェクト指向機能で，言語仕様としてあらかじめ定義されたクラスのこと。BASEクラスがある。

表要素

表中の繰り返す項目の組に属する1個のデータ項目。

ファクトリオブジェクト

一つのクラス中のすべてのオブジェクトが共有するデータ（ファクトリデータ）とそれを操作するためのメソッド（ファクトリメソッド）から成るオブジェクト。ファクトリオブジェクトは，実行単位の開始によって生成され，実行単位が終了すると消滅させられる。

ファクトリデータ

一つのクラス中のすべてのオブジェクトが共有するデータのこと。ファクトリメソッドによって操作される。

ファクトリメソッド

ファクトリデータを操作するためのメソッド。

プログラム

プログラム定義，メソッド定義，および関数定義の総称。実行時要素ともいう。

ポリモルフィズム（polymorphism）

一般的には，ある一つの指示に対して異なるさまざまな動作をとれる特徴を指す。オブジェクト指向では，同じメッセージでも受け取るオブジェクトのクラスが異なれば，動作が異なる特徴のことをいう。

（マ行）

マルチスレッド

プログラム内の仕事を，スレッドという単位に分けて実行する方式。複数のプログラムを並列に実行できる。

見た目幅

Unicode機能の組み込み関数で使用する，文字の見た目の幅。半角文字の幅は1，全角文字の幅は2として扱う。

Unicode機能の組み込み関数で，文字を見た目幅で数える場合に使用する。

メインフレーム

大規模な業務システムなどに用いられる汎用大型コンピュータ。

メソッド（method）

オブジェクトで使用できるインタフェース（メソッド原型という）とそのサービスの実装を定義した手続きのこと。オブジェクト間のやり取りは，すべてメソッドを通して行われる。メソッドには，ファクトリメソッドおよびインスタンスメソッドの2種類がある。

メソッド原型（method prototype）

メソッドを定義する際，メソッドで使用できるインタフェースを定義した部分。メソッド原型は，メソッド名と，パラメタおよび戻り値から成る。

メソッドの呼び起こし（method invocation）

オブジェクトに対してメソッドを呼び起こすこと。COBOL2002では，INVOKE文によってメソッドを呼び起こす。

メッセージ（message）

オブジェクトに対して送られる要求のこと。メッセージは，「受け手」「メソッド」「パラメタ」から成る。COBOL2002のオブジェクト指向機能では，INVOKE文によってメッセージをオブジェクトに送り，適切なメソッドを呼び起こす。

（ヤ行）

呼び出し先プログラム

CALL文の対象となるプログラムで，実行時に呼び出し元プログラムと組み合わされて1個の実行単位となる。活性化されるプログラムともいう。

呼び出し元プログラム

CALL文を実行してほかのプログラムを呼ぶプログラム。活性化するプログラムともいう。

（ラ行）

リポジトリ段落（repository）

構成節中に指定する。リポジトリ段落に指定したクラス名，インタフェース名，および利用者定義関数名は，そのリポジトリ段落を含んでいるプログラム定義，クラス定義，インタフェース定義，または関数定義中で有効となる。

リポジトリファイル（repository file）

クラス定義，インタフェース定義，および関数定義の定義情報を格納するファイル。コンパイル対象のソースファイルごとに生成する。

例外処理

手続き文の実行中に発生したエラーに対して処理する機能のこと。

索引

[記号]
[数字]
[Ａ][Ｂ][Ｃ][Ｄ][Ｅ][Ｆ][Ｇ][Ｈ][Ｉ][Ｊ][Ｌ][Ｍ][Ｎ][Ｏ][Ｐ][Ｑ][Ｒ][Ｓ][Ｔ][Ｕ][Ｖ][Ｗ][Ｘ]
[ア行][カ行][サ行][タ行][ナ行][ハ行][マ行][ヤ行][ラ行]

(記号)

.a〔ライブラリファイル〕

.cbf

.cbf

.cbl

.CBL

.cbl

.CBL

.cbl〔COBOL UAP引数定義ファイル〕

.cbl〔COBOLソースファイル〕

.cbl〔XMLアクセス用ステータス定義〕

.cbl〔XMLアクセス用データ定義〕

.cbl〔XMLアクセスルーチン〕

.cbp

.cbp〔プログラム情報ファイル〕

.cbs

.cbs〔擬似プログラム用プログラム情報ファイル〕

.class〔Cosminexus上Java実行ファイル〕

.cll〔カバレージ情報リストファイル〕

.cnl〔カウント情報リストファイル〕

.cno〔実行結果出力ファイル（カウント情報の表示）〕

.cob

.cob

.cob

.cvo〔実行結果出力ファイル（カバレージ情報の蓄積）〕

.cxc〔カタログファイル〕

.cxd〔XMLデータ定義ファイル〕

.DAT〔データレコードファイル〕

.DEF〔キー定義ファイル〕

.dtd〔XML文書型定義ファイル〕

.env〔CGI環境ファイル〕

.htm〔HTMLファイル〕

.html〔HTMLファイル〕

.java〔COBOLアクセス用Bean（Javaソースファイル）〕

.java〔EJB関連Javaソースファイル〕

.K01〔主キーファイル〕

.K02～.K99〔副キーファイル〕

.lst

.lst〔コンパイルリストファイル〕

.o

.o〔オブジェクトファイル〕

.ocb

.ocb

.ocb

.ocf

.ocf

.ocf

.rep

.rep〔リポジトリファイル〕

.sl〔共用ライブラリファイル〕

.so〔共用ライブラリファイル〕

.tdi〔TDコマンド格納ファイル（中断点情報）〕

.tdo〔実行結果出力ファイル（テストデバッグ）〕

.tds〔TDコマンド格納ファイル（中断点情報）ファイル（シミュレーション情報）〕

.trc

.trc〔トレース情報ファイル〕

.xml〔XML文書型定義ファイル〕

.xml〔デプロイ情報（DDファイル）〕

-BigEndian

-BigEndian,Bin

-Bin1Byte

-BinExtend

-Cblctr

-CBLVALUE

-CmAster

-CmDol

-Comp5

-Compati85

-CompatiV3

-CompatiV3

-Compile

-CVInf

-CVInf

-DebugCompati

-DebugCompati

-DebugData

-DebugData

-DebugInf

-DebugInf

-DebugInf,Trace

-DebugLine

-DebugLine

-DebugRange

-DebugRange

-Define

-Defineオプション

-Details

-DigitsTrunc

-DoubleQuote

-DynamicLink

-EquivRule

-ErrSup

-EucPosition

-ExternRef

-H8Switch

-Help

-Help

-IgnoreAPPLY,FILESHARE

-IgnoreLCC

-International

-IntResult,DecFloat40

-JPN

-Link

-LiteralExtend

-LowerAsUpper

-Lx64ConventionCheck

-Main

-Main,System

-Main,V3

-MainNotCBL

-MainNotCBL

-MainNotCBL

-MainNotCBL

-Mainオプションが指定されたプログラム

-MaxDigits38

-MinusZero

-MultiThread

-MultiThread

-NumAccept

-NumAccept

-NumAccept

-NumCsv

-OldForm

-Optimize

-Optimize,0

-Optimize,1

-Optimize,2

-Optimize,3

-OutputFile

-PICオプション

-PortabilityCheck

-Profile

-RDBTran

-RDBTranオプションの指定とCOMMIT／ROLLBACK文の扱い

-Repository

-Repository,Gen

-Repository,Gen

-Repository,Sup

-RepositoryCheck

-RepositoryCheck

-SimIdent

-SimMain

-SimSub

-SpaceAsZero

-SQL

-SQLDisp

-SrcList

-SrcList,CopyAll

-SrcList,CopySup

-SrcList,NoCopy

-SrcList,OutputAll

-SrcList,xxxxx,DataLoc

-SrcList,xxxxx,NoFalsePath

-Std2002

-Std85

-StdMIA

-StdVersion

-Switch

-TDInf

-TDInf

-TDInf

-TestCmd

-TruncCheck

-UniEndian

-UniEndianオプション指定時の注意事項

-UniEndianオプションと実行時環境変数CBLUNIENDIANの関係

-UniObjGen

-UniObjGenオプション指定時の注意事項

-UniObjGenオプションと-UniEndianオプションの関係

-UniObjGenオプションと実行時環境変数CBLLANGの関係

-UscoreStart

-V3ConvtName

-V3ConvtNameオプションを指定したときの原文名定数の扱い

-V3Rec

-V3RecEased

-V3RecFCSpace

-V3Spec

-VOSCBL

-XMAP

-XMAP,LinePrint

$%ELSE%$

$%END-REPEAT%$

$%IF%$文

$%REPEAT%$文

$%変数名%$

(数字)

10進項目の2進項目化

16進英数字定数

1バイトの2進項目

40けた10進浮動小数点形式

64bitアプリケーション作成時の注意事項

64bitアプリケーションの作成

9xの入出力状態

(英字)

(Ａ)

ADD文

AND

ANSI（アメリカ規格）

APIの合致レベル

APPLY FORMS-OVERLAY句

APPLY FORMS-OVERLAY句

argc

argv

AS

ASCII

ASSIGN句

AUTH_TYPE

(Ｂ)

BASEクラス

BEGIN DECLARE SECTION

BOM

BY CONTENT

BY REFERENCE

BY VALUE

(Ｃ)

CALL

CALL定数

CALL定数

CALL文

CALL文

CALL文で直接システム関数を呼び出し

CANCEL文

CANCEL文実行後のプログラムの状態

CBL_FLSRVDUMP

CBL_FLSRVDUMP

CBL_RDBCOMMIT

CBL_RDBSYS（HP-UX(IPF)，HP-UX(IPF64)，AIX(32)，AIX(64)，Linux(IPF64)，Solaris(SPARC)で有効）

CBL_STOPNOADV

CBL_STOPNOADV

CBL_SYSERR

CBL_SYSERR

CBL_SYSIN

CBL_SYSIN

CBL_SYSOUT

CBL_SYSPUNCH

CBL_SYSSTD

CBL_SYSSTD

CBL_外部装置名

CBL-CTR特殊レジスタ

cbl2kmf

cbl2krep

CBLABN

CBLABNLST

CBLABNLST

CBLABNLST

CBLADDPAIR

CBLARGC

CBLARGV

CBLCC

CBLCGIERR

CBLCGIERR

CBLCGIINIT

CBLCGIINITSIZE

CBLCGITRACE

CBLCLOSE

CBLCLOSE

CBLCONVERTTEXT

CBLCOPT

CBLCOPT2002

CBLCOPT2002

CBLCORE

CBLCREATELIST

CBLCSVCHAR

CBLCSVCHAR

CBLCSVINIT

CBLCSVINIT

CBLD_ファイル名

CBLDATADUMP

CBLDATADUMPFILE

CBLDATADUMPFILE

CBLDATE

CBLDATE

CBLDAY

CBLDAY

CBLDDUMP

CBLDDUMP

CBLDELETE

CBLDELETE

CBLDELETEPAIR

CBLDESTROYLIST

CBLDISPLAYTEXT

CBLEND

CBLENDREPEAT

CBLENDREPEAT

CBLENDサービスルーチンによる終了

CBLENVMAX

CBLERRMAX

CBLEXCEPT

CBLEXVALUE

CBLEXVALUE

CBLFILLTEMPLATE

CBLFINDNEXTPAIR

CBLFINDPAIR

CBLFIX

CBLFIX

CBLFIX

CBLFREE

CBLFREE

CBLFREE

CBLFSYNC

CBLFSYNC

CBLFSYNC

CBLGCINTERVAL

CBLGCINTERVAL

CBLGCSTART

CBLGCSTART

CBLGETENV

CBLGETENV

CBLGETPAIR

CBLGETPAIRNEXT

CBLHTMLBEGIN

CBLHTMLEND

cblhtmtr

CBLINBUFSIZE

CBLINITVALUE

CBLIOMESSAGE

CBLISAMDL

CBLISAMFSYNC

CBLISAMFSYNC

CBLLANG

CBLLARGEFILE

CBLLIB

CBLLIB

CBLLISTCOUNT

CBLLPATH

CBLLPATH

CBLLSLIB

CBLLSLIB

CBLLTAG

CBLLTAG

CBLMTEND

CBLNCNV

CBLNCNVサービスルーチン〔Unicode機能〕

CBLNO_LIBFREE

CBLOPEN

CBLOPEN

CBLOUTBUFSIZE

CBLPGMSEARCHTRC

CBLPGMSEARCHTRC_SIZE

CBLPIDIR

CBLPRELOAD

CBLPRINTENV

CBLPRINTENV

CBLPRINTLIST

CBLPRMCHKW

CBLPRNT_xxx

CBLPRNT_xxx

CBLPRNTID

CBLPRNTID

CBLRDBDATAERR

CBLRDBROWVALCONSTRUCTOR

CBLREAD

CBLREAD

CBLREP

CBLREP

CBLREWRITE

CBLREWRITE

CBLSENDERROR

CBLSORTSIZE

CBLSORTSIZE

CBLSORTWORK

CBLSORTWORK

CBLSQLCOMMOD

CBLSQLCOMMOD

CBLSQLCURUSE

CBLSQLDYNAMIC

CBLSQLERROR

CBLSQLLOGINTIMEOUT

CBLSQLQUERYTIMEOUT

CBLSQLROWCOUNT

CBLSQLSUPPRESSMSG

CBLSQLWMSG

CBLSRCENCODING

CBLSTART

CBLSTART

CBLSTDIOLVL

CBLSTMCLOSE

CBLSTMCREATE

CBLSTMFSYNC

CBLSTMLARGEFILE

CBLSTMOPEN

CBLSTMREAD

CBLSTMWRITE

CBLSYSREP

CBLTAB

CBLTAB

CBLTDDISPLAY

CBLTDEXEC

CBLTERM_xxx

CBLTERM_xxx

CBLTERMID

CBLTERMID

CBLTERMSHAR

CBLTERMSHAR

CBLTEXTSUPPRESSBOM

CBLTEXTWRITESPACE

CBLUBIT

CBLUNIENDIAN

CBLUNLOCK

CBLUNLOCK

CBLUPSI

CBLUPSI

CBLV3UNICODE

CBLVALUE

CBLVALUE

CBLWDISK

CBLWDISK

CBLWRITE

CBLWRITE

CBLX_外部装置名

CBLX_外部装置名

CBLXMAPERROR

ccbl2002コマンド

ccbl2002コマンド

ccbl2002コマンドからのHTMLファイルの変換

ccbl2002コマンドに指定するオプション列

ccbl2002コマンドのヘルプ

ccblコマンド

ccblコマンド

ccblコマンドに指定するオプション列

CGI

CGI

CGI環境ファイル

CGI環境ファイル

CGI環境変数

CGI環境変数

CGIプログラム

CGIプログラム作成支援機能

CGIプログラムのコンパイル，およびリンク方法

CGIプログラムの作成

CGIプログラムの作成を支援するサービスルーチン

CGIプログラムの種類

CGIプログラムのデバッグ

CGIプログラムを作成する場合の注意点

CGIヘッダ

CGIリスト

CHARACTER TYPE句

CLOSE

COBOL2002 Net Server Runtime

COBOL2002 Net Server Runtime(64)

COBOL2002 Net Server Suite

COBOL2002 Net Server Suite(64)

COBOL2002仕様

COBOL2002で追加された機能

COBOL2002でのオブジェクト指向機能

COBOL2002の概要

COBOL2002の機能

COBOL2002の構成

COBOL85形式のコンパイラオプション

COBOL85とCOBOL2002のコンパイラオプションの対応

COBOL UAP引数定義ファイル

COBOLアクセス用Bean

COBOLエラー詳細情報

COBOLからCを呼ぶときの規則

COBOL原始プログラムのコンパイル

COBOL原始プログラムの正書法

COBOL実行環境の終了方法

COBOL実行単位の終了

COBOL主プログラム

COBOL主プログラムと副プログラム

COBOLソースの作成

COBOLソースファイル

COBOLソースファイル

COBOLで使用するファイル

COBOL入出力サービスルーチン

COBOL入出力サービスルーチンが対応している機能

COBOL入出力サービスルーチンで出力されるエラーメッセージ番号

COBOL入出力サービスルーチンでのディスク書き込み保証

COBOL入出力サービスルーチンでのラージファイル入出力機能

COBOL入出力サービスルーチンのインタフェース

COBOL入出力サービスルーチンの使用例

COBOL入出力サービスルーチンの制限事項

COBOL入出力サービスルーチンを使用するときの注意事項

COBOLの概要

COBOLの実行環境を終了させる

COBOLの実行単位

COBOLのデータ項目とCプログラムの型の対応

COBOLのデータ項目とCプログラムの型の対応

COBOLの特長

COBOL副プログラム

COBOLプログラムが使用するスタック領域

COBOLプログラムからCプログラムを呼び出す方法

COBOLプログラム間で値を返す場合の規則

COBOLログファイル出力機能

COLUMN句

COMMIT

COMMIT

COMMON

COMP-5

COMPUTE文

CONNECT

CONTENT_LENGTH

CONTENT_TYPE

CONTINUE文

COPY登録集

COPY文による登録集原文の取り込み

COPY文のREPLACING指定およびREPLACE文の作用対象

COPY文の指定形式

CORRESPONDING指定

Cosminexus上Java実行ファイル

Cosminexus連携機能

CRT STATUS句

CSVQUOTE

CSVTABSEPARATED

CSVTABSEPARATED

CSVWRITESPACE

CSVWRITESPACE

CSV編成ファイル

CSV編成ファイル

CSV編成ファイル

CSV編成ファイルに数値データとして有効な文字の種類

CSV編成ファイルのファイル編成とレコード形式

CからCOBOLを呼ぶときの規則

C言語との連携

CプログラムからCOBOLプログラムを呼び出す方法

Cプログラムの型とCOBOLでの宣言

(Ｄ)

DBMS

DCシミュレーション

DDファイル

DEALLOCATE PREPARE

DECLARE CURSOR

DEFINED条件

DEFINE指令

DELETE

DISCONNECT

DISPLAY文によるデータの出力

DIVIDE文

DML情報エリアの詳細

(Ｅ)

EBCDIC

EBCDIK

EC-ALL

EC-ALL

EC-ARGUMENT

EC-ARGUMENT-FUNCTION

EC-ARGUMENT-IMP

EC-BOUND

EC-BOUND-ODO

EC-BOUND-REF-MOD

EC-BOUND-SUBSCRIPT

EC-DATA

EC-DATA-PTR-NULL

EC-FLOW

EC-FLOW-GLOBAL-EXIT

EC-FLOW-GLOBAL-GOBACK

EC-FLOW-IMP

EC-FLOW-RELEASE

EC-FLOW-RETURN

EC-FLOW-USE

EC-I-O

EC-I-O-AT-END

EC-I-O-EOP

EC-I-O-EOP-OVERFLOW

EC-I-O-IMP

EC-I-O-INVALID-KEY

EC-I-O-LINAGE

EC-I-O-LOGIC-ERROR

EC-I-O-PERMANENT-ERROR

EC-OO

EC-OO-CONFORMANCE

EC-OO-EXCEPTION

EC-OO-IMP

EC-OO-METHOD

EC-OO-NULL

EC-OO-RESOURCE

EC-OO-UNIVERSAL

EC-OVERFLOW

EC-OVERFLOW-STRING

EC-OVERFLOW-UNSTRING

EC-PROGRAM

EC-PROGRAM-ARG-MISMATCH

EC-PROGRAM-CANCEL-ACTIVE

EC-PROGRAM-IMP

EC-PROGRAM-NOT-FOUND

EC-PROGRAM-RECURSIVE-CALL

EC-PROGRAM-RESOURCES

EC-RAISING

EC-RAISING-NOT-SPECIFIED

EC-RANGE

EC-RANGE-INSPECT-SIZE

EC-RANGE-INVALID

EC-RANGE-PERFORM-VARYING

EC-RANGE-SEARCH-INDEX

EC-RANGE-SEARCH-NO-MATCH

EC-SIZE

EC-SIZE-EXPONENTIATION

EC-SIZE-OVERFLOW

EC-SIZE-TRUNCATION

EC-SIZE-UNDERFLOW

EC-SIZE-ZERO-DIVIDE

EC-SORT-MERGE

EC-SORT-MERGE-IMP

EC-SORT-MERGE-RELEASE

EC-SORT-MERGE-RETURN

EC-USER

EC-USER-

EC-USER-（ユーザ定義例外名）

EJB関連Javaソースファイル

END DECLARE SECTION

ERRHIGH

ERRLOW

EUC環境でCOBOLプログラムを実行した場合

EVALUATE指令

EVALUATE指令の例

EVALUATE文

EXCEPTION-FILE関数

EXCEPTION-LOCATION関数

EXCEPTION-OBJECT

EXCEPTION-STATEMENT関数

EXCEPTION-STATUS関数

EXECUTE

EXECUTE IMMEDIATE

EXIT文

EXIT文，GOBACK文のRAISING指定による例外の伝播

EXTERNAL句

EXTERNAL句

EXTERNAL句を用いたデータの共用

EXTERNAL属性チェック

(Ｆ)

FETCH

FILE STATUS句

FLAG-85指令

FSYNC

FSYNC

(Ｇ)

GATEWAY_INTERFACE

GET PROPERTY

GETプロパティメソッド

GLOBAL句

GOBACK文

GOBACK文による終了

GO TO文

(Ｈ)

HiRDBによる索引編成ファイル

HTML

HTML拡張言語

HTML拡張言語の文法

HTML拡張言語を使用するときの注意事項

HTMLテンプレート

HTMLテンプレート

HTMLテンプレート機能

HTMLテンプレート機能

HTMLトランスレータ

HTMLトランスレータ

HTMLトランスレータの予約語

HTMLファイル

HTMLファイルの変換

HTMLファイルをCOBOLソースファイルに変換する方法

HTTP_ACCEPT

HTTP_COOKIE

HTTP_USER_AGENT

(Ｉ)

IF指令

IF指令の使用例

IF文

IMPLEMENTS句

INHERITS句

INITIALIZE文

INITIAL句

INSERT

INSPECT文

INTERFACE-ID

ISAM

ISAM

ISAMDL

ISAMPREV

ISAMユティリティ

ISO（国際規格）

IVS

(Ｊ)

Javaソースファイル

JCPOPUP

JIS（日本工業規格）

JIS仕様

JXBSAID

(Ｌ)

LARGEFILE

LD_LIBRARY_PATH

LINE句

Linux(x86) COBOL2002，Linux(x64) COBOL2002でのUTF-8ロケールの対応

LISTING指令

LISTING指令

(Ｍ)

makefile生成機能

makefile生成機能の概要

makefileの生成方法

MIA仕様

MIAバージョン1.3仕様を範囲外チェック

MIAバージョン1.4仕様の範囲外チェック

MOVE文

MULTIPLY文

(Ｎ)

NEWメソッド

NOCSVQUOTE

NOCSVQUOTE

NOCSVTABSEPARATED

NOCSVWRITESPACE

NOFSYNC

NOFSYNC

NOINBUFSIZE

NOISAMDL

NOISAMPREV

NOLARGEFILE

NOOUTBUFSIZE

NOSAMAADV

NOSAMENDIO

NOTEXTSUPPRESSBOM

NOTEXTWRITESPACE

(Ｏ)

ODBC SQLデータ型に対応したCOBOLのデータ記述

ODBCインタフェース

ODBCインタフェース

ODBCインタフェース機能

ODBCインタフェース機能

ODBCインタフェース機能

ODBCインタフェース機能が動作する環境

ODBCドライバ

ODBCの合致レベル

ODBCメッセージ

OPEN

OpenTP1

OPEN文〔CSV編成ファイル〕

OR

OUTHIGH

OUTLOW

(Ｐ)

PAGE指令

PAGE指令

PATH_INFO

PATH_TRANSLATED

PDCANCEL

PDSWAITTIME

PERFORM文

PERFORM文の実行範囲

PREPARE

PROPAGATE指令

PROPAGATE指令

PROPERTY句

pthread_self

(Ｑ)

QUERY_STRING

(Ｒ)

RAISE文

RAISING LAST指定

RAISING指定

RAISING指定による例外オブジェクトの伝播

RDBの列のデータ型とCOBOLのデータ記述

READ INTO

READ文

READ文〔CSV編成ファイル〕

READ文〔テキスト編成ファイル〕

RECURSIVE句

RELEASE文

REMOTE_ADDR

REMOTE_HOST

REMOTE_IDENT

REMOTE_USER

REPEAT.TERMINATOR

REQUEST_METHOD

RESUME文

RETURN-CODE特殊レジスタ

RETURN-CODE特殊レジスタ

RETURNING

RETURN文

REWRITE文

REWRITE文〔テキスト編成ファイル〕

ROLLBACK

ROLLBACK

(Ｓ)

SAMAADV

SAME AS句

SAMENDIO

SCRIPT_NAME

SEARCH文

SELECT

SELECT句

SELF

SERVER_NAME

SERVER_PORT

SERVER_PROTOCOL

SERVER_SOFTWARE

SET CONNECTION

SET LAST EXCEPTION TO OFF

SET PROPERTY

SETプロパティメソッド

SET文

SET文

SET文

SORT

SORT-CORE-SIZE

SORT-FILE-SIZE

SORT-MESSAGE

SORT-MODE-SIZE

SORT-RETURN

SOURCE FORMAT指令

SOURCE FORMAT指令による正書法の切り替え

SQL

SQLCA

SQLCODE変数

SQLCODE変数

SQLCODE変数の値と意味

SQLSTATE

SQLエラーコード

SQL宣言節

SQLの合致レベル

SQL文

SQL文でエラーが発生した場合の対処方法

SQL文のエラー処理

SQL文の実行順序

SQL連絡領域SQLCA

stderr

stderr

stderr

stdin

stdin

stdin

stdout

stdout

stdout

STOP RUN文による終了

STOP文

STRING文

STRONG指定

SUBTRACT文

SUPER

SYMBOLIC TERMINAL句の指定

SYMBOLIC TERMINAL句の指定

(Ｔ)

TDコマンド

TDコマンド格納ファイル

TDコマンド格納ファイル（シミュレーション情報）

TDコマンド格納ファイル（中断点情報）

TEXTSUPPRESSBOM

TEXTWRITESPACE

TURN指令

TURN指令

TURN指令と対象の例外名

TURN指令と対象の例外名（EC-I-O例外名）

TURN指令によるチェック

TURN指令のチェックがON

TURN指令の有効範囲

TYPEDEF句

(Ｕ)

UCS-2

UCS-4

Unicode

Unicode機能

Unicode機能での制限事項

Unicode機能の概要

Unicode機能のサポート範囲

Unicode機能の詳細

Unicode機能の前提条件

Unicodeシグニチャ

Unicodeに対応していない機能

Unicodeに対応する機能

UNIX64 COBOL2002では使用できない機能

UNIX64 COBOL2002では使用できないサービスルーチン

UNSTRING文

UPDATE

UPSI-0

UPSI-1

UPSI-2

UPSI-3

UPSI-4

UPSI-5

UPSI-6

UPSI-7

USAGE句項目の指定

USE手続き

USE文

UTF-16

UTF-8

(Ｖ)

VALUE句のないデータ項目の初期値

(Ｗ)

WDISK

WDISK

Webシステム連携機能

WHENEVER

WITH DUPLICATES指定

WRITE FROM

WRITE文〔CSV編成ファイル〕

WRITE文〔テキスト編成ファイル〕

(Ｘ)

XDM/SD

XDM/SDプログラムのテスト方法の制限事項

XDMによるデータベース操作シミュレーション機能

XMAP3

XMLアクセス用ステータス定義

XMLアクセス用データ定義

XMLアクセスルーチン

XMLデータ定義ファイル

XML文書型定義ファイル

XML連携機能

(ア行)

(あ)

値渡し

あとに指定した方のオプションが有効となる場合

アドレスデータ項目を使った引数の受け取り

アプリケーションデバッグ機能

アプリケーションの主プログラム

アプリケーションの主プログラム

アプリケーションの主プログラム

暗黙的なプロパティメソッド

アンロードの抑止

(い)

異常終了

異常終了時要約情報リスト

異常終了時要約情報リスト

移植性の良いプログラムの作成

一意名指定のCALL文

一般規則

入れ子のプログラム

印刷サービス名称の指定

印刷制御付き

インスタンスオブジェクト

インスタンスオブジェクト

インスタンスオブジェクトの消滅

インスタンスオブジェクトの生成

インスタンス定義

インスタンスデータ

インスタンスメソッド

インスタンスメソッドの呼び起こし

インタフェース

インタフェース

インタフェース

インタフェースエリアの詳細

インタフェース定義

インタフェースとクラスの適合

インタフェースの実装

インタフェースの定義

インタフェースの利用

インタフェース部分だけを作成した翻訳単位のコンパイル

インタフェース領域の形式

インタフェース領域のダンプ出力

インタフェースを使ったオブジェクトの使用

インタプリット型CGIプログラム

(う)

受け取り側作用対象

内側のプログラム

内側のプログラム

埋め込みSQL宣言節

埋め込みSQL文

埋め込みSQL文を使ったCOBOLプログラムの作成

埋め込み変数

埋め込み例外宣言

上書き（WRITE）モード

(え)

英小文字

英字項目

英字項目

英数字項目

英数字項目

英数字定数の分離符

英数字編集項目

英数字編集項目

エラー発生後に検出した例外に対して例外チェックが無効な場合の動作

エラー表示画面

エラー表示画面

エラーメッセージの形式〔リポジトリ管理ツール〕

エラーメッセージの内容〔リポジトリ管理ツール〕

エラーリスト

エラーリスト

演算強さの軽減

演算の中間結果

(お)

送り出し側作用対象

同じオプションを重複して指定した場合の規則

オブジェクト

オブジェクト参照データ項目

オブジェクト参照の適合チェック

オブジェクト指向

オブジェクト指向

オブジェクト指向機能

オブジェクト指向機能

オブジェクト指向機能でのマルチスレッド対応

オブジェクト指向でのインタフェース

オブジェクト指向による継承

オブジェクト指向による適合

オブジェクト指向によるポリモルフィズム

オブジェクト指向の紹介

オブジェクトの構造

オブジェクトの消滅

オブジェクトの生成

オブジェクトビュー

オブジェクトファイル

オブジェクトファイル

オブジェクトプロパティ

オブジェクトプロパティ

オプション

オプション〔コンパイラ〕

オプション概略の一覧

オプション指定項

オプションの打ち消し指定

オプションを指定することによって，仮定されるオプション

オプションを指定すると，ほかのオプションが無効となる場合

オンラインマニュアル

オンラインマニュアルの種類

(カ行)

(か)

カーソルオプション

カーソル宣言

ガーベジコレクション

ガーベジコレクション

開発環境のコンポーネント

外部スイッチ

外部スイッチ

外部スイッチ

外部スイッチの参照方法

外部スイッチの初期化

外部スイッチの変更

外部属性（EXTERNAL句）

外部属性を持つデータ項目の共用

外部プログラム

外部変数

外部リポジトリ

外部リポジトリに関連したコンパイルエラー発生時の対処方法

カウント情報

カウント情報リストファイル

書き換え（ERASE）モード

各実行単位の施錠形式

拡張コード文字

拡張子

拡張子規定なし

拡張子による検索順序

拡張子による正書法の指定

仮想端末の共用

仮想端末名

仮想端末名

仮想端末名の仮定値を指定する環境変数

仮想端末名の仮定値を指定する環境変数

仮想端末名を指定する環境変数

仮想端末名を指定する環境変数

型

カタログファイル

活性化されるプログラム

活性化するプログラム

活性状態

カバレージ

カバレージ情報

カバレージ情報

カバレージ情報リストファイル

カプセル化

カプセル化

可変長項目のあとに固定長項目

画面環境の設定

画面節（SCREEN SECTION）による画面機能

画面節（WINDOW SECTION）による画面機能

画面データの送受信先

画面に対する入出力

画面入出力機能

画面の座標指定

画面の種類と構成

画面の種類と構成

画面の定義

画面の表示モード

環境変数

環境変数

環境変数

環境変数

環境変数指定

環境変数の指定

環境変数の指定有無による結果の違い

環境変数の取り扱い

環境変数へのアクセス

関数定義

管理情報インタフェース領域

(き)

キー数

キー属性の指定

キー定義ファイル

キーの機能

キーの機能

キー比較条件

規格の互換性をチェックする翻訳指令

擬似プログラム用プログラム情報ファイル

擬似プログラム用プログラム情報ファイル

既定義オブジェクト参照

既定義オブジェクトを使用したメソッドの呼び起こし

起動ファイルの作成方法

基本機能〔Unicode機能〕

基本的な内部操作手続き文

旧形式のオプション

境界

行制御出力

共通式の削除

共通属性プログラム

共通例外処理

共通例外処理

共通例外処理

共通例外処理

共通例外処理に対応している機能

共通例外処理の概要

共通例外処理の機能

共通例外処理の使用例

共通例外処理の注意事項

共通例外の仕組み

共通例外の宣言手続き

共有可能属性

共有可能属性の初期値

共有不可能属性

共有不可能属性の初期値

共用モード

共用ライブラリ

共用ライブラリに含まれるプログラムの呼び出し方法

共用ライブラリのアンロード

共用ライブラリの概要

共用ライブラリの作成

共用ライブラリファイル

共用ライブラリファイル

局所場所節

局所場所節

局所場所節のデータ領域

局所名

(く)

空白文字，表意定数SPACE，および転記の空白詰めの文字コード

組み込み関数

組み込み関数を使用した例外情報の参照

クラス

クラス

クラス定義

クラス定義

クラス同士またはインタフェース同士の適合

(け)

継承

継承

継承

継承の使い方

現行コネクションの変更の例

原始プログラムの作成規則

原始プログラムリスト

原始プログラムリスト

原始文操作機能

原文名

原文名定数

(こ)

コアダンプの出力

構造型データベース

構造型データベース（XDM/SD）操作シミュレーション

構文規則

コード変換失敗時の動作

コード変換ライブラリ

固定形式拡張子

固定形式正書法

固定形式正書法

固定形式正書法

固定形式正書法

古典的要素

異なった文字集合間の比較

コピー伝播

コマンド行に指定した引数の個数

コマンド行に指定した引数の内容

コマンド行に指定する引数の形式

コマンド行へのアクセス

コメント

固有情報エリアの詳細

コンパイラ

コンパイラオプション

コンパイラオプション

コンパイラオプション

コンパイラオプションの一覧

コンパイラオプションの一般規則

コンパイラオプションの詳細情報

コンパイラオプションの優先順位

コンパイラ環境変数

コンパイラ環境変数

コンパイラ環境変数の一覧

コンパイラの起動方法

コンパイラの制限値

コンパイラ付属機能

コンパイル

コンパイル

コンパイル

コンパイル，リンクの指定

コンパイル〔Unicode機能〕

コンパイル時の主な入出力ファイル

コンパイル時の制限事項

コンパイル時の注意事項〔Linux(x86)〕,〔Linux（x64）〕

コンパイル時の入出力の流れ

コンパイルリスト

コンパイルリストに関連する翻訳指令

コンパイルリストの出力形式を指定する

コンパイルリストの出力先

コンパイルリストの出力に関連する翻訳指令

コンパイルリストファイル

コンポーネントの種類

(サ行)

(さ)

サーバの最大待ち時間の設定

サービスルーチン

サービスルーチンのリソース一覧

サービスルーチンを使った引数の受け取り

再帰属性プログラム

再帰呼び出し

再帰呼び出しの例

最終実行文情報

最終生成物の種類の設定

最新例外状態

最新例外状態のクリア

最外側のプログラム

最外側のプログラム

最適化機能

最適化のレベル

最適化のレベル

作業場所節

作業場所節のデータ領域

索引ファイル機能を使用したマルチスレッド対応COBOLプログラムのリンク

索引編成ファイル

索引編成ファイルでのレコードの検索基準の相違

索引編成ファイルに対するOPENモード

サブオプション

サブクラス

サロゲート

算術演算機能

算術演算機能の特徴

算術文

参照渡し

(し)

識別子

シグナル

シグナル

シグナル種別

シグニチャ

システム入出力関数レベルの指定

実行〔Unicode機能〕

実行可能ファイル

実行可能ファイル

実行可能ファイル

実行可能ファイル

実行可能ファイルと共用ライブラリの作成

実行可能ファイルと共用ライブラリの作成時の注意事項〔Linux(x86)〕,〔Linux（x64）〕

実行可能ファイルの起動方法

実行可能ファイルの作成単位

実行可能ファイルの指定

実行可能ファイル名の指定方法

実行可能プログラム

実行環境のコンポーネント

実行結果出力ファイル（カウント情報の表示）

実行結果出力ファイル（カバレージ情報の蓄積）

実行結果出力ファイル（テストデバッグ）

実行される宣言手続き

実行時エラーメッセージの出力先

実行時環境変数

実行時環境変数CBLLANGとCBLUNIENDIANの関係

実行時環境変数で行制御を操作する方法

実行時環境変数の一覧

実行時環境変数の一覧〔64bitアプリケーションの作成〕

実行時デバッグ機能

実行時のカーソルの位置づけ

実行時の制限事項

実行時の注意事項〔Linux(x86)〕

実行時要素

実行状態を示すコード

実行状態を示すコード

実行時ライブラリ

実行単位

実行単位の終了方法

実行方式

実装インタフェースの適合チェック

実体参照

実体参照

実体参照での表記の一覧

指標の繰り返し回数

シフトJIS範囲外の文字

シミュレーション情報

主／副プログラムシミュレーションで生成する擬似プログラム用プログラム情報ファイル

自由形式拡張子

自由形式正書法

自由形式正書法

自由形式正書法

自由形式正書法

自由形式正書法で書かれたCOBOL原始プログラム

自由形式正書法で指定できないコンパイラオプション

自由形式のソース原文や登録集原文

終端インジケータ

終端インジケータ

従来形式の例外処理

従来形式の例外処理

終了コード

終了コード

終了コード

終了コード

主画面

主画面

主キーファイル

主プログラムシミュレーション機能

主プログラムとして動作させる場合

順序の比較

順編成ファイル

条件式

条件式の評価の流れ

条件分岐文

条件変数

条件翻訳結果のコンパイルリスト

条件翻訳に関連する翻訳指令

条件翻訳の利用

照合順序

小数点以下のけた数

使用する文

使用する文

使用するメモリサイズ

仕様チェックオプションを複数指定した場合

使用できるファイル

使用できるファイル形式

使用できるファイルの種類

使用できるファイル編成

情報リスト

情報リスト

少量入出力

初期化属性プログラム

初期状態

書式オーバレイ

処理時間の短縮

処理速度の速いプログラムの作成

字類条件

字類条件の判断基準と文字の大小関係

新機能

(す)

数字項目のけた拡張機能

数字項目の定義や演算を工夫

数字項目の入力方式

数字項目の表示形式

数字編集項目

数字編集項目

数字編集項目の入力方式

数値の内部表現を意識したコーディング

スーパクラス

スキーマ定義

スタックコンパイル機能

スタック領域に配置されるデータ

スタック領域のサイズ変更方法

スタティック型CGIプログラム

ストアドプロシージャ

スレッドごとに環境変数を設定する

スレッドごとに固有の出力ファイル名称を付ける

スレッド識別子の値

スレッド識別子の値

(せ)

制御プログラム

制御変数

制御文字

整合性チェック

整合性チェックの警告エラー出力

正書法

正書法

正書法の決定の優先順位

正書法の異なるプログラム間の複写

静的なリンク

静的なリンク

静的に行う方法によるプログラムの例

製品体系

西暦日付の変更

整列作業用ファイル

整列処理のメモリサイズ

整列併合機能

整列併合機能

整列併合機能を使用したマルチスレッド対応COBOLプログラムのリンク

セルデータを数値として入出力する

セルデータをタブ文字区切りで入出力する機能

宣言手続きからの復帰

(そ)

送受信間の物理マップ

送受信間の物理マップ

送受信先の設定方法

送信先の設定方法

相対位置表示時の原始プログラムリスト

相対編成ファイル

添字

添字

添字

ソース原文の正書法を決定する翻訳指令

ソース単位の定義によって記述できるデータ定義の種別

ソースの作成方法

ソースファイルとリポジトリファイルの関係

ソースファイルの拡張子と正書法の種類の対応

ソースファイル名

ソースファイル名と拡張子

そとPERFORM

そとPERFORM文のインライン展開

その他の入出力文

(タ行)

(た)

第1次規格

第1次規格

第2次規格

第2次規格

第3次規格

第3次規格

第4次規格

第4次規格

大域属性（GLOBAL句）

大域名

大域名と局所名の有効範囲

タイトルバー

ダイナミック型CGIプログラム

タイムアウト秒数の設定

ダイヤモンド継承

互いに参照し合う翻訳単位のコンパイル

他言語とのプログラム間連絡

多重継承

タブ文字

単一レコード施錠

単純継承

ダンプリスト

(ち)

致命的例外

中間結果

中間結果のけた数

中断点情報

帳票データの送信先

帳票の定義

重複キー

(つ)

通算日付の変更

通常属性プログラム

通信節による画面機能（HP-UX(IPF)，AIX(32)，Solaris(SPARC)で有効）

強く型付けされた項目

(て)

定義の種類

定義別のコンパイル方法とリポジトリファイル

定数指定

定数指定のCALL文

定数指定の引数

定数長拡張機能

定数の畳み込み

ディスク書き込みオプション

ディスク書き込み保証

ディレクトリによる検索順序

データ有無コード

データ型の定義と参照

データ項目の型の対応

データコミュニケーション機能

データコミュニケーション機能の概要

データコミュニケーション機能を使用したCOBOLプログラムの例

データ属性の種類

データ転記文

データ転送

データの後の空白文字を出力する機能

データの入力方式

データの比較

データの表示形式

データベースアクセス機能

データベース管理システム

データベース操作機能

データベース操作シミュレーション

データベース操作シミュレーション機能

データベース操作文で内部的に展開されるCALL文

データベース操作文で内部的に展開されるCALL文の引数

データ名指定

データ領域

データ領域ダンプの出力条件

データ領域ダンプリスト

データ領域ダンプリスト出力情報の選択

データ領域ダンプリストの出力先

データ領域の種類

データ例外検出機能

データレコードファイル

適合

適合

適合チェック

テキスト編成ファイル

テキスト編成ファイルのUnicodeシグニチャ出力の切り替え機能

テキスト編成ファイルのファイル編成とレコード形式

テストデバッガ

手続き部見出しのRAISING指定

手続き文

手続き分岐

デバッグ環境のコンポーネント

デバッグ機能の種類と概要

デバッグ行

デバッグ情報

デバッグ情報が出力されるタイミング

デバッグ情報の出力例

デバッグ情報の取得

デバッグ情報へ出力されるインタフェース領域の種類

デプロイ情報

伝播によって検出した例外に対して例外チェックが無効な場合の動作

(と)

動作環境〔Linux(x86)〕,〔Linux（x64）〕

動的SQL

動的長基本項目

動的なリンク

動的なリンク

動的なリンクのプレロード機能

動的なリンクのプログラム検索トレース機能

動的に行う方法によるプログラムの例

登録集環境変数

登録集環境変数

登録集検索ディレクトリ

登録集原文

登録集原文

登録集原文

登録集原文

登録集原文の検索順序

登録集原文の正書法

登録集原文のファイル形式

登録集原文ファイルの検索

登録集名

登録集名

特殊レジスタ

トランザクション

トランザクション

トランザクション管理機能

トランザクション分離レベル

取り消し後の呼び出し

取り消し対象のプログラム

取り消しで解放される資源

取り消しの実行順序

トレース情報ファイル

トレースバック情報

トレースバック情報

トレースファイル

ドロー

ドロー

(ナ行)

(な)

内部プログラム

内容渡し

(に)

日本語項目

日本語項目

日本語集団項目

日本語定数

日本語編集項目

日本語編集項目

日本語文字データの転記，比較

日本語を含む原始プログラム

入出力エラー

入出力エラー処理

入出力機能〔Unicode機能〕

入出力状態

入出力状態の値

入出力状態の値

入出力情報と取り扱う文字コード

入出力データの変換

入出力の流れ

入力時の未使用項目の初期化機能

(ね)

ネットワーク上のファイルを使用する場合の注意事項

ネットワークファイルシステムでのラージファイルの動作

(ハ行)

(は)

排他モード

バイトオーダ

バイトオーダマーク

バイトストリーム入出力サービスルーチン

バイトストリーム入出力サービスルーチンの概要

バイトストリーム入出力サービスルーチンの説明

背反関係にあるサブオプション同士を指定した場合

廃要素

廃要素

パネル定義

パネル定義

パラメタ

パラメタインタフェース領域

範囲外チェック

範囲外チェック

範囲外チェック

半角かたかな

半角かたかな

(ひ)

比較する項目の長さ

引数の受け取り

引数の受け取り方法

引数の受け取り方法

引数の受け渡し

引数の受け渡しの規則

引数の受け渡しの種類

引数の整合性チェック

引数の引き渡し方法

引数を値渡しで受け取る

引数を値渡しで引き渡す

引数を一括して取得する方法

引数を個別に取得する方法

引数をポインタ型で受け取る

引数をポインタ型で引き渡す

非致命的例外

ビッグエンディアン形式

ビッグエンディアン形式

日付や時刻を取得するACCEPT文

ビットデータ

表計算プログラムファイル

表示モード

標準エラー出力

標準エラー出力

標準エラー出力

標準クラス

標準コード文字

標準出力

標準出力

標準出力

標準転記によるACCEPT文

標準入力

標準入力

標準入力

表操作

表要素

(ふ)

ファイル書き込み時のディスク書き込み保証の指定方法

ファイル共用

ファイル共用を省略した場合の処理

ファイルクローズ時のディスク書き込み保証の指定方法

ファイルサイズがレコード長の整数倍でない固定長形式の順ファイルの入出力

ファイルシェア

ファイル属性の整合性チェック

ファイル入出力拡張機能

ファイル入出力機能

ファイル入出力文でのエラー情報出力機能

ファイルの検索順序

ファイルのディスク書き込み保証

ファイルの排他・共用の区別

ファイルの排他・共用の区別

ファイルの割り当て

ファイルバッファサイズ指定機能

ファイル編成とレコード形式

ファイルレベルのファイル共用

ファイル割り当ての共通規則

ファクトリオブジェクト

ファクトリオブジェクト

ファクトリ定義

ファクトリデータ

ファクトリメソッド

ファクトリメソッドの呼び起こし

ファンクションキー入力結果の取得

フォーム情報の取得

フォームタグ

不活性状態

副キーファイル

複数レコード施錠

副プログラムシミュレーション機能

副プログラムとして動作させる場合

復帰コードの値

復帰コードの規則

復帰コードの参照方法

復帰コードの設定方法

物理ファイル名

物理マップ名

物理マップ名

浮動継続指示子

負の符号を持つゼロ

不変式のループ外移動

不要な小数点

プライマリスレッド

プリンタ出力の識別

プリンタに対する帳票出力

プリンタへのアクセス

プログラミング上の留意点

プログラム

プログラムが異常終了した場合の終了コード

プログラムからの連動実行

プログラム間整合性チェック

プログラム間の引数と返却項目

プログラム間連絡

プログラム原文領域

プログラム実行時にシグナル登録しない環境変数CBLEXCEPT

プログラム実行時呼び出し関係に依存するスタック領域の消費量

プログラム情報ファイル

プログラム情報ファイル

プログラム情報ファイル

プログラム情報ファイル

プログラム属性

プログラム定義

プログラム定義

プログラム定義だけのコンパイル

プログラムとファイル割り当ての関係

プログラムのコンパイルと実行〔HiRDBによる索引編成ファイル〕

プログラムの実行

プログラムの実行〔64bitアプリケーションの作成〕

プログラムの実行環境の設定

プログラムの実行環境の設定〔64bitアプリケーションの作成〕

プログラムの取り消し

プログラムの呼び出し

プログラムの呼び出し

プログラム名

ブロックカーソル

(へ)

併合処理のメモリサイズ

ヘッダの出力形式

ヘルプ機能

ヘルプ機能（オプション表示）

返却項目

(ほ)

報告書作成機能

報告書作成機能

ポップアップ画面

ポップアップ画面入出力機能

ポップアップブロックカーソル画面

ポリモルフィズム

ポリモルフィズム

ポリモルフィズム

翻訳グループ

翻訳グループを構成する定義の種類

翻訳指令

翻訳単位

翻訳単位情報の表示

翻訳単位の考え方

翻訳変数名

(マ行)

(ま)

マニュアル

マルチスレッド

マルチスレッド

マルチスレッド環境下でのファクトリデータ

マルチスレッド環境下でのメソッドの実行

マルチスレッド環境での実行

マルチスレッド対応COBOLプログラム

マルチスレッド対応COBOLプログラム

マルチスレッド対応COBOLプログラムが対応している機能

マルチスレッド対応COBOLプログラムの開始と終了

マルチスレッド対応COBOLプログラムの概要

マルチスレッド対応COBOLプログラムのコンパイル

マルチスレッド対応COBOLプログラムの生成

マルチスレッド対応COBOLプログラムのデバッグ

マルチスレッド対応COBOLプログラムのデバッグ

マルチスレッド対応COBOLプログラムのリンク

マルチスレッド対応COBOLプログラムを使用する上での注意事項

(み)

見た目幅

(め)

明示的なプロパティメソッド

明示的な例外の引き起こし

メインフレーム

メインフレーム

メソッド

メソッド原型

メソッド原型定義

メソッド定義

メソッドに渡す引数

メソッドの検索

メソッドの呼び起こし

メソッドの呼び起こし

メソッドの呼び起こし

メソッド名

メソッド呼び起こしの適合

メッセージ

メッセージパッシング

メッセージパッシング

メモリサイズ

メモリサイズと処理時間

(も)

文字コードを変換するプログラム例

文字の大小関係

文字列操作文

戻り値の受け渡し

戻り値の受け渡し

戻り値の使い方

(ヤ行)

(ゆ)

有効けた数

ユーザポップアップHELP画面

ユーザポップアップHELP機能

(よ)

用途DISPLAYと用途NATIONALとの間の変換

呼び出し先プログラム

呼び出してはいけないサービスルーチン

呼び出し元プログラム

呼び出し元プログラムトレース

弱く型付けされた項目

(ラ行)

(ら)

ラージファイル入出力機能

ラージファイル入出力機能でのファイルの共用

ラージファイル入出力機能でのファイルの共用

ラージファイル入出力機能の概要

ラージファイル入出力機能の指定方法

ラージファイル入出力機能の制限事項

ライブラリファイル

(り)

リストの出力

リストの見方

リソース一覧

リトルエンディアン形式

リポジトリ管理ツール

リポジトリ管理ツール使用時のエラーメッセージ

リポジトリ管理ツールの終了コード

リポジトリ段落

リポジトリ段落でほかの翻訳単位を参照する場合のコンパイル

リポジトリ段落を指定したソースファイルのコンパイル方法

リポジトリファイル

リポジトリファイル

リポジトリファイル

リポジトリファイル〔-Repository,Gen〕

リポジトリファイル〔CBLREP〕

リポジトリファイル〔CBLSYSREP〕

リポジトリファイルとリポジトリ段落の関係

リポジトリファイルに格納される情報

リポジトリファイルの管理

リポジトリファイルの検索

リポジトリファイルの参照方法

リポジトリファイルの生成

リポジトリファイルの生成に関連するコンパイラオプション

リポジトリファイルの生成方法

リポジトリファイルの単独生成

リポジトリファイルを使用するCOBOLプログラム開発の概要

リポジトリファイルを使用するCOBOLプログラムの作成手順

利用者定義関数

利用者定義関数

利用者定義関数の参照

利用者定義関数の注意事項

利用者定義関数の引数と返却項目

利用者定義関数の引数の扱い

利用者定義例外名

リレーショナルデータベース（XDM/RD）操作シミュレーション

リレーショナルデータベース（XDM/RD）操作シミュレーション機能

リンカ

リンクの指定

(る)

ループの削除

(れ)

例外

例外

例外オブジェクト

例外オブジェクト

例外が検出される文

例外が検出される文の詳細

例外検出での注意事項

例外情報の参照

例外処理

例外処理

例外処理に関連する翻訳指令

例外処理の動作

例外宣言

例外チェックが無効な場合の動作

例外の検出条件

例外の自動伝播

例外の致命度

例外の伝播

例外名

例外名の一覧

例外名のレベル

例外を受け取れないプログラムに例外を伝播させた場合の動作

例外を検出する組み込み関数

レコード施錠

レコード単位アクセスモード

レコードの検索基準

レコード末尾の空白文字を出力する機能

レコードレベルのファイル共用

連続コンパイル機能

連絡節のデータ領域

(ろ)

論理演算

■ 商標類

HITACHI，Cosminexus，HiRDB，OpenTP1，XDM，XMAPは，株式会社 日立製作所の商標または登録商標です。
AMDは，Advanced Micro Devices, Inc.の商標です。
IBM，AIXは，世界の多くの国で登録されたInternational Business Machines Corporationの商標です。
IBM，AIX 5Lは，世界の多くの国で登録されたInternational Business Machines Corporationの商標です。
Intelは，アメリカ合衆国および / またはその他の国における Intel Corporation の商標です。
Itaniumは，アメリカ合衆国および / またはその他の国におけるIntel Corporationの商標です。
Linuxは，Linus Torvalds氏の日本およびその他の国における登録商標または商標です。
Microsoftは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
Motifは，Open Software Foundation, Inc.の商標です。
ODBCは，米国Microsoft Corporationが提唱するデータベースアクセス機構です。
OLEは，米国Microsoft Corporationが開発したソフトウェア名称です。
OracleとJavaは，Oracle Corporation 及びその子会社，関連会社の米国及びその他の国における登録商標です。
Red Hatは，米国およびその他の国でRed Hat, Inc. の登録商標もしくは商標です。
すべてのSPARC商標は，米国SPARC International, Inc. のライセンスを受けて使用している同社の米国およびその他の国における商標または登録商標です。SPARC商標がついた製品は，米国Sun Microsystems, Inc. が開発したアーキテクチャに基づくものです。
UNIXは，The Open Groupの米国ならびに他の国における登録商標です。
Windowsは，米国Microsoft Corporationの米国およびその他の国における登録商標または商標です。
その他記載の会社名，製品名などは，それぞれの会社の商標もしくは登録商標です。