32 ビット開発システムに含まれるシステム コンポーネントはすべて、ファイル制御記述形式の FCD2 および FCD3 をサポートします。64 ビット開発システムに含まれるシステム コンポーネントは FCD3 のみをサポートします。ポインターのサイズに互換性がないため、FCD2 はサポートされません。
開発システムに含まれるシステム コンポーネントはシングル ソースであり、64 ビット用にコンパイルすると 64 ビット システムにおいて FCD3 で動作し、32 ビット用にコンパイルすると 32 ビット システムにおいて FCD2 および FCD3 の両方で動作します。
アプリケーションで FCD3 または FCD2 のいずれか一方のみを使用することができない場合は、このシングル ソーシングの方法を使用することをお勧めします。一方の FCD 形式のみを使用できる場合は、拡張された FCD 構造に対応するために他の条件を考慮する必要はありません。
ただし、アプリケーション内の一部のプログラムがアプリケーション内の他のコンポーネントへのインターフェイスを提供し、それらに FCD 構造が含まれている場合もあります。このような場合は、FCD3 のフル サポートに段階的に移行しなければならないことがあります。そのため、実行時には FCD2 と FCD3 の両方の形式を受け入れ、必要に応じて区別する必要があります。
たとえば、コード内に 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 *> Code to deal with FCD2... $if P64 set display "Error: cannot accept FCD2 on 64 bit platform" goback $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 構造を参照している場合は、内部では FCD3 構造のみを使用し、必要に応じて、コンポーネントの入口および出口のゲートウェイで FCD2 との間のマッピングを設定できます。次に例を示します。
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" goback 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 goback.