COBOL2002 言語 拡張仕様編


7.2.1 CBL-CTR特殊レジスタ(報告書作成機能の拡張)

CBL-CTR特殊レジスタは,手続き部とCOBOLの報告書作成機能との間の連絡に使用するために,COBOLが内部的に作成するデータ名であり,次の二つの機能がある。

〈この項の構成〉

(1) 報告書作成機能から利用者への報告書の状態の通知

この機能は宣言節のUSE BEFORE REPORTING文(以下USE文と略記する)を指定した節中で指定しなければならない。報告書作成機能は制御の切れ目(control break)を起こしたレベルを表す調整をCBL-CTRに設定する。利用者は,USE手続きの中でCBL-CTRの内容を参照でき,その内容によって適当な処置を取ることができる。例えば,USE文の制御頭書き処理でCBL-CTRの内容が0ならば,最初のGENERATE文が実行され,最初の制御の切れ目(FINAL)の処理がされている。また,USE文の制御脚書き処理でCBL-CTRの内容が0でないならば,その内容は,報告書作成中に制御の切れ目を起こした制御のレベルを示す整数である。すなわち,その整数がnならば,CONTROL句に書いたFINALを除く,第n番目の制御用データ項目に対応する制御の切れ目が起きていることを示している。

USE文のページ頭書きまたはページ脚書き処理でCBL-CTRの値を参照すると,制御の切れ目が生じた場合の改ページであれば,そのレベルの値(CBL-CTR = 1〜254の整数)が入っていて,制御の切れ目なしに改ページが起きた場合はCBL-CTR = 255が入っている。この機能を用いると,利用者はページ頭書きまたはページ脚書きの処理中にCBL-CTRを参照し,制御の切れ目が生じた場合,その制御情報を次のページまで続行するかどうかの処理を自由に選択できる。また,制御の切れ目が生じている間はページ頭書きまたはページ脚書きの出力を抑止できる。

(2) 利用者から報告書作成機能への報告書形式の指定

この機能は,原始プログラムの手続き部の中で報告書のINITIATE文実行後から最初のGENERATE文を実行する前までに,MOVE文で整数1,2または3のどれかをCBL-CTRに設定すると使用できる。

(a) MOVE 1 TO CBL-CTR

CBL-CTRに1を設定しない場合,制御脚書きでSOURCE句によって制御用データ項目を参照すると,制御の切れ目処理では制御の切れ目によって変更された新しい値が入っている。すなわち,制御用データ項目の値が変わることによって制御の切れ目が生じ,その時点では制御用データ項目の内容は元の値ではなく新しい値が入っている。

ところが,CBL-CTRに1を設定すると,制御の切れ目が生じても,制御脚書きの制御用データ項目には元の値が入る。このためUSE BEFORE REPORTING節中,またはSOURCE句で制御用データ項目を参照すると,制御用データ項目には制御の切れ目を起こした新しい値ではなく,元の値が入っている。

(b) MOVE 2 TO CBL-CTR

CBL-CTRに2を設定しない場合,あるレベル制御の切れ目が起きると,制御の切れ目が起きたレベルの制御脚書きを印刷する前に,それより低いレベルの制御用データ項目を持った制御脚書きを印刷する際に,指定されているNEXT GROUP句をすべて実行する。

ところが,CBL-CTRに2を設定すると,印刷する制御脚書きのうち最もレベルの高い制御脚書きのNEXT GROUP句だけを有効とし,レベルの低いものに関しては制御脚書きの印刷だけをして,NEXT GROUP句を無視する。

(c) MOVE 3 TO CBL-CTR

CBL-CTRに1と2を設定した場合の両方の処理をすることを指定する。

CBL-CTR特殊レジスタの機能一覧を次に示す。

表7‒2 CBL-CTR特殊レジスタの機能一覧

使用

NEXT GROUP句

SOURCE句

設定

CBL-CTRに値を設定しない

すべて有効

CF:新しい値

CH:新しい値

USE手続き:新しい値

CBL-CTR=1

すべて有効

CF:元の値

CH:新しい値

USE手続き:制御脚書きのときだけ元の値

CBL-CTR=2

制御の切れ目を生じたCFに対するNEXT GROUP句だけ有効

CF:新しい値

CH:新しい値

USE手続き:新しい値

CBL-CTR=3

制御の切れ目を生じたCFに対するNEXT GROUP句だけ有効

CF:元の値

CH:新しい値

USE手続き:制御脚書きのときだけ元の値

参照

CBL-CTR=0〜n

制御の切れ目のレベルを示す。

(凡例)

−:該当しない