Rational Developer for System z
Enterprise COBOL for z/OS バージョン 4.1 言語解説書


レコード内の遊びバイト

データ記述中の 2 進数項目が本来の境界にない場合、コンパイラーはレコード内に遊びバイトを挿入して、すべての SYNCHRONIZED 項目が適切な境界にあるようにします。

ファイル内のレコードの長さを把握しているのは重要なことであり、 遊びバイトが必要であるかどうかを判別したり、 必要であればコンパイラーがバイトをいくつ追加すればよいか判別しなければなりません。 コンパイラーの使用するアルゴリズムは、次のとおりです。

これらの遊びバイトは、各レコードごとに、2 進数項目の前にある基本データ項目のすぐ後に追加されます。これらは、SYNCHRONIZED 2 進数項目の直前にある基本項目と同じレベル番号を持つ項目を構成するかのように定義され、それらを含むグループのサイズに数えられます。

以下に例を示します。

01  FIELD-A.
    05  FIELD-B                     PICTURE X(5).
    05  FIELD-C.
        10  FIELD-D                 PICTURE XX.
       [10  SLACK-BYTES             PICTURE X.  INSERTED BY COMPILER]
        10  FIELD-E  COMPUTATIONAL  PICTURE S9(6) SYNC.
01  FIELD-L.
    05  FIELD-M                     PICTURE X(5).
    05  FIELD-N                     PICTURE XX.
   [05  SLACK-BYTES                 PICTURE X.  INSERTED BY COMPILER]
    05  FIELD-O.
        10  FIELD-P COMPUTATIONAL   PICTURE S9(6) SYNC.

OCCURS 節の指定のあるグループ項目が定義されており、 そのグループ項目の中に SYNCHRONIZED 2 進データ項目が含まれている場合も、コンパイラーは遊びバイトを追加することができます。 遊びバイトを追加するかどうかを決定するために、コンパイラーは次の処置を取ります。

OCCURS 節を含むグループ項目のオカレンスのたびに、その終わりのところで遊びバイトが挿入されます。例えば、次のように定義されているレコードは、ストレージの中では、レコードの後の図に示すようになります。

01  WORK-RECORD.
    05  WORK-CODE                 PICTURE X.
    05  COMP-TABLE OCCURS 10 TIMES.
        10  COMP-TYPE             PICTURE X.
       [10  SLACK-BYTES           PIC XX.  INSERTED BY COMPILER]
        10  COMP-PAY              PICTURE S9(4)V99 COMP SYNC.
        10  COMP-HOURS            PICTURE S9(3) COMP SYNC.
        10  COMP-NAME              PICTURE X(5).
この図は、レコード内への遊びバイトの挿入を示しています。これはレコード・フィールドがダブルワード境界、フルワード境界、およびハーフワード境界とどのように位置合わせされるかに基づいています。

COMP-PAYCOMP-HOURS を適切な境界に位置合わせするために、 コンパイラーはレコード内に 2 つの遊びバイトを追加しました。

上記の例の場合、さらに調整をしなければ、COMP-TABLE の 2 番目のオカレンスは、 ダブルワード境界の 1 バイト手前から始まることになってしまいます。 そして、2 番目以降のオカレンス項目では、COMP-PAYCOMP-HOURS が正しく位置合わせされません。したがって、コンパイラーはグループの最後に遊びバイトを加える必要があります。 これによって、レコードは次のように記述されたかのようになります。

01  WORK-RECORD.
    05  WORK-CODE                  PICTURE X.
    05  COMP-TABLE OCCURS 10 TIMES.
        10  COMP-TYPE              PICTURE X.
       [10  SLACK-BYTES            PIC XX.  INSERTED BY COMPILER]
        10  COMP-PAY               PICTURE S9(4)V99 COMP SYNC.
        10  COMP-HOURS             PICTURE S9(3)  COMP SYNC.
        10  COMP-NAME              PICTURE X(5).
       [10  SLACK-BYTES           PIC XX.  INSERTED BY COMPILER]
        

この例では、2 番目の COMP-TABLE のオカレンス (およびそれ以降) は、 ダブルワード境界を 1 バイト超えたところから開始されます。 COMP-TABLE の最初のオカレンスに関するストレージのレイアウトは、以下の図に示したように見えることになります。

この図は、レコード間への遊びバイトの挿入を示しています。これはレコード・フィールドがダブルワード境界、フルワード境界、およびハーフワード境界とどのように位置合わせされるかに基づいています。

このテーブルの後続の各オカレンスは、 これで最初のオカレンスと同じ相対位置で開始されることになります。


ご利用条件 | フィードバック

このインフォメーション・センターでは Eclipse テクノロジーが採用されています。(http://www.eclipse.org)