16.2.4 外部スイッチ

外部スイッチを使うと,プログラムの実行中に外部(別の実行単位)からプログラムを制御できます。ここでは,外部スイッチの使い方や値の設定方法について説明します。

<この項の構成>
(1) 外部スイッチとは
(2) 外部スイッチの設定方法
(3) 外部スイッチの参照方法

(1) 外部スイッチとは

COBOL2002では,外部からの制御情報を受け取るための0と1から構成される8けたの領域があります。この領域の各けたは,プログラムの特殊名段落で記述する外部スイッチ名(UPSI-0,UPSI-1,……,UPSI-7)に対応します。外部スイッチ名と領域上の位置との関係を次に示します。"1"になっている個所がそれぞれの外部スイッチに対応します。

表16-1 外部スイッチと位置との関係

外部スイッチ名対応する位置
UPSI-010000000​
UPSI-101000000​
UPSI-200100000​
UPSI-300010000​
UPSI-400001000​
UPSI-500000100​
UPSI-600000010​
UPSI-700000001​

(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-01(オン)
UPSI-10(オフ)
UPSI-20(オフ)
UPSI-31(オン)
UPSI-40(オフ)
UPSI-51(オン)
UPSI-60(オフ)
UPSI-70(オフ)

外部スイッチの状態が変更されたため,プログラムの1.,2.,3.の制御は次のようになります。

  1. UPSI-0がオン状態なので制御は手続きAに移ります。
  2. UPSI-3がオン状態なので制御は手続きCに移ります。
  3. UPSI-5がオン状態なので制御は手続きCに移ります。