Wednesday, June 13, 2007

Recursion example - RPG, i5

Here is an example of recursion using a procedure in RPG:


P CrtDataQ B Export

D CrtDataQ Pi

D DtaQNam 10A Const
D KeyLen 10i 0 Const
D DtaQLen 10i 0 Const Options(*NoPass)
D LibName 10A Const Options(*NoPass)
D CmdStr S 300A Inz Varying
D Library S 10A Inz('QTEMP')
D DtaQLn S 10i 0 Inz(256)

/Free
// set default values for DtaQLen and LibName...
Select;
When %Parms() = 3;
DtaQLn = DtaQLen;
When %Parms() = 4;
DtaQLn = DtaQLen;
Library = LibName;
EndSl;
CmdStr = 'CRTDTAQ DTAQ(' + %Trim(Library) + '/' + %Trim(DtaQNam) + ') MAXLEN(' + %Trim(%Char(DtaQLn)) + ') SEQ (*KEYED) KEYLEN(' + %Trim(%Char(KeyLen)) + ')';

// Monitor for the possiblity of Data queue already present
// If data queue is already present, delete it and then create.
Monitor;
ExcClCmd(CmdStr:%Len(CmdStr));
On-Error;
DltDataQ(DtaQNam);
CrtDataQ(DtaQNam:KeyLen:DtaQLn:Library); // recursion example
EndMon;

/End-Free

P CrtDataQ E

No comments: