サブフィールドは、定義仕様書の「定義タイプ」記入項目 (24 から 25 桁目) にブラン クを指定することによって定義します。 サブフィールド定義 (複数も可) は、データ構造定義の直後に続いていなければ なりません。 サブフィールド定義は、ブランクでない定義タイプの指定を持つ定義仕様書が見付 かった時、あるいは別の仕様タイプが見付かった時に終わります。
サブフィールドの名前は 7 から 21 桁目に記入されます。 ソース仕様の読みやすさを向上させるために、サブフィールド名を字下げし、それら がサブフィールドであることを視覚的に表示することができます。
データ構造が QUALIFIED キーワードを指定して定義されている場合、サブフィールド名はユーザーのプログラムの中の他の名前と同じであっても構いません。 サブフィールド名は、使用される時点でそのサブフィールドを所有するデータ構造によって修飾されます。
また、LIKE キーワードを使用して、サブフィールドを既存の項目と類似のものと して定義することができます。このようにして定義された場合のサブフィールドの長さとデータ・タイプは、 その基礎になった項目と同じになります。 同様に、LIKEDS キーワードを使用して既存の項目と同じようにデータ構造全体を定義することができます。 LIKE キーワードの使用例については、図 117 を参照してくださ い。
キーワード LIKEDS はサブフィールド定義に指定できます。 指定される場合、 サブフィールドは、独自のサブフィールドのセットを持つデータ構造として定義されます。 データ構造 DS がサブフィールド S1 を持ち、このサブフィールドが サブフィールド S2 を持つデータ構造と同じに定義されている場合、プログラマーは式 DS.S1.S2 を使用して S2 を参照する必要が あります。
前に定義されたサブフィールドの記憶域は、OVERLAY キーワードを使用し、別の サブフィールドの記憶域でオーバーレイすることができます。 このキーワード は、後の方のサブフィールド定義に指定されます。 OVERLAY キーワードの使用例については、図 54 を参照してく ださい。
サブフィールドの長さは、絶対 (位取り) 表記法、長さ表記法を使用して指定することができます。また、その長さを暗黙指定することもできます。
また、ポインター、日付、時刻、およびタイム・スタンプなどのように、 固定長になっているデータ・タイプもあります。 これらのタイプでは、長さが暗黙指定されていますが、明示的に指定することもできます。
長さ表記法を使用している場合には、サブフィールドは、その開始位置が前に定 義されたすべてのサブフィールドの最大の終了位置より大きくなるように位取り されます。 各表記法の例については、データ構造の例を参照してください。
サブフィールドの位置合わせが必要な場合があります。 場合によっては、それが自動的に行われることがありますが、手操作で行わ なければならないこともあります。
たとえば、長さ表記法を使用し、基底ポインターまたはプロシージャー・ポイン ター・タイプのサブフィールドを定義している場合には、コンパイラーが必要に 応じて埋め込みを行うので、サブフィールドは確実に正しく位置合わせされます。
浮動、 整数、または符号なしサブフィールドを定義している場合には、 実行時のパフォーマンスを改善するために位置合わせが 必要になる場合があります。 長さ表記法を使用してサブフィールドを定義する場合には、 データ構造定義にキーワード ALIGN を 指定することによって、浮動、整数または符号なしサブフィールド を自動的に位置合わせすることができます。 ただし、以下の例外に注意してください。
自動位置合わせでは、フィールドが次の境界で位置合わせされることになります。
フィールドを手操作で位置合わせしている場合には、それらが同じ境界で位置合わせ されることを確認してください。 ((桁 - 1) mod n) = 0 の 場合には、開始位置は n バイト境界にあります。("x mod y" の値は、 整数算術で x を y で除算した余りです。これは、X DIV Y の後の MVR 値と同じです。)
図 50 は、一連のバイトを示し、位置合わせに使用される種々の 境界を表しています。
上のバイト順序については、次の点に注意してください。
キーワード INZ(*LIKEDS) は LIKEDS サブフィールドで使用できます。LIKEDS サブフィールドは、対応するデータ構造と完全に同じ ように初期化されます。
キーワード INZ は LIKEDS サブフィールドで使用できます。 LIKEDS サブフィールドのネストされたすべてのサブフィールドは、デフォルト値に初期化されます。 これは、 さらに深くネストされた LIKEDS サブフィールドにも適用されますが、ネストされた LIKEDS サブフィールドで INZ(*LIKEDS) が指定されているものには 適用されません。
キーワード INZ が主なデータ構造定義でコーディングされている場合、キーワード INZ は明示的な初期化なしに、データ構造のすべてのサブフィールドに暗黙指定されます。これには、LIKEDS サブフィールドが含まれます。
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.