COBOL2002 言語 拡張仕様編


5.4.6 SYNCHRONIZED句(ブール形式データを扱う機能)

一般規則
  1. SYNCHRONIZED句を指定した内部ブール基本項目は,バイト境界にけた詰めされたビット位置を占める。

  2. SYNCHRONIZED句を集団項目に指定すると,その集団に含まれる基本項目で,用途がBITである項目すべてにSYNCHRONIZEDの指定が適用される。

  3. 遊びビット

    用途がBITの項目とそれ以外のデータ項目が交互に並ぶと,バイト境界に合わせて項目を配置する。このとき,前者(用途がBIT)の項目との間にすき間ができることがある。これを遊びビットという。

(a)遊びビットが生じる場合

・レコードの中で,用途がBITでSYNCHRONIZED句指定のないブール項目の後ろにそれ以外の項目が続くとき,この二つの項目の間に生じる。

・集団項目の最後の項目が,用途BITでSYNCHRONIZED句指定のないブール項目のとき,その項目の後ろに生じる。

(b)遊びビットの挿入と仮定

・出力ファイルまたは作業場所節中のレコード記述項では,用途がBITでSYNCHRONIZED句指定のないブール項目を除いて,その他の項目がバイト境界に置かれるようにレコード内遊びビットを挿入する。

・入力ファイルまたは連絡節中のレコード記述項では,用途がBITでSYNCHRONIZED句指定のないブール項目を除いて,その他の項目の境界を正しくするために,遊びビットが渡されるデータの中にあるものとみなす。

(c)遊びビットの数と位置の決定

遊びビットが必要かどうかを決定し,必要な場合には加えるべき遊びビットの数と位置を決めるためにこのシステムは次のようにする。

・バイト境界に配置しなければならない項目,すなわち用途がBITでSYNCHRONIZED句指定のないブール項目以外の項目の直前,または集団項目の最後の二つの場所のどちらかにある一連の用途BITでSYNCHRONIZED句指定なしのブール項目が占めるブール位置の合計を求め,この値を8で割る。この除算の余り(r)が0のときは遊びビットは不要で,余りが0でないときは加えられるべき遊びビットは8-rである。これらの遊びビットは,上記の一連の用途BITでSYNCHRONIZED句指定なしのブール項目の直後にあるものとして各レコードに加えられる。レコード内遊びビットは,その直前のブール項目のレベル番号と等しいレベル番号を持つ項目であるかのように定義され,そのブール項目が属する集団のサイズに含まれる。レコード中に,ブール項目でない項目SYNCHRONIZED句が指定された項目があるときには,遊びビットのほかに遊びバイトも追加される。

遊びビットの挿入例を次に示す。

(例)

   01 A.
     05 B.
       10 C      PIC 1(5) BIT.
       10 FILLER PIC 1(3) BIT. …(1)
       10 D      PIC 9(3).
       10 E      PIC 1(7) BIT.
       10 FILLER PIC 1    BIT. …(2)
       10 F      PIC 1      DISPLAY
       10 G      PIC 1(6) BIT.
       10 FILLER PIC 1(2) BIT. …(3)
     05 H.
       10 I      PIC 1(6) BIT.
       10 J      PIC 1(6) BIT.
       10 FILLER PIC 1(4) BIT. …(4)

(1)〜(4)のFILLER項目は,次の規則に従って挿入される遊びビットである。

(1)数字項目の前

(2)用途がDISPLAYのブール項目の前

(3)集団項目の前

(4)レコードの最後

・表要素内の遊びビット

OCCURS句が指定されている集団項目に用途がBITのブール項目が属している場合も遊びビットが加えられる。すなわち,表要素の各繰り返しを集団項目と見て前項の遊びビットに関する規則を適用する。

表要素内の遊びビットの挿入例を次に示す。

(例)

   01 A.
     05 B.       OCCURS 2 TIMES
       10 C      PIC 1(7) BIT.
       10 FILLER PIC 1    BIT.…(1)
       10 D      PIC 9(5).
       10 E      PIC 1    BIT.
       10 FILLER PIC 1(7) BIT.…(2)

(1)と(2)のFILLER項目が,挿入される遊びビットである。

(1)数字項目の前

(2)集団項目の最後

・用途BITの表要素間の遊びビット

OCCURS句が,SYNCHRONIZED句指定なしの用途BITのブール項目に対して指定されている場合は,表要素の各繰り返しの間には遊びビットは挿入されない。

【標準仕様との関連】

COBOL2002 言語 標準仕様編」 「9.16.80 SYNCHRONIZED句