H2cpyユーティリティによるヘッダファイル変換

Win32 API 呼び出しなどに使用する C 言語ヘッダーファイルを、等価な COBOL 文に変換するユーティリティプログラム H2cpy が用意されています。 このユーティリティは、次の変換をサポートします。

C 形式定義 COBOL 形式定義
C 関数プロトタイプ COBOL CALL プロトタイプ
#define レベル-78 項目

Header-to-copy ユーティリティは、標準的な呼び出し規約や、パラメータ受け渡しの方法も、等価な COBOL に変換します。

COBOL システムは COPY ファイル内のエントリを使用して、COBOL プログラムで使用されているパラメータが、オリジナルの C 言語ヘッダーファイルの定義と合っているかを確認します。 呼び出しインターフェイスが C 言語ヘッダーファイルで提供されるライブラリルーチンを使用する場合 (たとえば、Win32 API を呼び出す場合) には、H2cpy が COBOL プログラミングを簡単にします。

Header-to-copy ユーティリティは、指定されたすべての C ヘッダーファイルを、1 つの COBOL COPY ファイルに変換します。C ヘッダーファイルを個別の COPY ファイルに変換し、これらの COPY ファイルをプログラムで使用することはできません。

変換処理の結果として、Header-to-copy ユーティリティは COBOL ファイルを 2 つ作成します。これらのファイルは、COPY 文を使用して COBOL プログラムにインクルードできます。 メインのファイルは .cpy ファイルで、形式定義と定数を含みます。補助的な .ext ファイルは、外部データ宣言を含みます。 H2cpy は、C 言語インターフェイス使用するのみでなく、C のプログラムを COBOL に移植する場合にも役立ちます。

複数のヘッダーファイルを変換するには、コマンド行でそれらのファイル名を指定する。または、各ヘッダーファイルに対する #include 文を含むラッパーヘッダーファイルを作成します。 このときに、ヘッダーファイルがマクロへの定義済み値の設定を前提としているか、考慮する必要があります。 C コンパイラが暗黙的に設定するマクロもありますが、上記のようなマクロは明示的に設定する必要があります。設定は、コマンド行またはラッパーヘッダーファイルで行います。

Windows API のヘッダーファイルなど、特定のタイプのヘッダーファイルを頻繁に変換する場合は、同じような H2cpy オプショングループを使用することになります。 このような場合は、h2cpy.dir ファイルに必要なオプションを記述しておくと、手間を省くことができます (詳細については、H2cpy の -G コマンド行オプションの説明を参照してください)。

Header-to-copy ユーティリティは、正しい ANSI C および ISO C のソースファイルをすべて処理できます。 C 言語の不正なソースコードを検出した場合には、H2cpy の処理が失敗したり、不正な COBOL コードが生成されたりすることがあります。

Header-to-copy ユーティリティは、コマンド行から直接起動することも、PREPROCESS(headers) コンパイラ指令を使用して自動的に起動することもできます。 ヘッダープリプロセッサを使用すると、COBOL ソースファイル内の COPY 文で、C ヘッダーファイル (拡張子が .h のファイル) を指定できます。 プリプロセッサはこれらのファイルを C ヘッダーファイルとして認識し、Header-to-copy ユーティリティを使用して変換します。 この機能は、各ヘッダーファイルが比較的小規模な場合に効果的です。

Header-to-copy ユーティリティをコマンド行から起動するには、次のコマンドを入力します。

h2cpy {[filename] [option]} ...

パラメータ情報は、次のとおりです。

filename COBOL の COPY ファイルに変換する C ヘッダーファイルの名前
option H2cpy コマンド行オプション

optionfilename を指定しなかった場合は、利用可能なオプションが一覧表示されます。

注:同一のコンパイル時に先行処理されたヘッダーファイルを必要とする C ヘッダーファイルを、C コンパイラによって単独で処理できません。 同様に、H2cpy が翻訳できるのは、スタンドアローンのヘッダーファイル、または、ヘッダーファイルの完全なセットのみです。 また、C コンパイラのコマンド行で指定する必要のあるマクロ名や、特定のコンパイラで定義済みマクロは、H2cpy コマンド行で指定する必要があります。 例として、Microsoft 固有の定義済みマクロを、次に示します。

CHAR_UNSIGNED
_CPPUNWIND
_DLL
_M_IX86
_MSC_VER
_MT
_WIN32
_CPPRTTI
_M_ALPHA
_M_MPPC
_M_MRXOOO
_M_MPPC
_MFC_VER
_MT

H2cpy は C++ ヘッダーには対応していないため、__cplusplus マクロは指定しないでください。

次の ANSI C 定義済みマクロは、-D オプションを使用して、コマンド行で指定する必要があります。

__DATE__
__FILE__
__LINE__
__STDC__
__TIME__
__TIMESTAMP__