入力ルーチンは、通常、データがソートされる前に、データに対して何らかの 処理を加えるのに使用されます。 入力ルーチンは、 図 51 および 図 53 に 示してあるとおり、データを印刷するのに使用するか、 正しい結果を出すためにソート・フィールドを生成または操作するのに使用することができます。
入力処理ルーチンは、PLISRTB または PLISRTD を呼び出すときに ソート・プログラムが使用します。 ソート・プログラムがレコードを必要とする場合、戻りコード 12 と一緒に、 文字ストリング・フォーマットのレコードを戻す入力ルーチン を呼び出します。 この戻りコードの意味は、渡したレコードはソートの対象になるという ことです。 ソート・プログラムは、戻りコード 8 が渡されるまでこのルーチン を呼び出し続けます。 戻りコード 8 の意味は、すべてのレコードを渡し終えたので、 ソート・プログラムがそのルーチンをもう呼び出す必要はないということです。 戻りコードが 8 のときにレコードが戻された場合、そのレコードはソート・プログラム によって無視されます。
ルーチンによって戻されるデータは、文字ストリングでなければなりません。 この文字ストリングは、固定でも可変でも構いません。 可変の場合、PLISRTx への呼び出し内 の 2 番目の引数である RECORD ステートメント内のレコード・フォーマットとして、 通常は、V を指定する必要があります。 しかし、F を指定することも可能で、その場合は、 ストリングが最大長になるようブランクが埋め込まれます。 レコードは RETURN ステートメントを使って戻されるため、PROCEDURE ステートメント 内で RETURNS 属性を指定しなければなりません。 戻りコードは、PLIRETC の呼び出し内で設定されます。 代表的な入力ルーチンのフローチャートを、図 47 に示します。
代表的な入力ルーチンの骨組みコードを、図 48 に示します。
E15: PROC RETURNS (CHAR(80));
/*---------------------------------------------------------------*/
/*RETURNS attribute must be used specifying length of data to be */
/* sorted, maximum length if varying strings are passed to Sort. */
/*---------------------------------------------------------------*/
DCL STRING CHAR(80); /*--------------------------------------------*/
/*A character string variable will normally be*/
/* required to return the data to Sort */
/*--------------------------------------------*/
IF LAST_RECORD_SENT THEN
DO;
/*---------------------------------------------------------------*/
/*A test must be made to see if all the records have been sent, */
/*if they have, a return code of 8 is set up and control returned*/
/*to Sort */
/*---------------------------------------------------------------*/
CALL PLIRETC(8); /*-------------------------------------------*/
/* Set return code of 8, meaning last record */
/* already sent. */
/*-------------------------------------------*/
RETURN('');
END;
ELSE
DO;
/*------------------------------------------------*/
/* If another record is to be sent to Sort, do the*/
/* necessary processing, set a return code of 12 */
/* by calling PLIRETC, and return the data as a */
/* character string to Sort */
/*------------------------------------------------*/
****(The code to do your processing goes here)
CALL PLIRETC (12); /*--------------------------------------*/
/* Set return code of 12, meaning this */
/* record is to be included in the sort */
/*--------------------------------------*/
RETURN (STRING); /*Return data with RETURN statement*/
END;
END; /*End of the input procedure*/入力ルーチンの例は、図 51 および 図 53 に示してあります。
戻りコード 12 (ソートに現行レコードを組み込む) と 戻りコード 8 (すべてのレコードを送付済み) 以外に、 ソート・プログラムでは戻りコード 16 を使うこともできます。 これは、ソートを終了させ、戻りコード 16 (ソート失敗) とともに、 ソート・プログラムを PL/I プログラムに戻します。