Barbara,
You say:
" When you pass a MODS as a prototyped parameter, it passes the current
occurrence. (As you've seen.)"
What I interpret you are saying is that ONLY the current occurrence is
passed. Yet in practice, I see that if Pgm B populates occurrences 1 and
2, then Pgm A sees this on return. What is apparently happening is that
the whole MODS is being passed (at least, is being returned), but
"positioned at" the current occurrence.
What I find really odd is that without the setting of the occurrence to
1 before the call, when Pgm B populates occurrences 1 and 2, Pgm A sees
the results in occurrences 50 and 51 - of a 50-occurrence MODS! (This is
observed by investigating the MODS with Debug - i.e. eval
MYMODS(50..51). Attempting to access occurrence 51 in the program
generates error RNX0122: OCCUR value is out of range, as one would
expect.)
Curious!
Trevor Briggs
Analyst/Programmer
Lincare, Inc.
(727) 431-1246
TBriggs2@xxxxxxxxxxx
-----Original Message-----
From: rpg400-l-bounces@xxxxxxxxxxxx
[mailto:rpg400-l-bounces@xxxxxxxxxxxx] On Behalf Of Barbara Morris
Sent: Wednesday, July 03, 2013 9:42 PM
To: rpg400-l@xxxxxxxxxxxx
Subject: Re: Multiple occurrence data structure anomaly
On 7/2/2013 2:46 PM, Briggs, Trevor (TBriggs2) wrote:
...
When control is returned to Pgm A, value is in
occurrence 50 of the MODS.
When you pass a MODS as a prototyped parameter, it passes the current
occurrence. (As you've seen.)
I assume you didn't add the DIM keyword for the prototyped, so I think
it makes sense that it would pass the current occurrence.
Just by the way, if you use an array of data structures (DIM keyword
instead of OCCURS keyword), you can distinguish between the whole array
ARR, and an element ARR(i).
For sure I would recommend using a DS array for new code, since it's
easier (I think) to code array indexes than to manage occurrences.
But for existing code, it's not usually easy to change a MODS to a
DS-array, since it involves changing every reference to the subfields.
For example, if a MODS named INFO was previously not qualified, and INFO
was changed to a qualified ds array, the reference to subfield ADDR
would change from simply ADDR to INFO(index).ADDR.
As an Amazon Associate we earn from qualifying purchases.