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__