TechTalk: Automatically move spooled files from one output queue to another.

Typography
  • Smaller Small Medium Big Bigger
  • Default Helvetica Segoe Georgia Times

One morning, you arrive at the office and realize that one of your printers is broken. You need a quick way to redirect spooled files from the output queue of the broken printer to the output queue of a working printer. Sound familiar? I've got an easy way to handle this situation.

I've written a command called Redirect Output Queue (RDTOUTQ) and an associated CL program called RDT001CL. You can see the command and the CL program in Figures 3 and 4, respectively. (Note that the CL program uses the CVTBIN4DEC command from QURSTOOL, so you'll need to create that also.) The command associates a data queue with an output queue and monitors the data queue for new entries.

When a spooled file is in the "from" output queue in a ready status, an entry is automatically placed in the data queue. The program receives the entry and extracts the information necessary to move the spooled file to the "to" output queue. (Spooled files in the output queue in a ready status when the program starts will not be moved. Those files need to be held and then released before they will be moved to the new output queue.) You can submit the command to a multithreaded batch subsystem; spooled files will be moved as long as you leave the job running. As you might imagine, this command could save you quite a bit of time.

- Jean-Jacques Risch


TechTalk: Automatically move spooled files from one output queue to another.

Figure 3: RDTOUTQ Command Source

 /*===============================================================*/ /* To compile: */ /* */ /* CRTCMD CMD(XXX/RDTOUTQ) PGM(XXX/RDT001CL) + */ /* SRCFILE(XXX/QCMDSRC) */ /* */ /*===============================================================*/ CMD PROMPT('Redirect an Output Queue') PARM KWD(FRMOUTQ) TYPE(QUAL) MIN(1) PROMPT('From + Output Queue') PARM KWD(TOOUTQ) TYPE(QUAL) MIN(1) PROMPT('To + Output Queue') QUAL: QUAL TYPE(*NAME) LEN(10) QUAL TYPE(*NAME) LEN(10) DFT(*LIBL) + SPCVAL((*LIBL)) PROMPT('Library') 
TechTalk: Automatically move spooled files from one output queue to another.

Figure 4: RDT001CL Source

 /*===============================================================*/ /* To compile: */ /* */ /* CRTCLPGM PGM(XXX/RDT001CL) SRCFILE(XXX/QCLSRC) */ /* */ /* (Requires the CVTBIN4DEC TAATOOL Command) */ /*===============================================================*/ PGM PARM(&FOUTQ_LIB &TOUTQ_LIB) DCL VAR(&FOUTQ_LIB) TYPE(*CHAR) LEN(20) DCL VAR(&FOUTQ) TYPE(*CHAR) LEN(10) DCL VAR(&FLIB) TYPE(*CHAR) LEN(10) DCL VAR(&TOUTQ_LIB) TYPE(*CHAR) LEN(20) DCL VAR(&TOUTQ) TYPE(*CHAR) LEN(10) DCL VAR(&TLIB) TYPE(*CHAR) LEN(10) DCL VAR(&DTAQ) TYPE(*CHAR) LEN(10) DCL VAR(&DTAQLIB) TYPE(*CHAR) LEN(10) + VALUE('QUSRSYS') DCL VAR(&WAIT) TYPE(*DEC) LEN(5 0) VALUE(-1) DCL VAR(&FLDLEN) TYPE(*DEC) LEN(5 0) DCL VAR(&FIELD) TYPE(*CHAR) LEN(256) DCL VAR(&SPOOL) TYPE(*CHAR) LEN(10) DCL VAR(&SPOOLNBR) TYPE(*DEC) LEN(5 0) DCL VAR(&SPOOLNBRB) TYPE(*CHAR) LEN(4) DCL VAR(&SPOOLNBRH) TYPE(*DEC) LEN(9 0) DCL VAR(&JOB) TYPE(*CHAR) LEN(10) DCL VAR(&USER) TYPE(*CHAR) LEN(10) DCL VAR(&JOBNBR) TYPE(*CHAR) LEN(6) CHGVAR VAR(&FOUTQ) VALUE(%SST(&FOUTQ_LIB 1 10)) CHGVAR VAR(&FLIB) VALUE(%SST(&FOUTQ_LIB 11 10)) CHGVAR VAR(&TOUTQ) VALUE(%SST(&TOUTQ_LIB 1 10)) CHGVAR VAR(&TLIB) VALUE(%SST(&TOUTQ_LIB 11 10)) CHKOBJ OBJ(&FLIB/&FOUTQ) OBJTYPE(*OUTQ) MONMSG MSGID(CPF9801 CPF9810) EXEC(DO) SNDPGMMSG MSGID(CPF3357) MSGF(QCPFMSG) MSGDTA(&FOUTQ + *CAT &FLIB) MSGTYPE(*ESCAPE) GOTO CMDLBL(ENDIT) ENDDO CHKOBJ OBJ(&TLIB/&TOUTQ) OBJTYPE(*OUTQ) MONMSG MSGID(CPF9801 CPF9810) EXEC(DO) SNDPGMMSG MSGID(CPF3357) MSGF(QCPFMSG) MSGDTA(&TOUTQ + *CAT &TLIB) MSGTYPE(*ESCAPE) GOTO CMDLBL(ENDIT) ENDDO CHGVAR VAR(&DTAQ) VALUE(&FOUTQ) DLTDTAQ DTAQ(&DTAQLIB/&DTAQ) MONMSG MSGID(CPF0000) CRTDTAQ DTAQ(&DTAQLIB/&DTAQ) MAXLEN(256) ALCOBJ OBJ((&DTAQLIB/&DTAQ *DTAQ *EXCL)) WAIT(0) CHGOUTQ OUTQ(&FLIB/&FOUTQ) DTAQ(&DTAQLIB/&DTAQ) GET_NEXT: CALL PGM(QRCVDTAQ) PARM(&DTAQ &DTAQLIB &FLDLEN + &FIELD &WAIT) CHGVAR VAR(&SPOOL) VALUE(%SST(&FIELD 39 10)) CHGVAR VAR(&SPOOLNBRB) VALUE(%SST(&FIELD 49 4)) CVTBIN4DEC FROMBIN(&SPOOLNBRB) TODEC(&SPOOLNBRH) + SETLR(*ON) CHGVAR VAR(&SPOOLNBR) VALUE(&SPOOLNBRH) CHGVAR VAR(&JOB) VALUE(%SST(&FIELD 13 10)) CHGVAR VAR(&USER) VALUE(%SST(&FIELD 23 10)) CHGVAR VAR(&JOBNBR) VALUE(%SST(&FIELD 33 6)) /* The next statement moves the spooled file to the "to" output */ /* queue, but you could also either copy the spooled file or use */ /* the SNDNETSPLF to send it to another system. */ CHGSPLFA FILE(&SPOOL) JOB(&JOBNBR/&USER/&JOB) + SPLNBR(&SPOOLNBR) DEV(*OUTQ) + OUTQ(&TLIB/&TOUTQ) MONMSG MSGID(CPF0000) GOTO CMDLBL(GET_NEXT) ENDIT: ENDPGM 
BLOG COMMENTS POWERED BY DISQUS

LATEST COMMENTS

Support MC Press Online

$

Book Reviews

Resource Center

  •  

  • LANSA Business users want new applications now. Market and regulatory pressures require faster application updates and delivery into production. Your IBM i developers may be approaching retirement, and you see no sure way to fill their positions with experienced developers. In addition, you may be caught between maintaining your existing applications and the uncertainty of moving to something new.

  • The MC Resource Centers bring you the widest selection of white papers, trial software, and on-demand webcasts for you to choose from. >> Review the list of White Papers, Trial Software or On-Demand Webcast at the MC Press Resource Center. >> Add the items to yru Cart and complet he checkout process and submit

  • SB Profound WC 5536Join us for this hour-long webcast that will explore:

  • Fortra IT managers hoping to find new IBM i talent are discovering that the pool of experienced RPG programmers and operators or administrators with intimate knowledge of the operating system and the applications that run on it is small. This begs the question: How will you manage the platform that supports such a big part of your business? This guide offers strategies and software suggestions to help you plan IT staffing and resources and smooth the transition after your AS/400 talent retires. Read on to learn: