Zap unwanted spool files in a single stroke!
We have quite a few users in our company that have a tendency to lose reports after they are printed. To eliminate the problem, I save the spool file after it is printed so that it can be recalled if needed. This works well except that it takes our operator a good bit of time in the morning to go through the output queue and selectively delete all the spool files that have a saved status. So I went to work on trying to automate the "cleanup" process.
I knew that the Delete Spool File (DLTSPLF) command could be used to remove the spool file from the output queue, but it did not give me the ability to delete spool file entries based on the current status. I also knew that the Clear Output Queue (CLROUTQ) command would remove everything from the specified output queue. But, this was overkill.
With the help of a command found in QUSRTOOL library called Convert Output Queue (CVTOUTQ), I was able to create the Clean Output Queue (CLNOUTQ) command that not only gives me the ability to selectively clear items from an output queue by status, but also lets me clear items by user, file name, form type and date.
Any of these criteria can be used together to define the deletion process (i.e., delete all entries in output queue PRT1 that have a SAV status and are on form type FORM1).
Examples of Use
CLNOUTQ OUTQ(QPRINT) + DATE(050392)
This command deletes all spool files in QPRINT created on or before May 3.
CLNOUTQ OUTQ(SYSPRT01) + USER(QPGMR) + STATUS(SAV)
This command lets you delete all spool files in SYSPRT01 created by user QPGMR having a status of SAV (saved).
CLNOUTQ OUTQ(LASER) + STATUS(HLD)
With this command, you delete all spool files in output queue LASER having a status of HLD (on hold).
Creating CLNOUTQ
In order to create CLNOUTQ, it will be necessary to first create two tools from QUSRTOOL: EDTVAR and CVTOUTQ. If these commands are not in your TAATOOL library, refer to From the Toolbox (page 70) in this issue. Then enter the source code shown in Figures 1 and 2, following the compilation instructions given at the bottom of each figure.
CLNOUTQ keeps you in control of your output queues. Now you don't have to waste so much time deleting each spool file separately. After all, there are more important things to do!
Selective Clear Output Queue Command
Figure 1 Command CLNOUTQ
CLNOUTQ: CMD PROMPT('Clean Output Queue') PARM KWD(OUTQ) TYPE(OQ) MIN(1) PROMPT('Output + queue name') PARM KWD(USER) TYPE(*NAME) LEN(10) EXPR(*YES) + PROMPT('Delete files from user') PARM KWD(FILE) TYPE(*NAME) LEN(10) EXPR(*YES) + PROMPT('Delete file name') PARM KWD(FORMTYPE) TYPE(*NAME) LEN(10) + SPCVAL((*STD)) EXPR(*YES) PROMPT('Delete + files with forms type') PARM KWD(DATE) TYPE(*DATE) EXPR(*YES) + PROMPT('Delete files older than') PARM KWD(STATUS) TYPE(*CHAR) LEN(4) RSTD(*YES) + DFT(*ALL) VALUES(*ALL CLO HLD MSG OPN PND + PRT RDY WTR SAV) MAX(9) EXPR(*YES) + PROMPT('Delete files with status') OQ: QUAL TYPE(*NAME) LEN(10) MIN(1) EXPR(*YES) QUAL TYPE(*NAME) LEN(10) DFT(*LIBL) + SPCVAL((*LIBL) (*CURLIB)) EXPR(*YES) + PROMPT('Library')
Selective Clear Output Queue Command
Figure 2 CL program OUTQ001CL
OUTQ001CL: + PGM PARM(&QOUTQ &USER &FILE &FORMTYPE &DLTDAT &STATUS) DCLF FILE(QTEMP/OUTQP) DCL VAR(&CT) TYPE(*DEC) LEN(3 0) VALUE(0) DCL VAR(&DELETE_IT) TYPE(*LGL) DCL VAR(&DLTDAT) TYPE(*CHAR) LEN(7) DCL VAR(&DLTITMS) TYPE(*DEC) LEN(6 0) DCL VAR(&DLTSTR) TYPE(*CHAR) LEN(22) DCL VAR(&DLTYMD) TYPE(*CHAR) LEN(6) DCL VAR(&FILE) TYPE(*CHAR) LEN(10) DCL VAR(&FORMTYPE) TYPE(*CHAR) LEN(10) DCL VAR(&MSGDTA) TYPE(*CHAR) LEN(132) DCL VAR(&MSGF) TYPE(*CHAR) LEN(10) DCL VAR(&MSGFLIB) TYPE(*CHAR) LEN(10) DCL VAR(&MSGID) TYPE(*CHAR) LEN(7) DCL VAR(&OUTQ) TYPE(*CHAR) LEN(10) DCL VAR(&OUTQLIB) TYPE(*CHAR) LEN(10) DCL VAR(&PATLEN) TYPE(*DEC) LEN(3 0) VALUE(3) DCL VAR(&PATTERN) TYPE(*CHAR) LEN(4) DCL VAR(&POS) TYPE(*DEC) LEN(3 0) VALUE(1) DCL VAR(&QOUTQ) TYPE(*CHAR) LEN(20) DCL VAR(&RESULT) TYPE(*DEC) LEN(3 0) DCL VAR(&SPYMD) TYPE(*CHAR) LEN(6) DCL VAR(&ST) TYPE(*DEC) LEN(3 0) VALUE(1) DCL VAR(&STATUS) TYPE(*CHAR) LEN(37) DCL VAR(&STATUSLEN) TYPE(*DEC) LEN(3 0) VALUE(37) DCL VAR(&TOTITM) TYPE(*CHAR) LEN(20) + VALUE(X'0000000100020003000400050006000700080009') DCL VAR(&TRANSLATE) TYPE(*CHAR) LEN(1) VALUE('1') DCL VAR(&TRIM) TYPE(*CHAR) LEN(1) VALUE('1') DCL VAR(&USER) TYPE(*CHAR) LEN(10) DCL VAR(&WILD) TYPE(*CHAR) LEN(1) VALUE(' ') MONMSG MSGID(CPF0000) EXEC(GOTO CMDLBL(ERROR)) LOOP: + IF COND(%SST(&STATUS 1 2) *EQ %SST(&TOTITM &ST 2)) THEN(GOTO + CMDLBL(COMPLT)) ELSE CMD(DO) CHGVAR VAR(&CT) VALUE(&CT + 1) CHGVAR VAR(&ST) VALUE(&ST + 2) GOTO CMDLBL(LOOP) ENDDO COMPLT: + CHGVAR VAR(&OUTQ) VALUE(%SST(&QOUTQ 1 10)) CHGVAR VAR(&OUTQLIB) VALUE(%SST(&QOUTQ 11 10)) CHKOBJ OBJ(&OUTQLIB/&OUTQ) OBJTYPE(*OUTQ) TAATOOL/CVTOUTQ OUTQ(&OUTQLIB/&OUTQ) OUTLIB(QTEMP) OUTMBR(OUTQP) + REPLACE(*YES) CHGVAR VAR(&DLTYMD) VALUE(%SST(&DLTDAT 2 6)) STRT: + RCVF MONMSG MSGID(CPF0864) EXEC(GOTO CMDLBL(END)) CHGVAR VAR(&DELETE_IT) VALUE('1') IF COND(&USER *NE ' ' *AND &USER *NE &SPUSER *OR &FILE *NE ' ' + *AND &FILE *NE &SPFILE *OR &FORMTYPE *NE ' ' *AND &FORMTYPE + *NE &SPFTYP *OR &DLTYMD *NE '000000' *AND &SPYMD *GT &DLTYMD) + THEN(CHGVAR VAR(&DELETE_IT) VALUE('0')) CHGVAR VAR(&PATTERN) VALUE('ALL') CALL PGM(QCLSCAN) PARM(&STATUS &STATUSLEN &POS &PATTERN &PATLEN + &TRANSLATE &TRIM &WILD &RESULT) IF COND(&RESULT *LE 0) THEN(DO) CHGVAR VAR(&PATTERN) VALUE(&SPSTS) CALL PGM(QCLSCAN) PARM(&STATUS &STATUSLEN &POS &PATTERN + &PATLEN &TRANSLATE &TRIM &WILD &RESULT) IF COND(&RESULT *LE 0) THEN(CHGVAR VAR(&DELETE_IT) VALUE('0')) ENDDO IF COND(&DELETE_IT) THEN(DO) DLTSPLF FILE(&SPFILE) JOB(&SPJNBR/&SPUSER/&SPJNAM) + SPLNBR(&SPFNBR) SELECT(*ALL) CHGVAR VAR(&DLTITMS) VALUE(&DLTITMS + 1) ENDDO GOTO CMDLBL(STRT) END: + TAATOOL/EDTVAR CHROUT(&DLTSTR) NUMINP(&DLTITMS) SNDPGMMSG MSG(&DLTSTR *BCAT 'spool files deleted from output + queue' *BCAT &OUTQ *BCAT 'in library' *BCAT &OUTQLIB) + MSGTYPE(*COMP) RETURN ERROR: + RCVMSG MSGTYPE(*EXCP) MSGDTA(&MSGDTA) MSGID(&MSGID) MSGF(&MSGF) + MSGFLIB(&MSGFLIB) SNDPGMMSG MSGID(&MSGID) MSGF(&MSGFLIB/&MSGF) MSGDTA(&MSGDTA) + MSGTYPE(*ESCAPE) ENDPGM
LATEST COMMENTS
MC Press Online