Hi John,
Seems to me that you aren't really talking about a difference between 
RPG III and RPG IV.  You are talking about a difference between checking 
the resutls using a BIF like %FOUND or %EOF vs. using an indicator.
In RPG IV (as well as RPG III) you can do this:
c     xxkey         chain     xxfmt                       lr
c                   dow       *inlr = *off
c* do the real work here.
c     xxkey         reade     xxfmt                           lr
c                   enddo
Nothing has changed.  RPG III and RPG IV are identical.  But perhaps 
what you didn't think about is that the indicators on CHAIN and on READE 
don't mean the same thing.  (And this has always been documented this way!)
The indicator on CHAIN is in the HI position, and it means "record not 
found".
The indicator on READE is in the EQ position and it means "end of file"
This, again, is the case in both RPG III and RPG IV.
When IBM gave us BIFs to replace the indicators, they gave us BIFs that 
match what the indicators do.  They gave us %FOUND which we can check to 
see if a record was found (or not), and they gave us %EOF which we can 
check to see if we're at the end of the file (or not).  So essentially, 
they gave us exactly what we had before.  The difference, however, is 
that they don't have the same name as one another.   in your RPG III 
example, and my indicator-driven RPG IV example, the name of the 
indicator is LR in for both "not found" and "end of file".  However, 
%FOUND and %EOF always have different names from one another...
So you can't do what you posted and expect it to work!!  here's what you 
coded:
c     xxkey         chain     xxfmt
c                   dow       not %eof(xxfile)
c* do the real work here.
c     xxkey         reade     xxfmt
c                   enddo
Well, since the CHAIN op-code doesn't set the %EOF indicator (it sets 
%FOUND), this code doesn't make a lot of sense!!  So of course this 
doesn't work.  What you really wanted to do was this:
c     xxkey         chain     xxfmt
c                   if        %found(xxfile)
c                   dou       %eof(xxfile)
c* do the real work here.
c     xxkey         reade     xxfmt
c                   enddo
c                   endif
Or if you want it to work exactly like the RPG III example, you could do 
this instead:
     c     xxkey         chain     xxfmt
     c                   eval      *inlr = not %found
     c                   dow       not *inlr
     c* do the real work here.
     c     xxkey         reade     xxfmt
     c                   eval      *inlr = %eof
     c                   enddo
That would do (literally) what you did in RPG III using BIFs...  but I 
find that ugly.  This need to check a different BIF for different 
results has led a lot of people to stop using CHAIN to prime a loop, and 
instead use SETLL/READE:
     c     xxkey         setll     xxfmt
     c     xxkey         reade     xxfmt
     c                   dow       not %eof(xxfile)
     c* do the real work here.
     c     xxkey         reade     xxfmt
     c                   enddo
But, however you decide to proceed, I hope you at least understand the 
situation now.
jmmckee wrote:
Where I work, training is something of a dirty word.
To read multiple records using a partial key in RPG III, I do this:
xxkey  chain   xxfmt                LR
*INLR  doweq  *OFF
  
  
xxkey  reade   xxfmt                         LR
           enddo
On a project a few years ago, written in RPG IV, that code did not work.
The only way we found to make it work was to do this:
xxkey    setll    xxfmt
xxkey     reade xxfmt                    
             dow    not %eof(xxfile)
xxkey    reade  xxfmt
             enddo
Doing a CHAIN to position and read the first record when multiple records were read just went to end of file, as I recall.  Been too long.
Were we doing someting wrong that caused the RPG IV code to fail?  This has really been bugging me for a long time.  I couldn't find a reason for the bizarre behavior in my searching.  It >may< have been an error when only one record with the matching subkey was found.  Again, I just don't remember.   
John McKee        
As an Amazon Associate we earn from qualifying purchases.