What's This Program's Name?
Don't hard-code program names. A CL program can obtain its own name via the following code fragment:
DCL VAR(&SENDER) TYPE(*CHAR) LEN(80) DCL VAR(&PGM) TYPE(*CHAR) LEN(10) DCL VAR(&MSGKEY) TYPE(*CHAR) LEN(4) SNDPGMMSG MSG(' ') TOPGMQ(*SAME) MSGTYPE(*INFO) + KEYVAR(&MSGKEY) RCVMSG PGMQ(*SAME) MSGTYPE(*INFO) SENDER(&SENDER) + RMV(*YES) MSGKEY(&MSGKEY) CHGVAR VAR(&PGM) VALUE(%SST(&SENDER 56 10)) RPG programs can obtain their names from the program status data structure: ... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 I SDS I *PROGRAM PGM or ... 1 ...+... 2 ...+... 3 ...+... 4 ...+... 5 ...+... 6 I SDS I 1 10 PGM
Shared Spool Files
If you need to run several programs, each of which creates a report, and you want them all in a single print file, you need to override or change your printer file to use a shared access path. If you are using the default printer file QSYSPRT, you could do this with:
OVRPRTF FILE(QSYSPRT) SHARE(*YES)
Then you must open the printer file and keep it open. This can be done with a
very small RPG program like this:
... 1 ...+... 2 ...+... 3 ...+... 4 ... + ... 5 ...+... 6 FQSYSPRT O F 132 OF PRINTER C RETRN C EXCPTDUMMY C MOVE *ON *INLR OQSYSPRT E DUMMY ... 1 ...+... 2 ...+... 3 ...+... 4 ... + ... 5 ...+... 6
This program simply executes a RETRN without setting on the LR indicator which leaves the printer file (QSYSPRT) open.
Simply call the RPG program at the start of your job; at the end of your job, execute the Reclaim Resources (RCLRSC) command to close the open printer file. Another method you can use is to condition the initial RPG program with an *ENTRY parameter, which causes it to set LR on to end printer continuation mode. The main thing is having a shared access path, which remains open to have all printer output directed to the shared spool file entry.
LATEST COMMENTS
MC Press Online