%PARMS は、%PARMS が使用されたプロシージャーに渡されているパラメーターの 数を戻します。 サイクル・メイン・プロシージャーの %PARMS は、プログラム状況データ構造の *PARMS と同じです。
バインド呼び出しによって呼び出されたプロシージャーで %PARMS が使用される場合、 呼び出し側のプログラムまたはプロシージャーが最小操作記述子を渡さないと、%PARMS によって戻される値は使用可能になりません。 他の言語とは異なり、ILE RPG コンパイラーは常に 1 つの操作記述子を渡します。したがって、呼び出し元が別の ILE 言語で作成されていた場合には、呼び出し時に操 作記述子を渡すことが必要になります。 操作記述子が渡されない場合、%PARMS によって戻された値は信頼できません。 操作記述子が渡されなかったとシステムによって判断された場合、%PARMS によって戻される値は -1 になります。 しかし、場合によっては、システムがそのことを検出できず、%PARMS によって戻される値が不正な値 (0 以上) になることがあります。
%PARMS で戻される値には、RTNPARM キーワードが指定されたときに戻り値の処理に使用される追加の最初のパラメーターが含まれます。 詳細については、RTNPARMを参照してください。
詳細については、呼び出し命令または 組み込み関数を参照してください。
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++
* Prototype for procedure MaxInt which calculates the maximum
* value of its parameters (at least 2 parameters must be passed)
D MaxInt PR 10I 0
D p1 10I 0 VALUE
D p2 10I 0 VALUE
D p3 10I 0 VALUE OPTIONS(*NOPASS)
D p4 10I 0 VALUE OPTIONS(*NOPASS)
D p5 10I 0 VALUE OPTIONS(*NOPASS)
D Fld1 S 10A DIM(40)
D Fld2 S 20A
D Fld3 S 100A
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq..
CL0N01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++
C *ENTRY PLIST
C PARM MaxSize 10 0
* Make sure the main procedure was passed a parameter
C IF %PARMS < 1
C 'No parms' DSPLY
C RETURN
C ENDIF
* Determine the maximum size of Fld1, Fld2 and Fld3
C EVAL MaxSize = MaxInt(%size(Fld1:*ALL) :
C %size(Fld2) :
C %size(Fld3))
C 'MaxSize is' DSPLY MaxSize
C RETURN
DName+++++++++++ETDsFrom+++To/L+++IDc.Keywords+++++++++++++++++++++++++++
*----------------------------------------------------------------
* MaxInt - return the maximum value of the passed parameters
*----------------------------------------------------------------
P MaxInt B
D MaxInt PI 10I 0
D p1 10I 0 VALUE
D p2 10I 0 VALUE
D p3 10I 0 VALUE OPTIONS(*NOPASS)
D p4 10I 0 VALUE OPTIONS(*NOPASS)
D p5 10I 0 VALUE OPTIONS(*NOPASS)
D Max S 10I 0 INZ(*LOVAL)
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result++++++++Len++D+HiLoEq..
CL0N01Factor1+++++++Opcode(E)+Extended-factor2+++++++++++++++++++++++++++
* Branch to the point in the calculations where we will never
* access unpassed parameters.
C SELECT
C WHEN %PARMS = 2
C GOTO PARMS2
C WHEN %PARMS = 3
C GOTO PARMS3
C WHEN %PARMS = 4
C GOTO PARMS4
C WHEN %PARMS = 5
C GOTO PARMS5
C ENDSL
* Determine the maximum value. Max was initialized to *LOVAL.
C PARMS5 TAG
C IF p5 > Max
C EVAL Max = p5
C ENDIF
*
C PARMS4 TAG
C IF p4 > Max
C EVAL Max = p4
C ENDIF
*
C PARMS3 TAG
C IF p3 > Max
C EVAL Max = p3
C ENDIF
*
C PARMS2 TAG
C IF p2 > Max
C EVAL Max = p2
C ENDIF
C IF p1 > Max
C EVAL Max = p1
C ENDIF
C RETURN Max
P MaxInt E