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.