CASxx (サブルーチンの条件付き呼び出し)

自由形式構文 (許可されていない - IF 命令コードおよび EXSR 命令コードを使用)
コード 演算項目 1 演算項目 2 結果フィールド 標識
CASxx 被比較値 被比較値 サブルーチン名 HI LO EQ

CASxx 命令では、サブルーチンを条件付きで選択して処理することができま す。 この選択は、xx で指定された演算項目 1 と 演算項目 2 の関係に基づいています。 演算項目 1 と演算項目 2 の間に xx で示された関係が存在する場合には、結果 フィールドに指定されたサブルーチンが処理されます。

条件付け標識を指定することができます。 演算項目 1 と演算項目 2 には、 リテラル、名前のついた定数、形象定数、フィールド名、テーブル名、配列要素、 またはデータ構造名を入れるか、あるいはブランクにすることができます (ブランクを 使用できるのは、xx がブランクで、71 から 76 桁目に結果の 標識が指定されていない場合だけです)。 演算項目 1 と演算項目 2 がブランク以外の場合には、両方とも同じデータ・タ イプでなければなりません。 CASxx 命令で 演算項目 1 と演算項目 2 が 必要になるのは、71 から 76 桁目に結果の標識が指定されている場合だけです。

結果フィールドには、*PSSR、プログラム例外/エラー処理サブルーチン、および *INZSR (プログラム初期化サブルーチン) を含む有効な RPG IV サブルーチンの名前が入っていなければなりません。 演算項目 1 と演算項目 2 の間に xx で示された関係が存在する場合には、結果 フィールドに指定されたサブルーチンが処理されます。xx で示された関係が 存在しない場合には、プログラムは CAS グループの次の CASxx 命令から続行 します。 CAS グループには CASxx 命令しか入れることができません。 CAS グル ープの終わりを示すために、最後の CASxx 命令の後には ENDCS 命令を入れなけ ればなりません。 このサブルーチンが処理されると、サブルーチンによって別 の命令に制御が渡されない限り、プログラムは ENDCS 命令の後の次の命令から 処理を続行します。

71 から 76 桁目に結果の標識が指定されていない CASxx 命令 は、CASxx 命令の結果フィールドに指定されたサブルーチンを 無条件に実行するので、機能的には EXSR と同じです。 同じ CAS グループの中で無条件の CASxx 命令に続く CASxx 命令が テストされることはありません。 したがって、無条件の CASxx は、通常は CAS グループの中の 他のすべての CASxx 命令の後に入れます。

CAS グループの ENDCS 命令に条件付け標識を使用することはできません。

CASxx 命令に関する規則の詳細については、比較命令または サブルーチン命令を参照 してください。

図 1. CASxx 命令
*...1....+....2....+....3....+....4....+....5....+....6....+....7...+....
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq....
 *
 *  CASGE 命令は FieldA を FieldB と比較します。FieldA が
 *  FieldB と同じかそれより大きい場合には、Subr01 が処理されて、
 *  プログラムは ENDCS 命令の後の命令から続行します。
 *
C     FieldA        CASGE     FieldB        Subr01
 *
 *  FieldA が FieldB より小さい場合には、プログラムは次に
 *  FieldA を FieldC と比較します。FieldA が FieldC に等しい場合には、
 *  SUBR02 が処理されて、プログラムは
 *  ENDCS 命令の後の命令から続行します。
 *
C     FieldA        CASEQ     FieldC        Subr02
 *
 *  FieldA が FieldC に等しくない場合には、プログラムは、CAS 命令によって Subr03
 *  が処理された後で、
 *  ENDCS 命令の後の命令から続行します。
 *  以前の CASxx 操作になかった場合、
 *  CAS ステートメントを使用してサブルーチンを提供します。
 *
C                   CAS                     Subr03
 *
 *  ENDCS 命令は CASxx グループの終わりを示します。
 *
C                   ENDCS