× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



Jon Paris wrote:

3 - In our main menu program we use RCLRSC(*) when a menu option ends

This is basically doing nothing. RCLRSC is completely ignored by ILE programs. _If_ you are running your ILE programs in an ILE AG then you want RCLACTGRP.


If *CALLER means the default activation group, RCLRSC isn't ignored, but what it does isn't always good. It closes files opened by the programs and service programs running in the default actgrp. For *PGM objects, it marks them to be re-initialized on the next call. For *SRVPGM objects, it doesn't do anything. So if you have a *SRVPGM running in the default activation group due to *CALLER, and you do RCLRSC, the files will get closed but the srvpgm will think they are open. Then when the SRVPGM later tries to do I/O on the file, it will fail with MCH3402 "Tried to refer to an object that no longer exists".

Test:

* Pgm RCLRSC1
H dftactgrp(*no) actgrp(*caller)
Fqsysprt o f 40 printer
D prtDs ds 40
C dsply prtDs
C write qsysprt prtDs
C return

* Module RCLRSC2
C callb 'RCLRSC2A'
C return

* Module RCLRSC2A
Fqsysprt o f 40 printer
D prtDs ds 40
C dsply prtDs
C write qsysprt prtDs
C return

==> CRTBNDRPG QTEMP/RCLRSC1
==> CRTRPGMOD QTEMP/RCLRSC2
==> CRTRPGMOD QTEMP/RCLRSC2A
==> CRTSRVPGM QTEMP/RCLRSC2A EXPORT(*ALL)
==> CRTPGM QTEMP/RCLRSC2 BNDSRVPGM(RCLRSC2A)

For program RCLRSC1, the I/O is done from the *PGM.
For program RCLRSC2, the I/O is done from the *SRVPGM.

Shhh, don't tell anyone I used callb and crtsrvpgm export(*all).

==> CALL QTEMP/RCLRSC1
- answer the DSPLY with something like "pgm1 line1"
==> CALL QTEMP/RCLRSC1
- notice that it remembers the previous DSPLY value
- answer the DSPLY with something like "pgm1 line2"
==> CALL QTEMP/RCLRSC2
- answer the DSPLY with something like "pgm2 line1"
==> CALL QTEMP/RCLRSC2
- notice that it remembers the previous DSPLY value
- answer the DSPLY with something like "pgm2 line2"
==> RCLRSC
==> WRKSPLF
- notice the two QSYSPRT files with the lines you gave
==> CALL QTEMP/RCLRSC1
- notice that it forgot the previous DSPLY value
==> CALL QTEMP/RCLRSC2
- notice that it remembers the previous DSPLY value
- notice that it fails on the WRITE with MCH3402


As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:
Replies:

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

This mailing list archive is Copyright 1997-2024 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.