Keyboard

What was the name of the last spool file my program created? Here is how to determine that.

I had a problem recently where because of some old programs with built-in O-specs I didn’t really know what the name of the spool file generated is in CL. I found this API that can figure that out for you.

Here is how to use it. First declare your variables:

/* QSPRILSP Fields */
DCL VAR(&RCVVAR) TYPE(*CHAR) LEN(70)
DCL VAR(&RCVVARLEN) TYPE(*CHAR) LEN(4)
DCL VAR(&ERRCODE) TYPE(*CHAR) LEN(8)

/* FIELDS FROM FORMAT SPRL0100 */
DCL VAR(&SPLFNAME) TYPE(*CHAR) LEN(10)
DCL VAR(&JOBNAME) TYPE(*CHAR) LEN(10)
DCL VAR(&USERNAME) TYPE(*CHAR) LEN(10)
DCL VAR(&JOBNBR) TYPE(*CHAR) LEN(6)
DCL VAR(&SPLFNBR) TYPE(*DEC) LEN(6 0)

Then you need to run this check.

/* &RCVVARLEN NEEDS TO BE SET TO THE SIZE OF &RCVVAR. +
IF YOU CHANGE THE SIZE OF &RCVVAR, CHANGE IT ON THE +
LINE BELOW AS WELL! (CL HAS NO %SIZE BIF!!) */
CHGVAR VAR(%BIN(&ERRCODE 1 4)) VALUE(0)
/* End QSPRILSP Fields */

Then after your spool file is generated, run the following code:

/* Get the last spool file created information */
CALL PGM(QSPRILSP) PARM(&RCVVAR &RCVVARLEN +
'SPRL0100' &ERRCODE)

/* SINCE CL HAS NO SUCH THING AS A DATA STRUCTURE, I'VE +
PUT ALL OF THE FIELDS INTO ONE BIG &RCVVAR FIELD, +
AND WILL SPLIT IT INTO SUBFIELDS BELOW: */

CHGVAR VAR(&SPLFNAME) VALUE(%SST(&RCVVAR 9 10))
CHGVAR VAR(&JOBNAME) VALUE(%SST(&RCVVAR 19 10))
CHGVAR VAR(&USERNAME) VALUE(%SST(&RCVVAR 29 10))
CHGVAR VAR(&JOBNBR) VALUE(%SST(&RCVVAR 39 6))
CHGVAR VAR(&SPLFNBR) VALUE(%BIN(&RCVVAR 45 4))

Note: I did not originally write this code, but is documented here for me to easily find in the future. It was from an article in System i Network.