7.5
2014-03-28

CL Program for AS/400 Systems

This appendix provides the CL program you use with AS/400 systems.

PGM PARM(&WATCHPRTFN &WATCHPRTFL &OUTPUTQS +
&OUTPUTQSLB &OUTPUTQD &OUTPUTQDLB +
&TRIGGERFN &TRIGGERLIB)
/*************************************************************************/
/* WATCH */
/* THIS PROGRAM IS USED TO INTERCEPT SPOOLFILES FROM AN OUTPUT QUEUE AND */
/* TO INSERT A TRIGGER. A NEW FILE IS CREATED WITH THE TRIGGER PREPENDED */
/* TO THE DATA OF THE ORIGINAL SPOOL FILE. THIS NEW FILE IS THEN */
/* TRANSFERRED TO THE DESTINATION OUPTUT QUEUE. */
/* */
/* AUTEUR : STEVE FLEURY */
/* CIE : OBJECTIF LUNE INC. */
/* DATE : 12 JUILLET 2000 */
/* */
/*************************************************************************/
/*************************************************************************/
/* DECLARATION: VARIABLES AND FILES */
/*************************************************************************/
/* */
/* &OUTPUTQS : OUTPUT QUEUE TO WATCH */
/* &OUTPUTQD : OUTPUT QUEUE OF DESTINATION */
/* &TRIGGERFN : FILE NAME FOR THE TRIGGER */
/* &TRIGGERLIB: LIBRARY NAME FOR THE TRIGGER FILE */
/* &SPLFNAME : NAME ATTRIBUTE OF SPOOLFILE */
/* &SPLFUSER : USER ATTRIBUTE OF SPOOLFILE */
/* &SPLFSTS : STATUS ATTRIBUTE OF SPOOLFILE */
/* &SPLFJOB : JOB ATTRIBUTE OF SPOOLFILE */
/* &SPLFNB : NUMBER ATTRIBUTE OF SPOOLFILE */
/* &WATCHPRTFN: NAME OF PRINTER FILE USED TO CREATE THE NEW SPOOLFILE */
/* &WATCHPRTFL: NAME OF THE LIBRARY OF PRTFILE */
/* */
/*************************************************************************/
DCL VAR(&OUTPUTQS) TYPE(*CHAR) LEN(10)
DCL VAR(&OUTPUTQSLB) TYPE(*CHAR) LEN(10)
DCL VAR(&OUTPUTQD) TYPE(*CHAR) LEN(10)
DCL VAR(&OUTPUTQDLB) TYPE(*CHAR) LEN(10)
DCL VAR(&TRIGGERFN) TYPE(*CHAR) LEN(10)
DCL VAR(&TRIGGERLIB) TYPE(*CHAR) LEN(10)
DCL VAR(&SPLFNAME) TYPE(*CHAR) LEN(10)
DCL VAR(&SPLFUSER) TYPE(*CHAR) LEN(10)
DCL VAR(&SPLFSTS) TYPE(*CHAR) LEN(3)
DCL VAR(&SPLFJOB) TYPE(*CHAR) LEN(10)
DCL VAR(&SPLFNB) TYPE(*CHAR) LEN(6)
DCL VAR(&WATCHPRTFN) TYPE(*CHAR) LEN(10)
DCL VAR(&WATCHPRTFL) TYPE(*CHAR) LEN(10)
DCLF FILE(OBJLUNE/WATCHWORK)
/*************************************************************************/
/* CREATE THE TEMPORARY FILE NEEDED DURING THE PROGRAM */
/*************************************************************************/
CRTPF FILE(QTEMP/TRANSITF) RCDLEN(200) +
TEXT('file to build the new spoolfile')
MONMSG MSGID(CPF7302) /* file already exists */
/*************************************************************************/
/* TAKE A SNAPSHOT OF THE OUTPUT QUEUE IN A FILE AND SEND IT IN THE */
/* WORKFILE FILE. THIS WILL ALLOW US TO MANIPULATE THE CONTENT. */
/*************************************************************************/
WRKOUTQ OUTQ(&OUTPUTQSLB/&OUTPUTQS) OUTPUT(*PRINT)
CPYSPLF FILE(QPRTSPLQ) TOFILE(OBJLUNE/WATCHWORK) +
SPLNBR(*LAST)
DLTSPLF FILE(QPRTSPLQ) SPLNBR(*LAST)
/*************************************************************************/
/* READ THE CONTENT OF THE WORKFILE TO DETERMINE IF THERE ARE SPOOLFILES */
/* TO BE TREATED. IF THE SPOOLFILE STATUS IS NOT RDY THIS IS BECAUSE */
/* WE ARE IN THE HEATHER LINES OR THE STATUS IS HLD OR SAV, ETC... */
/*************************************************************************/
BEGIN: RCVF
MONMSG MSGID(CPF0864) EXEC(GOTO CMDLBL(END)) /* eof +
of file encountered */
IF COND(%SST(&WATCHWORK 36 3) *NE RDY) THEN(GOTO +
CMDLBL(BEGIN)) /* bypass of heathers and +
non ready spools */
CHGVAR VAR(&SPLFNAME) VALUE(%SST(&WATCHWORK 2 10))
CHGVAR VAR(&SPLFUSER) VALUE(%SST(&WATCHWORK 13 10))
CHGVAR VAR(&SPLFSTS) VALUE(%SST(&WATCHWORK 36 3))
CHGVAR VAR(&SPLFJOB) VALUE(%SST(&WATCHWORK 82 10))
CHGVAR VAR(&SPLFNB) VALUE(%SST(&WATCHWORK 93 6))
/*************************************************************************/
/* CREATION OF NEW SPOOLFILE FROM THE TRIGGER AND DATA FROM THE */
/* SPOOLFILE IN TRANSIT. THE PROCEDURE IS THE FOLLOWING: */
/* - COPY THE TRIGGER INTO A TEMP FILE. */
/* - APPEND THE SPOOLFILE INTO THE TEMP FILE */
/* - CREATE A SPOOLFILE FROM THIS PHYSICAL FILE */
/*************************************************************************/
CPYF FROMFILE(&TRIGGERLIB/&TRIGGERFN) +
TOFILE(QTEMP/TRANSITF) FROMMBR(*ALL) +
MBROPT(*REPLACE) FMTOPT(*NOCHK)
CPYSPLF FILE(&SPLFNAME) TOFILE(QTEMP/TRANSITF) +
JOB(&SPLFNB/&SPLFUSER/&SPLFJOB) MBROPT(*ADD)
CPYF FROMFILE(QTEMP/TRANSITF) +
TOFILE(&WATCHPRTFL/&WATCHPRTFN) +
PRINT(*COPIED) FMTOPT(*NOCHK)
CHGSPLFA FILE(&WATCHPRTFN) SPLNBR(*LAST) +
OUTQ(&OUTPUTQDLB/&OUTPUTQD)
/*************************************************************************/
/* ERASE THE TEMPORARY SPOOLFILES CREATED BY THE COPY OPERATIONS. */
/*************************************************************************/
DLTSPLF FILE(QSYSPRT) SPLNBR(*LAST) SELECT(*CURRENT +
*OUTQ)
GOTO BEGIN
END