32 ビット開発システムで提供されるすべてのシステム コンポーネントは、FCD 2 および FCD 3 をサポートします。64 ビット開発システムの場合、提供されるシステム コンポーネントは FCD 3 のみをサポートします。ポインター サイズに互換性がないため、システム コンポーネントは FCD 2をサポートできません。32 ビットと 64 ビットのシステム コンポーネントには、同じソースを利用することができます。つまり、P64 でコンパイルすると、そのコンポーネントは、64 ビット システムの FCD 3 上で動作し、P64 以外でコンパイルすると、そのコンポーネントは、32 ビット システムの FCD 2 と FCD 3 の両方で動作します。独自のアプリケーションを開発する場合は、この単一ソースのアプローチを取ることをお勧めします。
開発システムは両方の形式の FCD をサポートしているため、アプリケーションでは、次のいずれかを使用できます。
アプリケーションで FCD 3 または FCD 2 のいずれか一方だけを利用できる場合、拡張された FCD 構造に対応するために、その他の条件を考慮する必要はありません。
ただし、アプリケーション内の一部のプログラムがアプリケーション内の他のコンポーネントにインターフェイスを提供しており、これらのインターフェイスに FCD 構造が含まれている場合もあります。この場合、FCD 3 の全面サポートに向けて段階的に移行する必要があります。したがって、実行時には、プログラムは FCD 2 形式と FCD 3 形式の両方に対応して、必要に応じてこれらを識別する必要があります。たとえば、コード内に FCD フィールドへの参照がいくつか存在している場合、次のようなソース コード モデルを使用することができます。
linkage section. 01 fcd-user pic x. 01 fcd2. copy "xfhfcd2". 01 fcd3. copy "xfhfcd3". procedure division using fcd-user. set address of fcd3 to address of fcd-user if fcd-version of fcd3 = 0 *> Dealing with FCD2.. $if P64 set display "Error: cannot accept FCD2 on 64 bit platform" exit program $end set address of fcd2 to address of fcd-user end-if
FCD のフィールドが参照されるたびに、次のような処理を実行するコードを追加する必要があります。
if ( fcd-version of fcd3 not = 0 and fcd--line-sequential of fcd3) or ( not fcd-version of fcd3 = 0 and fcd--line-sequential of fcd2 ) *> Do line sequential manipulation end-if
ただし、コンポーネント内の一連のコードが直接的に FCD 構造を参照している場合、内部で FCD 3 構造のみを使用することができます。また、必要に応じて、コンポーネントのエントリ ゲートウェイとイグジット ゲートウェイで、FCD 2 を対象としたマッピングを設定できます。次に例を示します。
working-storage section. 78 78-fcd3-map-to-fcd3 value 0. 78 78-fcd3-map-from-fcd3 value 1. 78 78-fcd3-map-error-none value 0. 78 78-fcd3-map-error-64bit value -1. 78 78-fcd3-map-error-func value -2. 78 78-fcd3-map-error-reladdr value -3. 01 fcd3-work. copy "xfhfcd3". linkage section. 01 fcd-user pic x. procedure division using fcd-user. *> Entry Gate map FCD2 (if necessary) to FCD3 call 'fcd3map' using fcd-user fcd3-work by value 78-fcd3-map-to-fcd3 size 1 if return-code not = 0 display "Error: cannot convert FCD formats" exit program end-if *> Operate on the FCD as FCD3 only *> .... *> Exit Gate map FCD3 (if necessary) to FCD2 call 'fcd3map' using fcd-user fcd3-work by value 78-fcd3-map-from-fcd3 size 1 exit program.