内部 (FASTREXX) 処理の使用

File Manager は、プロシージャーで最初に *REXXPROC が見つかるか *FASTREXX ステートメントが見つかるかによって、FASTREXX 処理または REXX 処理のいずれかを使用しようとします。

*REXXPROC または *FASTREXX ステートメントが見つからない場合は、REXX ステートメントは、*REXXPROC ステートメントが先行しているものとして処理されます。

注:
  1. FASTREXX 処理は、次のルールに準拠している限り、DSEB 関数でサポートされます。
  2. パック・フィールドのデフォルト長: パック・フィールド処理を参照する関数に対して長さを省略した場合、レコードが処理されるたびに長さが再計算されます。
*REXXPROC
*REXXPROC ステートメントは、後続のプロシージャー・ステートメントが (先行する DFSORT ステートメントから分離している) REXX ステートメントであることを示します。ステートメントは、可能な場合は内部で (FASTREXX を使用して) 処理されます。FASTREXX 処理が可能でない場合、REXX ステートメントは REXX を呼び出すことにより処理されます。
*FASTREXX (ON)
*FASTREXX (または *FASTREXX ON) ステートメントは、後続のプロシージャー・ステートメントが (先行する DFSORT ステートメントから分離している) REXX ステートメントであり、可能であれば内部で処理される必要があることを示します。FASTREXX 処理が可能でない場合、File Manager は FASTREXX 処理が可能でなかったことを示して終了します。
*FASTREXX OFF
*FASTREXX OFF ステートメントは、後続のプロシージャー・ステートメントが (先行する DFSORT ステートメントから分離している) REXX ステートメントであり、REXX の呼び出しにより処理される必要があることを示します。
*FASTREXX CHECK
*FASTREXX CHECK ステートメントは、後続のプロシージャー・ステートメントが (先行する DFSORT ステートメントから分離している) REXX ステートメントであり、REXX の呼び出しにより処理される必要があることを示します。ただし、File Manager は、FASTREXX 処理がプロシージャーで可能であったかどうかを示します。
*FASTREXX NORUN
*FASTREXX NORUN ステートメントは、後続のプロシージャー・ステートメントが (先行する DFSORT ステートメントから分離している) REXX ステートメントであり、FASTREXX 処理がプロシージャーで可能であるかどうか判別するため、チェックされる必要があることを示します。File Manager 機能は実行されませんが、File Manager は FASTREXX 処理がプロシージャーで可能であるかどうか示します。

プロシージャーが FASTREXX 処理に適したものとなるためには、以下の項目でのみプロシージャーが構成されていなければなりません。

  • ヌル文節。ヌル文節は、ブランクまたはコメントだけから構成されます。これらは REXX ステートメントが内部で処理されるときには無視されます。
  • DO-END, DO WHILE-END, DO UNTIL-END, DO FOREVER-END ITERATE LEAVE
  • SELECT-WHEN-OTHERWISE-END 節
  • LABEL および SIGNAL ラベルの節のサポート
  • 条件式が内部処理で有効である IF-THEN-ELSE 命令文節。これらの文節は、条件式が内部処理で有効であり、THEN および ELSE 節も内部処理で有効である場合にサポートされます。次の関数は、 内部で処理される式に組み込むことができます。
    • CMP_DATE
    • CMP_TIME
    • FLD
    • FLD_CO
    • FLD_TM
    • FLD_TYPE
    • I_LENGTH
    • O_LENGTH
    • PRTCOUNT
    • RECSIN
    • RECSOUT
    • RECCUR
    • TFLD
    • FLDI
    • FLDO
    • TESTC
    • TESTN
    • DOWN
    • UP
    • FINDNEXT
    • FINDPREV

    内部処理に関する条件式の適格性についての詳細は、式の処理についてを参照してください。

  • NOP 命令文節 (これらは無視されます)。
  • RETURN 命令文節。
  • 制限された関数セットの 1 つの呼び出しからだけで構成されるコマンド文節。それらは以下のとおりです。
    • CHG_OUT
    • CHG_VAR
    • FLD_OUT
    • VAR_OUT
    • OVLY_OUT
    • OVLY_VAR
    • PRT_IN
    • PRT_OUT
    • PRT_VAR
    • SET_OLEN
    • TALLY
    • WRITE
    • SETC
    • SETN
    • TOP
    • BOT
    • DOWN
    • UP
    • RECCUR
    • FINDPREV
    • FINDNEXT
    • UPDATE

    関数は要求されたアクションを実行し、単一ブランクをコマンドとして戻します。これは、File Manager のホスト・コマンド環境では無視されます。

    内部 (FASTREXX) 処理に適したものとするには、コマンド関数に渡されたすべての引数はリテラルまたは未割り当てシンボルでなければなりません。具体的には、次のとおりです。

    • ネスト関数呼び出しはサポートされていません。
    • フィールド参照シンボル (#ref) はサポートされていません。
    • 割り当て文節はサポートされていません。
    • ラベル文節はサポートされていません。
    • 次のシンボルには暗黙の割り当てが含まれているため、 サポートされていません。
      • INREC および OUTREC

        (代わりに、入出力レコードで直接動作する関数セットを使用する必要があります。

        )
      • RC
      • RESULT
      • SIGL

以下の例は、FASTREXX に適したいくつかの簡単なステートメントを示します。

FASTREXX の例 1
各レコードの先頭バイトをブランクに変更するには、次のようにします。
    OVLY_OUT(' ',1,1)
FASTREXX の例 2
それぞれのレコードを 100 バイトの長さまでブランクで埋め込むには、次のようにします (100 バイトより長いレコードは、変更されずに残ります)。
    OVLY_OUT(' ',1,100,'C',' ')
    FLD_OUT(1,,1)
FASTREXX の例 3
この例は、File Manager が提供する CHG_OUT 機能を呼び出して、最初に現れる対のスラッシュ文字 (/) を対の疑問符 (?) に変更します。ただし、レコードの最初の 2 文字に「01」が入っている場合のみです。その他の場合には、最初の対のスラッシュを感嘆符 (!) に変更します。
    If FLD(1,2) == '01' Then
      CHG_OUT('//','??')
    Else
      CHG_OUT('//','!!')