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