/*********************************************************************/ /* */ /* THE TRANSFORM EXIT PROGRAM FOR PDFING */ /* */ /* PROGRAM: PDFING - AUTHOR DAVID FOWLE - 10/NOV/2003 */ /* */ /* - MOD DAVID FOWLE - 01/JUL/2005 */ /* - MOD DAVID FOWLE - 03/AUG/2005 */ /* - MOD DAVID FOWLE - 25/MAY/2012 */ /* */ /* THIS IS A VERY THIN LAYER OVER THE OS400 API: QWPZHPTR THAT */ /* MAY BE USED IN CONJUNCTION WITH PDFING. IT DETERMINES THE TYPE */ /* OF A SPOOLED-FILE AND SETS THE TRANSFORM PARAMETERS CORRECTLY. */ /* */ /* TO USE THIS PROGRAM, CONFIGURE YOUR OUTPUT-QUEUE AS FOLLOWS: */ /* */ /* CHGOUTQ OUTQ(PDFING) DESTTYPE(*OTHER) TRANSFORM(NO) + */ /* MFRMDLTYP(*HP4) USRDTATFM(PDFING/PDFING) */ /* */ /*********************************************************************/ PGM PARM((&POPTION)(&PINSDTA)(&PINSLEN)(&PSPLDTA)(&PSPLLEN) + (&POTSDTA)(&POTSLEN)(&POTSUSE)(&PTRNDTA)(&PTRNLEN)(&PTRNUSE)) DCL &POPTION *CHAR (4) /* PROCESSING OPTION */ DCL &PINSDTA *CHAR (1024) /* INPUT INFORMATION */ DCL &PINSLEN *CHAR (4) /* INPUT INFORMATION LENGTH */ DCL &PSPLDTA *CHAR (8192) /* SPOOLED-FILE DATA BUFFER */ DCL &PSPLLEN *CHAR (4) /* SPOOLED-FILE DATA BUFFER LENGTH */ DCL &POTSDTA *CHAR (256) /* OUTPUT INFORMATION */ DCL &POTSLEN *CHAR (4) /* OUTPUT INFORMATION LENGTH */ DCL &POTSUSE *CHAR (4) /* OUTPUT INFORMATION USED */ DCL &PTRNDTA *CHAR (8192) /* TRANSFORM OUTPUT BUFFER */ DCL &PTRNLEN *CHAR (4) /* TRANSFORM OUTPUT BUFFER LENGTH */ DCL &PTRNUSE *CHAR (4) /* TRANSFORM OUTPUT BUFFER LENGTH USED */ /**/ DCL &WINSDTA *CHAR (1024) /* WORK INPUT INFORMATION */ DCL &WINSLEN *CHAR (4) /* WORK INPUT INFORMATION */ /**/ DCL &WTRNDTA *CHAR (1024) /* TRANSFORMED-DATA (OPEN-TIME) */ DCL &WTRNLEN *DEC (8 0) /* TTRANSFORMED-DATA LENGTH */ DCL &WATTBIN *CHAR (4) /* WORK ATTRIBUTE (BINARY) */ DCL &WATTLEN *DEC (8 0) /* WORK ATTRIBUTE LENGTH */ /**/ DCL &SPLATTR *CHAR (5000) /* SPOOLED-FILE ATTRIBUTES BUFFER */ DCL &SPLALEN *CHAR (4) /* SPOOLED-FILE ATTRIBUTES LENGTH */ DCL &SPLNAMJ *CHAR (26) /* DUMMY JOB IDENTIFIER */ DCL &SPLIDNJ *CHAR (16) /* INTERNAL POINTER TO JOB */ DCL &SPLIDNF *CHAR (16) /* INTERNAL POINTER TO FILE */ DCL &SPLNAMF *CHAR (10) /* DUMMY SPOOLED-FILE NAME */ DCL &SPLNUMF *CHAR (4) /* DUMMY SPOOLED-FILE NAME */ /**/ DCL &BINZERO *CHAR (4) /* BINARY ZEROS */ DCL &BINERRC *CHAR (8) /* ERROR-CODE */ /**/ DCL &BINTWO *CHAR (4) /* BINARY TWO */ DCL &PCLRST *CHAR (4) /* PCL RESET */ /**/ /*********************************************************************/ /* ALL UNMONITORED ERRORS ARE FATAL */ MONMSG MSGID(CPF0000 MCH0000) EXEC(GOTO ERRORS) /**/ /*********************************************************************/ /* FOR ALL PROCESSING-OPTIONS */ /*********************************************************************/ /**/ /* SET BINARY-ZERO FIELDS */ CHGVAR VAR(%BIN(&BINZERO)) VALUE(0) CHGVAR VAR(%SST(&BINERRC 1 4)) VALUE(&BINZERO) CHGVAR VAR(%SST(&BINERRC 5 4)) VALUE(&BINZERO) /**/ /* SET UP WORKING INPUT OPTIONS */ CHGVAR VAR(&WINSDTA) VALUE(&PINSDTA) CHGVAR VAR(&WINSLEN) VALUE(&PINSLEN) CHGVAR VAR(%SST(&WINSDTA 27 10)) VALUE('*NONE') /* USE MFRTYPMDL */ CHGVAR VAR(%SST(&WINSDTA 129 26)) VALUE('*INT') /* INTERNAL JOB-ID */ CHGVAR VAR(%SST(&WINSDTA 155 10)) VALUE('*INT') /* INTERNAL FIL-ID */ CHGVAR VAR(%SST(&WINSDTA 199 1)) VALUE('1') /* DO ALIGNMENT */ /**/ /* SET OPTION SPECIFIC OUTPUT BUFFER */ CHGVAR VAR(%SST(&POTSDTA 01 4)) VALUE(&BINZERO) /* NO ERROR */ CHGVAR VAR(%SST(&POTSDTA 05 1)) VALUE('1') /* TRANSFORM*/ CHGVAR VAR(%SST(&POTSDTA 06 1)) VALUE('0') /* PASS INPUT */ CHGVAR VAR(%SST(&POTSDTA 07 1)) VALUE('1') /* ONE COPY */ CHGVAR VAR(%SST(&POTSDTA 13 4)) VALUE(&BINZERO) CHGVAR VAR(%SST(&POTSDTA 17 4)) VALUE(&BINZERO) CHGVAR VAR(%SST(&POTSDTA 21 4)) VALUE(&BINZERO) CHGVAR VAR(%SST(&POTSDTA 25 4)) VALUE(&BINZERO) CHGVAR VAR(%SST(&POTSDTA 29 4)) VALUE(&BINZERO) CHGVAR VAR(%SST(&POTSDTA 33 4)) VALUE(&BINZERO) CHGVAR VAR(%SST(&POTSDTA 37 4)) VALUE(&BINZERO) CHGVAR VAR(%SST(&POTSDTA 41 4)) VALUE(&BINZERO) /**/ /*********************************************************************/ /* PASS PROCESSING PARAMETERS THRU TO API */ /*********************************************************************/ /**/ CALL PGM(QWPZHPTR) PARM(&POPTION &WINSDTA &WINSLEN + &PSPLDTA &PSPLLEN + &POTSDTA &POTSLEN &POTSUSE + &PTRNDTA &PTRNLEN &PTRNUSE + &BINERRC) /**/ /*********************************************************************/ /* AFTER PROCESSING-OPTION 20 */ /*********************************************************************/ /**/ IF COND(%BIN(&POPTION) *EQ 20) THEN(DO) /* BUILD PARAMETERS FOR SPOOOLED_FILE INFORMATION API */ CHGVAR VAR(%BIN(&SPLALEN)) VALUE(4000) CHGVAR VAR(&SPLNAMJ) VALUE('*INT') CHGVAR VAR(&SPLIDNJ) VALUE(%SST(&PINSDTA 97 16)) CHGVAR VAR(&SPLIDNF) VALUE(%SST(&PINSDTA 113 16)) CHGVAR VAR(&SPLNAMF) VALUE('*INT') CHGVAR VAR(&SPLNUMF) VALUE(%SST(&PINSDTA 165 4)) /* CALL API TO RECEIVE SPOOLED-FILE ATTRIBUTES */ CALL PGM(QUSRSPLA) PARM(&SPLATTR &SPLALEN 'SPLA0200' + &SPLNAMJ &SPLIDNJ &SPLIDNF + &SPLNAMF &SPLNUMF &BINERRC) /* SET EXIT-PROGRAM NAME FOR PDFING */ CHGVAR VAR(%SST(&SPLATTR 3716 10)) VALUE('*PDFING') /* SEND COMMAND-DATA */ CHGVAR VAR(%SST(&POTSDTA 008 1)) VALUE('1') /* IF *SCS AND NO ATRN - FAKE TRANSFORM API OUTPUT */ IF COND(%SST(&SPLATTR 327 04) *EQ '*SCS' + *AND %SST(&SPLATTR 737 10) *EQ '*NONE' + *AND %SST(&SPLATTR 1025 01) *EQ 'N' + *AND %SST(&SPLATTR 1053 01) *EQ 'N') THEN(DO) CHGVAR VAR(%SST(&POTSDTA 05 1)) VALUE('2') ENDDO /* IF *USERASCII - FAKE TRANSFORM API OUTPUT */ IF COND(%SST(&SPLATTR 327 10) *EQ '*USERASCII') THEN(DO) CHGVAR VAR(%SST(&POTSDTA 05 1)) VALUE('2') ENDDO /* CHANGE SPOOLED-FILE TYPE FOR *SCS WITH ATRN COMMANDS */ IF COND(%SST(&SPLATTR 327 04) *EQ '*SCS' + *AND %SST(&POTSDTA 005 01) *EQ '1') THEN(DO) CHGVAR VAR(%SST(&SPLATTR 327 6)) VALUE('*AFPDS') ENDDO /* COPY CHANGED ATTRIBUTES TO COMMAND-DATA BUFFER */ IF COND(&PTRNUSE *NE &BINZERO + *AND %SST(&POTSDTA 05 1) *EQ '1') THEN(DO) CHGVAR VAR(&WTRNDTA) VALUE(&PTRNDTA) CHGVAR VAR(&WTRNLEN) VALUE(%BIN(&PTRNUSE)) CHGVAR VAR(&PTRNDTA) VALUE(&SPLATTR) CHGVAR VAR(&WATTBIN) VALUE(%SST(&SPLATTR 1 4)) CHGVAR VAR(&WATTLEN) VALUE(%BIN(&WATTBIN) + 1) CHGVAR VAR(%SST(&PTRNDTA &WATTLEN &WTRNLEN)) VALUE(&WTRNDTA) CHGVAR VAR(&WATTLEN) VALUE(&WATTLEN + &WTRNLEN - 1) CHGVAR VAR(%BIN(&PTRNUSE)) VALUE(&WATTLEN) ENDDO IF COND(&PTRNUSE *EQ &BINZERO + *OR %SST(&POTSDTA 05 1) *EQ '2') THEN(DO) CHGVAR VAR(&PTRNUSE) VALUE(%SST(&SPLATTR 1 4)) CHGVAR VAR(%SST(&SPLATTR 5 4)) VALUE(&PTRNUSE) CHGVAR VAR(&PTRNDTA) VALUE(&SPLATTR) ENDDO /**/ ENDDO /**/ /*********************************************************************/ /* AFTER PROCESSING-OPTION 40 */ /*********************************************************************/ /**/ IF COND(%BIN(&POPTION) *EQ 40) THEN(DO) /* SET BINARY-TWO AND PCL RESET VARIABLES */ CHGVAR VAR(%BIN(&BINTWO)) VALUE(2) CHGVAR VAR(&PCLRST) VALUE(X'1B45') /* REMOVE IRRELEVANT PCL RESET */ IF COND(&PTRNUSE *EQ &BINTWO + *AND %SST(&PTRNDTA 1 2) *EQ &PCLRST) THEN(DO) CHGVAR VAR(&PTRNUSE) VALUE(&BINZERO) ENDDO /**/ ENDDO /**/ /*********************************************************************/ /* NORMAL END OF PROGRAM */ /*********************************************************************/ /**/ RETURN /**/ /*********************************************************************/ /* ERROR END OF PROGRAM */ /*********************************************************************/ /**/ ERRORS: /**/ SNDPGMMSG MSGID(CPF3C20) MSGF(QCPFMSG) MSGDTA(PDFING) + MSGTYPE(*ESCAPE) /**/ ENDPGM