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.