REXX 拡張処理の働き
File Manager は、拡張処理を実行するために指定する REXX ステートメントで使用できる、2 つの特別な REXX 変数、INREC と OUTREC を定義します。File Manager 機能またはパネルが REXX を呼び出す場合、処理するために選択された各入力レコードの内容は、INREC および OUTREC の両方に渡されます。REXX プロシージャーが呼び出されるとき (レコードを再形式設定するためのフィールド・マッピングを実行する出力テンプレートを用いた DSC 機能または「Copy Utility (コピー・ユーティリティー)」(オプション 3.3) を使用している場合を除いて)、INREC および OUTREC の内容は同一です。レコードを再形式設定するために DSC または「Copy Utility (コピー・ユーティリティー)」を使用している場合、REXX が呼び出されるときには、INREC は入力レコードを、OUTREC は再形式設定された出力レコードを含んでいます。
INREC 変数は、参照変数として使用されることを意図したものです。この変数に対して行われた変更は、すべて File Manager によって無視されます。変数 OUTREC は、プロシージャーによって更新でき、REXX 処理が完了するときに、拡張を行っている File Manager パネルまたは機能によって処理のために戻されます (ただし、後述のように以後の処理でレコードを「除去」することがない場合に限ります)。例えば、次の例は、最初の 2 バイトにタイプ標識を持つレコードが含まれているデータ・セットを処理します。タイプ '01' のレコードは、すべて長さが 80 バイトで、変更なしで、出力に受け渡されます。タイプ '02' のレコードは、可変長で、長さが 80 バイトより短く、スラッシュ文字 ('/') で 2 つのセクション (それぞれ、最高 40 バイト) に分割されたデータを含んでいます。これらのレコードは、連結されて 80 バイト・レコードとして出力に受け渡される、半分の 2 つの 40 バイトに再形式設定されます。
/* Reformat varying length records as fixed
using an arbitrarily located delimiter */
If Substr(inrec,1,2) == '02' Then Do
Parse Var inrec left '/' right
outrec = Left(left,40) || Left(right,40)
End
OUTREC 変数の値が、使用している機能またはパネルによって指定されたデータ・セットに許されているレコード長より長ければ、それは切り捨てられます。OUTREC の値がレコード長より短い場合には、「Set Processing Options (処理オプションの設定)」(オプション 0) パネル (パネルを拡張している場合) の「PAD」フィールドで指定した文字または SET 機能 (機能を拡張している場合) の PAD パラメーターで指定した文字を使用して、埋め込みが行われます。