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