ソート・プログラムを最大限活用するためには、ソート・プログラムの働きについて 理解する必要があります。PL/I プログラム内で、組み込みサブルーチン PLISRTx に対して CALL ステートメントを使うことによって、ソートを指定します。それぞれが未ソート・データの異なるソースおよびソートが完了したときの データの宛先を指定します。
例えば、PLISRTA の呼び出しは、未ソート・データ (ソートへの入力) が、ある 1 つのデータ・セット上にあることを指定し、ソート済みデータ (ソートからの出力) を別のデータ・セットに置くことを指定します。CALL PLISRTx ステートメントに含めなければならないものは、ソートしようとするデータ・セットに関するソート・プログラム情報を示した引数リスト、ソートを行うフィールド、ソートが成功したか失敗したかを示す戻りコードを ソート・プログラムが入れる変数の名前、および使用可能な出力または入力の処理プロシージャーの名前です。
ソート・インターフェース・ルーチンは、ソート用の引数リストを、PLISRTx 引数リストが提供する情報から作成します。また、このルーチンは、x として A、B、C、または D のいずれを選択したかによって異なります。次に、制御はソート・プログラムに移されます。出力または入力の処理ルーチンを指定していれば、それぞれの未ソートまたはソート済みレコードを処理するのに必要な回数だけ、処理ルーチンがソート・プログラムによって呼び出されます。
図 33 は、ソート操作を示す単純化されたフローチャートです。
.--------------.
| |
| CALL PLISRTx |
| |
.--.--.--.--.--.
| | | |
.----------------------------. | | .----------------------------.
| .---------. .---------. |
| | | |
PLISRTA PLISRTB PLISRTC PLISRTD
| | | |
| | | |
.-----------.---------------------.----------------------.---------------------.------------.
| ソート・プログラム |
|-----------.---------------------.----------------------.----------------------.-----------|
| | | | | |
| .---------.--------. .---------.---------. .---------.---------. .---------.---------. |
| | ファイルの終わり | | 1 つのレコードPL/I| | ファイルの終わり | | ファイルの終わり | |
| | までデータ・ | | を受け取る PL/I | | データ・セットから| | ルーチンを | |
| | セットから 1 つ | | サブ・ルーチンを | | レコードを取得する | | 各呼び出しで呼び | |
| | のレコードを取得 | | 各呼び出しで呼び | | | | 出す(E15) | |
| | する | | 出す(E15) | | | | (E15) | |
| | | | (E15) | | | | | |
| .---------.--------. .---------.---------. .---------.---------. .--------.----------. |
| | | | | |
| | .---------. .---------. | |
| .----------------------------. | | .----------------------------. |
| | | | | |
| | | | | |
| .--.--.--.--.--. |
| | | |
| | ソートする | |
| | | |
| .--.--.--.--.--. |
| | | | | |
| .----------------------------. | | .-----------------------------. |
| | .---------. .---------. | |
| | | | | |
| | | | | |
| .---------.---------. .--------.----------. .--------.---------. .---------.---------. |
| | ソート済みレコード| | ソート済みレコード| | 1 つのレコードを | | 1 つのレコードを | |
| | をデータ・セットに| | をデータ・セット | | 渡す PL/I サブ | | 渡す PL/I サブ | |
| | 置く | | に置く | | ルーチンを各呼び | | ルーチンを各呼び | |
| | | | | | 出しで呼び出す | | 出しで呼び出す | |
| | | | | | (E35) | | (E35) | |
| .---------.---------. .---------.---------. .---------.--------. .---------.---------. |
| | | | | |
| | .---------. .---------. | |
| .----------------------------. | | .----------------------------. |
| | | | | |
| | | | | |
| .------.---.--.--.-----. |
| |ソートの成功または失敗| |
| |を示す戻りコードを | |
| |セットアップする | |
| .----------.-----------. |
| | |
.--------------------------------------------.----------------------------------------------.
|
|
.--------.---------.
| PLISRTx への呼び |
| 出し側に戻る |
.------------------.ソート・プログラムそのものにおいては、ソート・プログラムと入力および出力処理ルーチンとの間の制御の流れは、戻りコードで制御されます。ソート・プログラムは、その処理の途中で、適切な時点でこれらのルーチンを呼び出します。(ソート・プログラム 内では、これらのルーチンはユーザー出口と呼ばれます。ソートされる入力を渡すルーチンは、E15 ソート・ユーザー出口です。ソート済み出力を処理する ルーチンは、E35 ソート・ユーザー出口です。) これらのルーチンから、ソート・プログラムは、そのルーチンをもう一度呼び出すべきか、または次の処理段階に進むべきかを示す戻りコードがくることを予期します。
この章の後半では、PL/I からどのようにソート・プログラムを使用するかについて 詳しく説明します。まず、必要な PL/I ステートメントについて説明し、次にデータ・セット要件について説明します。この章の終わりには、4 つの組み込みサブルーチンの使用法を示す一連の例があります。