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 | 機能 |
---|---|
32767 以下 | 基本レベル |
32768 | コンパイラはプリプロセッサに中断するように指示します。 |
32769 | 条件付きコンパイルのサポート。 |
基本レベル外: | コンパイラは 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-1 と response-code-2 の先頭バイトは予備であり、常にゼロに設定する必要があります。
最も簡単な方法は、response-code-1 と response-code-2 を 0 に設定する方法です (resp-main と resp-more を設定する前に)。
ソース コードを編集したい場合、元のソース コードの行が置き換わる行よりも常に先に戻ってくるようにする必要があります。また、ソース コードの複数の行にわたる記述は 1 ブロックとして扱うべきです。論理行の一部のみを修正することはできません。