コンパイラとプリプロセッサ間のインターフェイスの定義

注: この統合プリプロセッサはネイティブ COBOL でのみサポートされます。

プリプロセッサのパラメーター

このインターフェイスで渡されるパラメーターは次のとおりです。

mode-flag 制御情報を渡すのに使用
buffer テキスト情報 (ソース行とファイル名) に使用
response 次のソース行のタイプを示すのに使用buffer

これらのパラメーターは次のデータ構造を使用して渡されます。

 01 mode-flag      pic 9(2) comp-x.
 01 buffer         pic x(n).
 01 response.
   03 response-status    pic 9(2) comp-x.
   03 response-code-1    pic 9(4) comp-x.
   03 filler redefines response-code-1.
     05 filler             pic x.
     05 resp-main          pic 9(2) comp-x.
   03 response-code-2    pic 9(4) comp-x.
   03 filler redefines response-code-2.
     05 filler             pic x.
     05 resp-more          pic 9(2) comp-x.

最初の呼び出し

プリプロセッサへの最初の呼び出しは、コンパイラがソース ファイルを開くときに行われます。mode-flag パラメーターは 0 に設定され、ソース ファイルの名前が buffer に入ります。コンパイラがソース ファイルを検索できた場合、ファイル名にはフル パスとファイル拡張子が含まれます。見つけることができなかった場合、名前はコマンド ラインで指定されたとおりです。この最初の呼び出しでは、プリプロセッサはバッファーの内容を保存します。

さらに、最初の呼び出しでハンドシェーキングプロセスが開始され、コンパイラとプリプロセッサがそれぞれのサポートレベルを認識できるようになります。このサポートレベルの認識により、新しい機能がプリプロセッサインターフェイスに実装される一方、この新しい機能は、コンパイラとプリプロセッサの両方がサポートしない限り利用できないようになります。コンパイラは、プリプロセッサがその情報を処理できることを通知しない限り、その情報をプリプロセッサには渡しません。同様に、プリプロセッサは、コンパイラが要求を受け付けることを通知しない限り、コンパイラに要求を渡しません。このプロセスは、古いコンパイラとプリプロセッサがハンドシェーキング プロセスを考慮しない設計であっても、引き続き機能できるように設計されています。

コンパイラはプリプロセッサを呼び出すときに、自身のサポート水準を response-code-2 パラメーターでプリプロセッサに通知します。プリプロセッサがコンパイラに制御を戻すときにも、そのサポート レベルを知らせるのに同じパラメーターが使用されます。機能が追加されると、サポートレベルが上がります。つまり、各レベルにはその前のレベルのサポートが含まれます。古いコンパイラが確実にサポートされるようにするには、パラメーターが初期化されていない「基本レベル」を表す特別な値 8224 を使用します。また、サポートレベルを設定しない古いプリプロセッサはパラメーターの値を変更しないため、32767 以下のすべての値を同様に、「基本レベル」として扱います。

基本レベルの機能を次の項で説明します。基本レベルにない機能は、警告とともに強調表示されます。この要約を次の表に示します。

コンパイラのサポート レベル

response-code-2 機能
8224 基本レベル
0 response-code-1 次の長さを含むbuffer
1 14 の resp-main をサポート
2 コンパイラがプリプロセッサのサポート レベルを理解し、処理の中断をプリプロセッサに指示します。
3 17 の resp-main をサポートします。
4 18 の resp-main をサポートします。

プリプロセッサのサポート レベル

response-code-2 機能
32767 以下 基本レベル
32768 コンパイラはプリプロセッサに中断するように指示します。
32769 条件付きコンパイルのサポート。
注: プリプロセッサは、ソース行を変更することなく、元のソース行としてマークすることにより、MODE-FLAG の値 3 を受け入れ、決定を下す必要があります。MODE-FLAG がこの値である限り、この動作を続ける必要があります。
基本レベル外: コンパイラは buffer の長さを response-code-1. に格納します。この長さは、プリプロセッサが返すソース行の最大値を示します。response-code-2 の値が 8224 の場合には、プリプロセッサが返すソース行の最大長は 80 バイトになります。

プリプロセッサはファイルを開き、成功した場合は response-status で 0 を返し、失敗した場合は 255 を返します。

オペレーティング システムのコマンド ラインには、スペースで終了するすべての、プリプロセッサへの指令が入ります。これらの指令はコンパイラのコマンド ライン、指令ファイル、または $SET 文で指定し、その後に PREPROCESS 指令を続けて記述します。

指令を使用してコマンド ラインから統合プリプロセッサへ情報を渡します。指令はプリプロセッサの設計者が定義します。なお、プリプロセッサに渡される各指令は、必ずしも 1 つの空白文字のみで区切られているとは限りません。コマンド ラインの形式は PREPROCESS 指令の形式と同じです。各プリプロセッサ指令 (最初のものを含む) は、1 つ以上の空白文字で終了することがあります。

後続の呼び出し

後続の呼び出しでは、プリプロセッサが最終行に到達したことを示すまで、ソース コードの行を要求します。

これらの呼び出しでは、コンパイラは COPY 文の処理で説明した場合を除いて、mode-flag を 1 に、response-status を 0 に設定します。要求を受け取ったプリプロセッサは、buffer,resp-main および resp-more に応答を返します。これらの応答については、次のセクションで説明します。

エラーがある場合には、response-status は 0 以外の値に設定されます (残りのフィールドは不確定です)。

response-code-1response-code-2 の先頭バイトは予備であり、常にゼロに設定する必要があります。

最も簡単な方法は、response-code-1response-code-2 を 0 に設定する方法です (resp-mainresp-more を設定する前に)。

ソース コードを編集したい場合、元のソース コードの行が置き換わる行よりも常に先に戻ってくるようにする必要があります。また、ソース コードの複数の行にわたる記述は 1 ブロックとして扱うべきです。論理行の一部のみを修正することはできません。

基本レベル外: コンパイラが mode-flag を 2 に設定した場合は、プリプロセッサがソースファイルの終わりに達する前に、コンパイラを終了します。この呼び出しでプリプロセッサは必要なすべてのクリーンアップ処理 (一時作業ファイルの削除など) を行います。プリプロセッサがスタックに置かれている場合、これにより別のプリプロセッサが呼び出されますが、それはまた同じパラメーター値で次のプリプロセッサを呼び出し、そのプリプロセッサは CANCEL されます。