I miss the brackets on the %eof and the or statement is special as well.
First, i would test the eof, e.g. *in10 = %eof. Maybe do a rewrite in free
or SQL.

-------- Ursprüngliche Nachricht --------
Von: Greg Wilburn <gwilburn@xxxxxxxxxxxxxxxxxxxxxxx>
Datum: Mo., 4. Aug. 2025, 20:14
An: RPG programming on IBM i <rpg400-l@xxxxxxxxxxxxxxxxxx>
Betreff: RE: confusing coding?

Based on your assessment, I can confirm the following:

1. ARCMA1 is not empty (our customer master file)
2. No other leave in the DO loop
3. No other read of ARCMA1
4. WSPRMS=0

Based on that, this program should exit after reading all records in
ARCMA1.

I'm examining this because a CL that runs this pgm on Saturday morning
(08/02), didn't end until Sunday Morning when the system IPL'd.  This
normally takes 20 minutes.  But this "new" version of the program put in
place on 08/01.

The last message in the joblog for the CL referenced this program
(simple Override to QPRINT message).
The very next program called by the CL has a last-used date of 08/01,
which points to this program not completing for over 24 hours.
I can't see any other messages in the job log.

Stumped.

-----Original Message-----
From: RPG400-L <rpg400-l-bounces@xxxxxxxxxxxxxxxxxx> On Behalf Of John
Yeung
Sent: Monday, August 4, 2025 12:03 PM
To: RPG programming on IBM i <rpg400-l@xxxxxxxxxxxxxxxxxx>
Subject: Re: confusing coding?

On Mon, Aug 4, 2025 at 11:46 AM Greg Wilburn
<gwilburn@xxxxxxxxxxxxxxxxxxxxxxx> wrote:
>
>      c                   dow       '1'
>      c                   read      arcma1
>      c                   if        %eof
>      c                             or wsprms>0
>      c                               and (accom#<>p1com# or
acent#<>p1ent#)
>      c                   leave
>      c                   endif
>
> Specifically, the condition where no parameters (p1com# and p1ent#)
are passed in... If %eof occurs, the "AND" in the above applies when
WSPRMS=0, correct?

No. If %eof is true, then the condition is true and the loop is exited.

If %eof is false, then you check the rest:

  wsprms>0 and (stuff)

When WSPRMS = 0, that condition is false, regardless of "stuff". So if
WSPRMS = 0, then the LEAVE is skipped over. So, it *might* be an
infinite loop if WSPRMS = 0.

Other conditions that all have to be met for it to be infinite:

1. ARCMA1 is not empty.
2. There is no other (reachable) LEAVE in the DO loop.
3. There is no other (reachable) read of ARCMA1 in the DO loop.

John Y.
--
This is the RPG programming on IBM i (RPG400-L) mailing list
To post a message email: RPG400-L@xxxxxxxxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxxxxxxxx
Before posting, please take a moment to review the archives
at https://archive.midrange.com/rpg400-l.

Please contact support@xxxxxxxxxxxxxxxxxxxx for any subscription related
questions.

Greg Wilburn
Director of IT
301.895.3792 ext. 1231
--
This is the RPG programming on IBM i (RPG400-L) mailing list
To post a message email: RPG400-L@xxxxxxxxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: https://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxxxxxxxx
Before posting, please take a moment to review the archives
at https://archive.midrange.com/rpg400-l.

Please contact support@xxxxxxxxxxxxxxxxxxxx for any subscription related
questions.

As an Amazon Associate we earn from qualifying purchases.

This thread ...

Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2025 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.