* $$ JOB JNM=PDFPATCH, X /INCLUDE POWER CARDSESA // JOB PDFPATCH * ---------------------------------- * * ---------------------------------- * * -- VSE2PDF VERSION 03.00.00 -- * * -- SPEICAL SOURCE PDF -- * * ---------------------------------- * * ---------------------------------- * * THIGPEN ENTERPRISES, INC. * * COPYRIGHT (C) 1999-2004 * * ---------------------------------- * * ---------------------------------- * * In order to install VSE2PDF it * * will be necessary to specify the * * Library and Sublibrary that is to * * hold the product. * * ---------------------------------- * * Please enter: * * * * // SETPARM PDFLIB='lib.sublib' * * * * at the below PAUSE * * ---------------------------------- * // SETPARM PDFLIB='OEMLIB.TEIPDF30' // PAUSE ENTER SETPARM PDFLIB='LIB.SUBLIB' /* // EXEC LIBR,PARM='ACC SUB=&PDFLIB.' CATALOG TEIUSER1.A EOD=/+ REPLACE=YES BKEND MACRO 00000120 ALIGN &X,&Y 00000140 LCLC &B,&O 00000160 &B SETC '&X' 00000180 &O SETC '&Y' 00000200 AIF ('&B' NE '').BOK 00000220 &B SETC '4' 00000240 .BOK ANOP 00000260 AIF ('&O' NE '').OOK 00000280 &O SETC '0' 00000300 .OOK ANOP 00000320 MNOTE *,' ALIGN &B,&O' 00000340 A&SYSNDX DS ((*-&SYSECT+&B-1)/&B*&B-*+&SYSECT+&O)C 00000360 L&SYSNDX EQU *-A&SYSNDX 00000380 MEND 00000400 *********************************************************************** 00000700 * * 00000800 * TEIUSER1 * 00000900 * THIS ROUTINE IS DESIGNED TO BE MODIFIED BY EACH SITE AS NEEDED. * 00001000 * IT MUST BE COMPILED AS A PHASE. * 00001100 * * 00001200 * THIS ROUTINE IS CALLED: * 00001300 * 1) AFTER ALL POWER FIELDS ARE INTERAGATED AND PDF OUTPUT * 00001400 * PARAMATERS ARE SET. * 00001500 * * 00001600 * INPUT: * 00001700 * REG 0 - CALL TYPE * 00001800 * 0 OPEN SPL FOR USER OVERRIDES (TEIUSER1_OPEN_SPL) * 00001900 * 4 PAGE CHECK (TEIUSER1_PAGE_CHECK) * 00002000 * PARM 1 - DUMMY * 00002100 * PARM 2 - ADDRESS OF TEIY000_AREA (COPYBOOK TEIY000) * 00002200 * PARM 3 - ADDRESS OF PAGE TABLE * 00002300 * PARM 4 - LENGTH OF PAGE TABLE * 00002400 * PARM 5 - LENGTH OF PAGE TABLE LINE LENGTH * 00002500 * * 00002600 * USAGE: * 00002700 * WHEN CONTROL IS PASSED TO THIS ROUTINE, THE OUTPUT CONTROL FIELDS * 00002800 * CONTAINED IN COPYBOOK TEIY003 HAVE BEEN SET AS DETERMINED BY THE * 00002900 * LOGIC EXPLAINED IN THE REFFERENCE GUIDE. THIS USER ROUTINE CAN * 00003000 * MODIFY THEM AS NEEDED. THE INFORMATION FROM THE POWER CARDS CAN * 00003100 * BE FOUND IN THE FIELDS STARTING WITH PWR_. THE FIELDS THAT CAN BE * 00003200 * MODIFIED BY THIS ROUTINE ALL START WITH JOB_. ADDITIONAL POWER * 00003300 * INFORMATION CAN BE FOUND IN THE COPY OF THE POWER SPL IN THE * 00003400 * AREAL PWR_SPL. * 00003500 * * 00003600 * THIS ROUTINE IS CALLED AT 3 DIFFERENT POINTS IN THE OUTPUT LOGIC. * 00003700 * R0=0 (TEIUSER1_OPEN_SPL) * 00003800 * AT THIS POINT, ALL INFORMATION FROM THE POWER JOB, LST, AND * 00003900 * PUN JECL HAS BEEN PROCESSED. IF A SCRIPT WAS INCLUDED IN THE * 00004000 * JECL STATEMENTS, THEN THE SCRIPT FILE HAS ALSO BE PROCESSED. * 00004100 * AT THIS POINT, ANY CONTROL INFORMATION WITHIN THE OUTPUT HAS * 00004200 * NOT BEEN PROCESSED. * 00004300 * R0=4 (TEIUSER1_PAGE_OVERRIDE) * 00004400 * AT THIS POINT, A PAGE IS READY TO BE PRINTED. ALL CONTROL * 00004500 * INFORMATION WITHIN THE OUTPUT WAS PROCESSED AND THE PAGE IS * 00004600 * READY TO BE PROCESSED. ADDITIONALLY, AT THIS POINT, THE * 00004700 * OUTPUT PAGE IS ALSO PROVIDED SO AS TO FACILITATE EXTRACTING * 00004800 * DATA THAT MAY BE USED TO DETERMINE DESTINATION. THE TABLE * 00004900 * ADDRESS, TOTAL LENGTH, AND INDIVIDUAL LINE LENGTH ARE PASSED * 00005000 * TO THIS ROUTINE AS THE SECOND, THIRD, AND FOURTH PARMATERS * 00005100 * (LOADED TO R4, R5, AND R6 BY THIS SAMPLE). THE LAYOUT OF EACH * 00005200 * LINE IS MAPED BY THE LINE DESCT IN THE TEIY003 COPYBOOK AND * 00005300 * MAY CHANGE AT DURING ANY PROGRAM UPDATE. * 00005400 * BYTE 0 LINE_FLAG1 * 00005500 * '00000001' LINE_DROP WHEN SET, LINE WILL BE DROPED * 00005600 * BYTE 1 LINE_FCB THE FCB CHANNEL CHARACTER * 00005700 * BYTES 2-3 RESERVED * 00005800 * BYTES 4-5 LINE POSITION X COORDINATE * 00005900 * BYTES 6-7 LINE POSITION Y COORDINATE * 00006000 * BYTES 8-9 LINE_HEIGHT IN POINTS (72 POINTS = 1 INCH) * 00006100 * BYTES 10-11 LINE_LENGTH LENGTH OF DATA ON THE LINE * 00006200 * BYTES 12-N LINE_DATA (LENGTH IS EQUAL TO PARM 4) * 00006300 * (THE PARM 4 LENGTH IS FIXED FOR EACH OCCURANCE OF THE TABLE, * 00006400 * BUT THE HALFWORD LENGTH IS HOW MAY PRINT POSITIONS OF EACH * 00006500 * LINE ARE ACTUALLY USED. DATA AFTER THIS LENGTH WILL BE SET * 00006600 * TO X'00'.) * 00006700 * REVIEW THE LINE DSECT AT THE END OF THIS SAMPLE PROGRAM. * 00006800 * PLEASE NOTE THE FIELD SEGMENT_FLAG. THIS FLAG INDICATES IF * 00006900 * THIS IS THE FIRST PAGE OF AN OUTPUT (EQUALS SEGMENT_START). * 00007000 * NORMALLY, YOU WOULD NOT WANT TO DO ANYTHING IN THIS ROUTINE * 00007100 * IF THIS FLAG IS NOT SET. IF THIS FIELD IS NOT SET UPON ENTRY, * 00007200 * BUT IS SET AT EXIT, THE CURRENT OUTPUT SEGMENT WILL BE CLOSED * 00007300 * AND A NEW OUTPUT SEGMENT STARTED. THIS ROUTINE WILL NOT GET * 00007400 * CONTROL AGAIN UNTIL THE NEXT PAGE. * 00007500 * R0=8 (TEIUSER1_AUTOSEGMENT) * 00007600 * AT THIS POINT, THE RESULTING FILE EXCEEDS THE MAX_PAGES * 00007700 * SETTING AND A NEW SEGMENT IS ABOUT TO BE CREATED. THE NEW * 00007800 * SEGMENT NUMBER CAN BE FOUND IN JOB_AUTOSEG_NBR. * 00007900 * IT IS THE RESPONSIBILITY OF THIS ROUTINE TO GENERATE A UNIQUE * 00008000 * OUTPUT FILE NAME. IF THE NAME IS NOT MODIFIED AND THE OUTPUT * 00008100 * IS BEING DIRECTED TO AN FTP SERVER, THE PREVIOUS SEGMENTS * 00008200 * WILL BE OVERWRITTEN. * 00008300 * * 00008400 *********************************************************************** 00008500 TEIUSER1 RMODE ANY 00008600 TEIUSER1 AMODE ANY 00008700 TEIUSER1 CSECT ENTRY POINT 00008800 B COPYRGHTEND-*(,R15) BRANCH AROUND LABELS 00008900 MAINNAME DC CL8'TEIUSER1' 00009000 COMVERS DC CL8'02.02.00' VERSION AND RELEASE 00009100 COMADATE DC CL8'&SYSDATC' ASSEMBLED DATE 00009200 COMATIME DC CL8'&SYSTIME' ASSEMBLED TIME 00009300 COPYRGHT DC C'COPYRIGHT 1999-2002 THIGPEN ENTERPRISES, INC' 00009400 COPYRGHTEND DS 0F 00009500 *..R8 = BASE REGISTER 1 00009600 *..R9 = BASE REGISTER 2 00009700 *..R10 = BASE REGISTER 3 00009800 USING TEIUSER1,R8,R9,R10 PROVIDE BASE REGISTERS 00009900 STM R14,R12,12(R13) SAVE CALLERS REGISTERS 00010000 LR R8,R15 LOAD THE BASE REGISTERS 00010100 LA R9,4095(,R8) . 00010200 LA R9,1(,R9) . 00010300 LA R10,4095(,R9) . 00010400 LA R10,1(,R10) . 00010500 LA R14,MYSAVE POINT TO MY SAVE AREA 00010600 ST R13,4(,R14) MAKE ME POINT TO CALLER 00010700 ST R14,8(,R13) MAKE CALLER POINT TO ME 00010800 LR R13,R14 POINT R13 TO NEW SAVE AREA 00010900 B ENTRY_EXIT 00011000 DS 0F 00011100 DC C'SAVEAREA' 00011200 MYSAVE DC 9D'0' SAVE AREA 00011300 ENTRY_EXIT DS 0H 00011400 GETPARMS DS 0H 00011500 *..R0 = FUNCTION 00011600 LM R2,R7,0(R1) 00011700 LA R7,0(,R7) CLEAR HIGH BIT OF LAST PARM 00011800 *..R2 = PWR PARMS DSECT 00011900 *..R3 = JOB PARMS DSECT 00012000 USING TEIY002_AREA,R2 00012100 USING TEIY000_AREA,R3 00012200 USING TEIY003_AREA,JOB_TEIY003 00012300 USING MAPOFSPL,R12 00012400 L R2,@TEIY002 00012500 L R12,@PWRSPL 00012600 *..R12 = POWER SPL AREA 00012700 MAIN_LINE DS 0H 00012800 LA R14,ML_BRANCH_RETURN 00012900 LR R15,R0 00013000 B ML_BRANCH(R15) 00013100 ML_BRANCH DS 0H 00013200 B OPEN_SPL R0=0 00013300 B PAGE_CHECK R0=4 00013400 B AUTOSEGMENT_NAME R0=8 00013500 ML_BRANCH_RETURN DS 0H 00013600 B ML_ERRORS(R15) 00013700 ML_ERRORS DS 0H 00013800 B RETURN0 00013900 B RETURN4 00014000 B RETURN8 00014100 B RETURN16 00014200 *********************************************************************** 00014300 * RETURN SETUP * 00014400 *********************************************************************** 00014500 RETURN16 DS 0H RETURN WITH RC = 16 00014600 LA R15,16 . 00014700 B RETURN . 00014800 RETURN12 DS 0H RETURN WITH RC = 12 00014900 LA R15,12 . 00015000 B RETURN . 00015100 RETURN8 DS 0H RETURN WITH RC = 8 00015200 LA R15,8 . 00015300 B RETURN . 00015400 RETURN4 DS 0H RETURN WITH RC = 4 00015500 LA R15,4 . 00015600 B RETURN . 00015700 RETURN0 DS 0H RETURN WITH RC = 0 00015800 LA R15,0 . 00015900 RETURN DS 0H RETURN 00016000 LA R13,MYSAVE POINT TO MY SAVE AREA 00016100 L R13,4(,R13) GET SAVE AREA ADDRESS 00016200 ST R15,16(,R13) SAVE RETURN CODE 00016300 LM R14,R12,12(R13) RESTORE REGISTERS 00016400 BSM 0,R14 GO BACK 00016500 *********************************************************************** 00016600 * START OF SPL HANDLER CODE * 00016700 *********************************************************************** 00016800 *********************************************************************** 00016900 * OPEN SPL HANDLER * 00017000 * RETURNS VIA R14. * 00017100 *********************************************************************** 00017200 OPEN_SPL DS 0H 00017300 ST R14,OPEN_SPL_SAVE 00017400 STM R4,R7,OPEN_SPL_SAVE+4 00017500 * INSERT LOCAL CODE HERE 00017600 * 00017700 * TEST CODE IF YOU WANT TO SEE WHAT IS PASSED TO THE EXIT ROUTINE 00017800 * LA R15,TEIY003_LENGTH(,R3) 00017900 * PDUMP (R3),(R15) 00018000 * LA R15,TEIY002_LENGTH(,R2) 00018100 * PDUMP (R2),(R15) 00018200 * 00018300 * EXAMPLE OF APPENDING THE JOB DATETIME TO THE OUTPUT FILE NAME 00018400 * LA R4,JOB_FILENAME_2 00018500 * LA R5,L'JOB_FILENAME_2(,R4) 00018600 OS_LOOP DS 0H FIND END OF FILE NAME SO THAT 00018700 * BCTR R5,0 WE CAN ADD A SUFFIX 00018800 * CR R5,R4 00018900 * BL OS_EXIT SHOULD NEVER HIT THIS LINE 00019000 * CLC 0(4,R5),=C'.PDF' UNLESS FILE NAME WAS TOO LONG 00019100 * BNE OS_LOOP 00019200 * MVC 1(L'JOBDATE,R5),JOBDATE 00019300 * MVC 1+L'JOBDATE(L'JOBTIME,R5),JOBTIME 00019400 * MVC 1+L'JOBDATE+L'JOBTIME(4,R5),=C'.PDF' 00019500 * 00019600 * EXAMPLE OF OVERRIDING OUTPUT TO DIRECT TO A VSE LIBRARY 00019700 * MVC JOB_PDF_1,=CL8'LIBR ' 00019800 * MVC JOB_FILENAME_1,SPACES 00019900 * MVC JOB_FILENAME_2,SPACES 00020000 * MVC JOB_FILENAME_1(17),=CL17'IJSYSRS.SYSRES ' 00020100 * MVC JOB_FILENAME_2(17),=CL17'MYTEST.PDF ' 00020200 OS_GOOD DS 0H 00020300 LA R15,0(0) 00020400 OS_EXIT DS 0H 00020500 L R14,OPEN_SPL_SAVE 00020600 LM R4,R7,OPEN_SPL_SAVE+4 00020700 BR R14 00020800 OPEN_SPL_SAVE DS 5F 00020900 *********************************************************************** 00021000 * PAGE CHECK HANDLER * 00021100 * RETURNS VIA R14. * 00021200 *********************************************************************** 00021300 PAGE_CHECK DS 0H 00021400 ST R14,PAGE_CHECK_SAVE 00021500 STM R4,R7,PAGE_CHECK_SAVE+4 00021600 * INSERT LOCAL CODE HERE 00021700 * EXAMPLE OF ONLY LOOKING DURING FIRST PAGE PROCESSING 00021800 * TM JOB_SEGMENT_FLAG,JOB_SEGMENT_START 00021900 * BNO PC_GOOD 00022000 * EXAMPLE OF ONLY EXAMANING LINE 4, POSITION 5-15 FOR 'MAIN OFFICE' 00022100 * LA R7,LINE_PREFIX_L(,R6) LENGTH OF EACH LINE ENTRY IN R7 00022200 * LH R1,=H'4' WE WANT LINE 4 00022300 * BCTR R1,0 SUBTRACT 1 BEFORE MULTIPLY 00022400 * STH R1,PC_LINE_OFFSET 00022500 * MH R7,PC_LINE_OFFSET 00022600 * LA R7,LINE_PREFIX_L(R7,R4) R7 = FIRST BYTE OF LINE WANTED 00022700 * CLC 5-1(15-5+1,R7),=C'MAIN OFFICE' 5 IS START 15 IS END 00022800 * BNE PC_GOOD DON'T WANT IT 00022900 * SO SOMETHING HERE FOR MAIN OFFICE REPORTS 00023000 PC_GOOD DS 0H 00023100 LA R15,0(0) 00023200 PC_EXIT DS 0H 00023300 L R14,PAGE_CHECK_SAVE 00023400 LM R4,R7,PAGE_CHECK_SAVE+4 00023500 BR R14 00023600 PAGE_CHECK_SAVE DS 5F 00023700 PC_LINE_OFFSET DC H'0' 00023800 *********************************************************************** 00023900 * AUTOSEGMENT NAME * 00024000 * RETURNS VIA R14. * 00024100 *********************************************************************** 00024200 AUTOSEGMENT_NAME DS 0F 00024300 ST R14,PAGE_CHECK_SAVE 00024400 STM R4,R7,PAGE_CHECK_SAVE+4 00024500 * INSERT LOCAL CODE HERE 00024600 * EXAMPLE OF ADDING A SUFFIX TO THE FILE NAME 00024700 L R1,JOB_AUTOSEG_NBR 00024800 LTR R1,R1 00024900 BNP AN_GOOD 00025000 MVC AN_SAVE,=CL30' ' 00025100 LA R4,JOB_FILENAME_2 00025200 LA R5,L'JOB_FILENAME_2 00025300 SR R7,R7 00025400 AN_NEXT DS 0H 00025500 BCTR R5,0 00025600 LA R6,0(R5,R4) 00025700 CLI 0(R6),C' ' SKIP TRAILING SPACES 00025800 BE AN_NEXT 00025900 CLI 0(R6),C'.' FIND LAST '.' 00026000 BE AN_DOT 00026100 LA R7,1(,R7) COUNT POSITIONS IN LAST NODE 00026200 B AN_NEXT 00026300 AN_DOT DS 0H 00026400 EX R7,AN_MVC1 TEMP SAVE OF THE LAST NODE 00026500 L R1,JOB_AUTOSEG_NBR 00026600 C R1,=F'1' 00026700 BE AN_DOT3 00026800 AN_DOT2 DS 0H 00026900 BCTR R5,0 00027000 LA R6,0(R5,R4) 00027100 CLI 0(R6),C'.' FIND LAST '.' 00027200 BNE AN_DOT2 00027300 AN_DOT3 DS 0H 00027400 CVD R1,PACK8 00027500 UNPK UNPACK10,PACK8 00027600 OI UNPACK10+L'UNPACK10-1,X'F0' 00027700 MVI 0(R6),C'.' PUT NEW NAME SEP CHARACTER 00027800 MVC 1(5,R6),UNPACK10+5 MOVE LAST 5 POSITIONS OF NBR 00027900 LA R6,1+5(,R6) BUMP PAST NEW STUFF 00028000 EX R7,AN_MVC2 GET BACK LAST NODE 00028100 AN_GOOD DS 0H 00028200 LA R15,0(0) 00028300 AN_EXIT DS 0H 00028400 L R14,PAGE_CHECK_SAVE 00028500 LM R4,R7,PAGE_CHECK_SAVE+4 00028600 BR R14 00028700 AN_MVC1 MVC AN_SAVE(0),0(R6) 00028800 AN_MVC2 MVC 0(0,R6),AN_SAVE 00028900 AN_SAVE DS CL30 00029000 *********************************************************************** 00029100 LTORG 00029200 *********************************************************************** 00029300 * END OF SPL HANDLER CODE * 00029400 *********************************************************************** 00029500 PACK8 DS CL8 00029600 UNPACK10 DS CL10 00029700 EJECT 00029800 MAPOFSPL PWRSPL TYPE=MAP 00029900 EJECT 00030000 TEIY000 00030100 TEIY002 00030200 TEIY003 00030300 EJECT 00030400 R0 EQU 0 00030500 R1 EQU 1 00030600 R2 EQU 2 00030700 R3 EQU 3 00030800 R4 EQU 4 00030900 R5 EQU 5 00031000 R6 EQU 6 00031100 R7 EQU 7 00031200 R8 EQU 8 00031300 R9 EQU 9 00031400 R10 EQU 10 00031500 R11 EQU 11 00031600 R12 EQU 12 00031700 R13 EQU 13 00031800 R14 EQU 14 00031900 R15 EQU 15 00032000 END 00032100 BKEND /+ CATALOG TEIUSER2.A EOD=/+ REPLACE=YES BKEND MACRO 00000120 ALIGN &X,&Y 00000140 LCLC &B,&O 00000160 &B SETC '&X' 00000180 &O SETC '&Y' 00000200 AIF ('&B' NE '').BOK 00000220 &B SETC '4' 00000240 .BOK ANOP 00000260 AIF ('&O' NE '').OOK 00000280 &O SETC '0' 00000300 .OOK ANOP 00000320 MNOTE *,' ALIGN &B,&O' 00000340 A&SYSNDX DS ((*-&SYSECT+&B-1)/&B*&B-*+&SYSECT+&O)C 00000360 L&SYSNDX EQU *-A&SYSNDX 00000380 MEND 00000400 *********************************************************************** 00000700 * * 00000800 * TEIUSER2 * 00000900 * THIS ROUTINE IS DESIGNED TO BE MODIFIED BY EACH SITE AS NEEDED. * 00001000 * IT MUST BE COMPILED AS A PHASE. * 00001100 * * 00001200 * THIS ROUTINE IS CALLED: * 00001300 * 2) FOR ALL PDF OUTPUT WHEN THE TRANSFER TYPE IS 'USER'. * 00001400 * * 00001500 * INPUT: * 00001600 * REG 0 - CALL TYPE * 00001700 * 0 OPEN OUTPUT (TEIUSER2_OPEN_DATA) * 00001800 * 4 CLOSE OUTPUT (TEIUSER2_CLOSE_DATA) * 00001900 * 8 SEND OUTPUT (TEIUSER2_SEND_DATA) * 00002000 * 12 RESERVED * 00002100 * 16 ABORT OUTPUT (TEIUSER2_ABORT_DATA) * 00002200 * PARM 1 - DUMMY * 00002300 * PARM 2 - ADDRESS OF TEIY000_AREA (COPYBOOK TEIY000) * 00002400 * PARM 3 - ADDRESS OF OUTPUT AREA (DATA IS ASCII) * 00002500 * PARM 4 - LENGTH OF OUTPUT DATA * 00002600 * * 00002700 *********************************************************************** 00002800 TEIUSER2 RMODE ANY 00002900 TEIUSER2 AMODE ANY 00003000 TEIUSER2 CSECT ENTRY POINT 00003100 B COPYRGHTEND-*(R15) BRANCH AROUND LABELS 00003200 MAINNAME DC CL8'TEIUSER2' 00003300 COMVERS DC CL8'02.02.00' VERSION AND RELEASE 00003400 COMADATE DC CL8'&SYSDATC' ASSEMBLED DATE 00003500 COMATIME DC CL8'&SYSTIME' ASSEMBLED TIME 00003600 COPYRGHT DC C'COPYRIGHT 1999-2002 THIGPEN ENTERPRISES, INC' 00003700 COPYRGHTEND DS 0F 00003800 *..R8 = BASE REGISTER 1 00003900 *..R9 = BASE REGISTER 2 00004000 *..R10 = BASE REGISTER 3 00004100 USING TEIUSER2,R8,R9,R10 PROVIDE BASE REGISTERS 00004200 STM R14,R12,12(R13) SAVE CALLERS REGISTERS 00004300 LR R8,R15 LOAD THE BASE REGISTERS 00004400 LA R9,4095(,R8) . 00004500 LA R9,1(,R9) . 00004600 LA R10,4095(,R9) . 00004700 LA R10,1(,R10) . 00004800 LA R14,MYSAVE POINT TO MY SAVE AREA 00004900 ST R13,4(,R14) MAKE ME POINT TO CALLER 00005000 ST R14,8(,R13) MAKE CALLER POINT TO ME 00005100 LR R13,R14 POINT R13 TO NEW SAVE AREA 00005200 B ENTRY_EXIT 00005300 DS 0F 00005400 DC C'SAVEAREA' 00005500 MYSAVE DC 9D'0' SAVE AREA 00005600 ENTRY_EXIT DS 0H 00005700 GETPARMS DS 0H 00005800 LM R2,R7,0(R1) 00005900 LA R7,0(R7) CLEAR HIGH BIT OF LAST PARM 00006000 *..R0 = FUNCTION 00006100 *..R2 = PWR PARMS DSECT 00006200 *..R3 = JOB PARMS DSECT 00006300 USING TEIY002_AREA,R2 00006400 USING TEIY000_AREA,R3 00006500 USING TEIY003_AREA,JOB_TEIY003 00006600 L R2,@TEIY002 00006700 *..R5 = LENGTH OF DATA IN OUTPUT AREA CALL PARM 3 00006800 MAIN_LINE DS 0H 00006900 LA R14,ML_BRANCH_RETURN 00007000 LR R15,R0 00007100 B ML_BRANCH(R15) 00007200 ML_BRANCH DS 0H 00007300 B OPEN_DATA R0=0 00007400 B CLOSE_DATA R0=4 00007500 B SEND_DATA R0=8 00007600 B RETURN16 R0=12 00007700 B ABORT_DATA R0=16 00007800 ML_BRANCH_RETURN DS 0H 00007900 B ML_ERRORS(R15) 00008000 ML_ERRORS DS 0H 00008100 B RETURN0 00008200 B RETURN4 00008300 B RETURN8 00008400 B RETURN16 00008500 *********************************************************************** 00008600 * RETURN SETUP * 00008700 *********************************************************************** 00008800 RETURN16 DS 0H RETURN WITH RC = 16 00008900 * WTO 'RETURN16' DEBUG 00009000 LA R15,16 . 00009100 * DUMP 00009200 B RETURN . 00009300 RETURN12 DS 0H RETURN WITH RC = 12 00009400 LA R15,12 . 00009500 B RETURN . 00009600 RETURN8 DS 0H RETURN WITH RC = 8 00009700 LA R15,8 . 00009800 B RETURN . 00009900 RETURN4 DS 0H RETURN WITH RC = 4 00010000 LA R15,4 . 00010100 B RETURN . 00010200 RETURN0 DS 0H RETURN WITH RC = 0 00010300 LA R15,0 . 00010400 RETURN DS 0H RETURN 00010500 LA R13,MYSAVE POINT TO MY SAVE AREA 00010600 L R13,4(,R13) GET SAVE AREA ADDRESS 00010700 ST R15,16(,R13) SAVE RETURN CODE 00010800 LM R14,R12,12(R13) RESTORE REGISTERS 00010900 BSM 0,R14 GO BACK 00011000 *********************************************************************** 00011100 * START OF OUTPUT HANDLER CODE * 00011200 *********************************************************************** 00011300 *********************************************************************** 00011400 * OPEN OUTPUT HANDLER * 00011500 * CALLED ONE TIME FOR EACH OUTPUT PDF FILE BEFORE ANY DATA IS PASSED. * 00011600 * RETURNS VIA R14. * 00011700 *********************************************************************** 00011800 OPEN_DATA DS 0H 00011900 ST R14,OPEN_DATA_SAVE 00012000 STM R4,R7,OPEN_DATA_SAVE+4 00012100 * INSERT LOCAL CODE HERE 00012200 O_GOOD DS 0H 00012300 LA R15,0(0) 00012400 O_EXIT DS 0H 00012500 L R14,OPEN_DATA_SAVE 00012600 LM R4,R7,OPEN_DATA_SAVE+4 00012700 BR R14 00012800 OPEN_DATA_SAVE DS 5F 00012900 *********************************************************************** 00013000 * CLOSE OUTPUT HANDLER * 00013100 * CALLED ONE TIME FOR EACH OUTPUT PDF FILE AFTER ALL DATA IS PASSED. * 00013200 * RETURNS VIA R14. * 00013300 *********************************************************************** 00013400 CLOSE_DATA DS 0H 00013500 ST R14,CLOSE_DATA_SAVE 00013600 STM R4,R7,CLOSE_DATA_SAVE+4 00013700 * INSERT LOCAL CODE HERE 00013800 C_GOOD DS 0H 00013900 LA R15,0(0) 00014000 C_EXIT DS 0H 00014100 L R14,CLOSE_DATA_SAVE 00014200 LM R4,R7,CLOSE_DATA_SAVE+4 00014300 BR R14 00014400 CLOSE_DATA_SAVE DS 5F 00014500 *********************************************************************** 00014600 * SEND OUTPUT HANDLER * 00014700 * CALLED AS MANY TIMES AS NEEDED TO PASS ALL PDF DATA. * 00014800 * RETURNS VIA R14. * 00014900 *********************************************************************** 00015000 SEND_DATA DS 0H 00015100 ST R14,SEND_DATA_SAVE 00015200 STM R4,R7,SEND_DATA_SAVE+4 00015300 * INSERT LOCAL CODE HERE 00015400 S_GOOD DS 0H 00015500 LA R15,0(0) 00015600 S_EXIT DS 0H 00015700 L R14,SEND_DATA_SAVE 00015800 LM R4,R7,SEND_DATA_SAVE+4 00015900 BR R14 00016000 SEND_DATA_SAVE DS 5F 00016100 *********************************************************************** 00016200 * ABORT OUTPUT HANDLER * 00016300 * CALLED INSTEAD OF CLOSE IF A PROCESSING ERROR OCCURED. IF THIS * 00016400 * ROUTINE IS ENTERED, THE PDF FILE SHOULD BE DISCARDED, NOT SAVED. * 00016500 * RETURNS VIA R14. * 00016600 *********************************************************************** 00016700 ABORT_DATA DS 0H 00016800 ST R14,ABORT_DATA_SAVE 00016900 STM R4,R7,ABORT_DATA_SAVE+4 00017000 * INSERT LOCAL CODE HERE 00017100 A_GOOD DS 0H 00017200 LA R15,0(0) 00017300 A_EXIT DS 0H 00017400 L R14,ABORT_DATA_SAVE 00017500 LM R4,R7,ABORT_DATA_SAVE+4 00017600 BR R14 00017700 ABORT_DATA_SAVE DS 5F 00017800 *********************************************************************** 00017900 LTORG 00018000 *********************************************************************** 00018100 * END OF OUTPUT HANDLER CODE * 00018200 *********************************************************************** 00018300 EJECT 00018400 TEIY000 00018500 TEIY002 00018600 TEIY003 00018700 EJECT 00018800 R0 EQU 0 00018900 R1 EQU 1 00019000 R2 EQU 2 00019100 R3 EQU 3 00019200 R4 EQU 4 00019300 R5 EQU 5 00019400 R6 EQU 6 00019500 R7 EQU 7 00019600 R8 EQU 8 00019700 R9 EQU 9 00019800 R10 EQU 10 00019900 R11 EQU 11 00020000 R12 EQU 12 00020100 R13 EQU 13 00020200 R14 EQU 14 00020300 R15 EQU 15 00020400 END 00020500 BKEND /+ /* /& * $$ EOJ