RPG IV サブルーチンは、演算命令のどこからでも処理することができます。すべての RPG IV 命令は 1 つのサブルーチン内で処理することができ、 これらの命令は 9 から 11 桁目の有効な標識で条件付けることができます。 7 から 8 桁目には SR またはブランクを指定することが できます。これらの桁に制御レベル標識 (L1 から L9) を使用することはできません。 しかし、 サブルーチン内の AND/OR 行は 7 から 8 桁目に指定することができます。
サブルーチンで使用するフィールドは、そのサブルーチン または残りのプロシージャーの中で定義することができます。 いずれの場合にも、フィールドはプロシージャーの本体とサブルーチンの両方 で使用することができます。
サブルーチンに別のサブルーチンを入れることはできません。 サブルーチンは別のサブルーチンを呼び出すことができます。 すなわち、サブルーチンには EXSR または CASxx を入れることができます。 しかし、サブルーチン内の EXSR または CASxx の指定で直接それ 自体を呼び出すことはできません。別のサブルーチンを介してそれ自体を間接的に呼び出すことも、 予測できない結果になる場合があるので、行ってはなりません。 同じサブルーチン内の別の場所に分岐したい場合には、 GOTO および TAG 命令コードを使用してください。
サブルーチンを、使用する順序に指定する必要はありません。 それぞれのサブルーチンは固有の記号名を持っていて、BEGSR および ENDSR ス テートメントを含んでいなければなりません。
サブルーチンの中では GOTO (分岐) 命令を使用することができます。GOTO で はそのサブルーチンに対応する ENDSR 命令のラベルは指定できますが、BEGSR 命令の名前を指定することはできません。 GOTO が TAG または ENDSR と同じサブルーチン内にある場合を除き、サブルー チン内の TAG または ENDSR に GOTO を出すことはできません。 LEAVESR 命令を使用すると、サブルーチン内の任意のポイントからそのサブルーチンを終了できます。制御は、そのサブルーチンの ENDSR 命令に渡されます。 LEAVESR はサブルーチン内からのみ使用できます。
メイン・プロシージャーのサブルーチン内の GOTO は、同じサブルーチン、明細演算、 または合計演算の中の TAG に出すことができます。 サブプロシージャーのサブ ルーチン内の GOTO は、同じサブルーチン内またはサブプロシージャーの本体 内の TAG に出すことができます。
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... * * For a subroutine, positions 7 and 8 can be blank or contain SR. * C : C : C EXSR SUBRTB C : C : C : CL2 EXSR SUBRTA C : C : C : C SUBRTA BEGSR C : C : C : * * One subroutine can call another subroutine. * C EXSR SUBRTC C : C : C : C ENDSR C SUBRTB BEGSR C : C : C : * *...1....+....2....+....3....+....4....+....5....+....6....+....7...+.... CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq.... * * GOTO and TAG operations can be used within a subroutine. * C START TAG C : C : C : C 23 GOTO END C : C : C : C 24 GOTO START C END ENDSR C SUBRTC BEGSR C : C : C : C ENDSR *
(C) Copyright IBM Corporation 1992, 2006. All Rights Reserved.