* /* START OF SPECIFICATIONS **** 00010000 *02* PROCESSOR = ASSEMBLER 00020000 **** END OF SPECIFICATIONS ***/ 00030000 GBLC &COMPNM,&ASMID GLOBAL VARIABLES 00050000 JHEAD 'OUTPUT I/O MODULE - PROLOG', X00300000 PHASEID=X0H, X00600000 LEVEL=10 00900000 * * 01200000 *FUNCTION/OPERATION- * 01500000 * THIS MODULE IS THE OUTPUT PACKAGE FOR THE ASSEMBLER. THE OTHER * 01800000 * PHASES INTERFACE WITH THIS MODULE BY USE OF THE JPRINT AND JPUNCH * 02100000 * MACROS. * 02400000 * * 02700000 *ENTRY POINT- * 03000000 * START+0 LOCATE PRINT BUFFER & PRINT PREVIOUS BUFFER. * 03300000 * DISPLACEMENT-JPRINT. * 03600000 * START+4 - LOCATE PUNCH BUFFER & PUNCH PREVIOUS BUFFER. * 03900000 * DISPLACEMENT-JPUNCH. * 04200000 * START+8 - INITIALIZE OUTPUT I/O MODULE. OPEN OUTPUT FILES * 04500000 * (AS REQUIRED), CLOSE OUTPUT FILES ON SECOND ENTRY. DISP.-JOUTINIT.* 04800000 * * 05100000 *INPUT- * 05400000 * N/A * 05700000 * * 06000000 *OUTPUT- * 06300000 * SYSPRINT, SYSPUNCH, SYSLIN. * 06600000 * * 06900000 *EXTERNAL ROUTINES- * 07200000 * N/A * 07500000 * * 07800000 *EXITS, NORMAL- * 08100000 * RETURN TO CALLER VIA REGISTER R9. * 08400000 * * 08700000 *EXITS, ERROR- * 09000000 * N/A * 09300000 * * 09600000 *TABLE/WORK AREAS- * 09900000 * REGISTER R13 POINTS TO COMMON. JADOUTCM, WHICH IS LOADED INTO * 10200000 * REGISTER R7, POINTS TO THE OUTPUT COMMON AREA. * 10500000 * * 10800000 *ATTRIBUTES- * 11100000 * REFRESHABLE * 11400000 * * 11700000 *NOTES- * 12000000 SPACE 2 12300000 PRINT OFF DON'T PRINT JCOMMON COPY CODE 12350000 COPY JCOMMON 12600000 PRINT ON THAT'S ALL WE WON'T PRINT 12900000 TITLE '&COMPNM&ASMID - OUTPUT I/O MODULE - JOUTCOM COPY CODE' 12950000 COPY JOUTCOM 13200000 SPACE 2 13500000 TITLE '&COMPNM&ASMID - OUTPUT I/O MODULE - DCBD MACRO' 13550000 DCBD DSORG=(PS),DEVD=(DA) 13800000 SPACE 3 14100000 TITLE '&COMPNM&ASMID - OUTPUT I/O MODULE - PRINT IMAGE, PUNCH I14150000 IMAGE AND DDNAME OVERRIDE DDNAME LIST DSECT''S' 14200000 PRTLINE DSECT PRINTLINE DSECT 14400000 CC DS X CARRIAGE CONTROL 14700000 EJECT EQU 0 EJECT CONTROL CODE 15000000 SPACE1 EQU 1 SINGLE SPACE CONTROL CODE 15300000 SPACE2 EQU 2 DOUBLE SPACE CONTROL CODE 15600000 SPACE3 EQU 3 TRIPLE SPACE CONTROL CODE 15900000 IMAGE DS CL120 PRINT IMAGE 16200000 SPACE 6 16500000 PCHLINE DSECT PUNCHLINE DSECT 16800000 PCHIMAGE DS 0CL80 CARD IMAGE 17100000 PCHDATA DS CL72 FIRST 72 COLUMNS 17400000 PCHSEQ DS CL8 ID & SEQUENCE FIELDS 17700000 SPACE 6 18000000 P DSECT DDNAME OVERRIDE LIST 18300000 PLEN DS H LENGTH OF LIST 18600000 DS 3CL8 (NOT APPLICABLE) 19200000 PSYSLIB DS CL8 SYSLIB DDNAME 19500000 PSYSIN DS CL8 SYSIN DDNAME 19800000 PSYSPRIN DS CL8 SYSPRINT DDNAME 20100000 PSYSPUNC DS CL8 SYSPUNCH DDNAME 20400000 PSYSUT1 DS CL8 SYSUT1 DDNAME 20700000 PSYSUT2 DS CL8 SYSUT2 DDNAME 21000000 PSYSUT3 DS CL8 SYSUT3 DDNAME 21300000 PSYSGO DS CL8 SYSGO DDNAME 21400000 PSYSTERM DS CL8 SYSTERM DDNAME 21500000 SPACE 3 21600000 TITLE '&COMPNM&ASMID - OUTPUT I/O MODULE - MAINLINE CONTROL' 21650000 * VS1 RELEASE 3.1 CHANGES 21700031 *C741000 OY02543 21750031 *A324500-326000,360500 @AX14816 21800000 JCSECT (X0H00) 21900000 JMODID EMBEDDED IDENTIFIER 22200000 USING START,R12 SET BASE TO R12 22500000 START B PRINT JPRINT ENTRY 22800000 B PUNCH JPUNCH ENTRY 23100000 B OUTINIT INIT & TERM ENTRY 23400000 B TSOPRINT GO PRINT TO TERMINAL 23700000 SPACE 3 24000000 JENTRY (X0H01=START) 24300000 SPACE 3 24600000 SAVE JSAVE BASE=NO SAVE REGISTERS 24900000 L R7,JADOUTCM LOAD ADDRESS OF OUTPUT COMMON 25200000 BR R14 NOW GO ON WITH BUSINESS 25500000 SPACE 3 25800000 RETURN JRETURN RESTORE REGISTER & RETURN 26100000 SPACE 3 26400000 TITLE '&COMPNM&ASMID - OUTPUT I/O MODULE - TSOPRINT ROUTINE' 26450000 USING PRTLINE,R1 27050000 TSOPRINT BAL R14,SAVE GO SAVE REGISTERS 27250000 GOIF BYPASTRM,OFF=FIRSTRM FIRST TERM PRINT 27450000 L R1,JCURTRM PICK UP CURRENT BUFFER ADDR 27650000 TR CC,CCTRTAB TRANSLATE CC TO EXTERNAL 27700000 TR IMAGE,JTRTABLE TRANSLATE PRINT LINE 27850000 GOIF CLOSTRM,ON=RETURN FINAL PRINT (IN CLOSE ROUTINE) 28050000 FIRSTRM SET BYPASTRM,ON INDICATE NOT 1ST PRINT 28250000 L R1,JSYSTRM LOAD TERM FILE DEF ADDR 28450000 PUT (1) PUT CURRENT REC & GET NEW ADDR 28650000 ST R1,JCURTRM SAVE NEW BUFFER ADDRESS 28850000 MVC CC,D0(R11) INIT LINE TO SINGLE SPACE 29050000 MVC IMAGE(L'IMAGE),D1(R11) MOVE TERM BUFFER CONTENT 29250000 LR R11,R1 TRANSFER NEW BUFFER ADDRESS 29450000 B RETURN RETURN TO CALLER 29650000 DROP R1 29850000 SPACE 3 31200000 TITLE '&COMPNM&ASMID - OUTPUT I/O MODULE - JPRINT ROUTINE' 31250000 USING PRTLINE,R1 DEFINE BASE FOR PRINTLINE 31500000 PRINT BAL R14,SAVE GO SAVE REGISTERS 31800000 GOIF BYPASPRT,OFF=FIRSTPRT FIRSTPRINT 32100000 L R1,JCURPRT GET CURRENT PRINT BUFFER 32400000 GOIF JSUPPRT,OFF=PRINT5 IF SUPPRESS SW OFF BR @AX14816 32450000 SET JSUPPRT,OFF RESET SUPPRESS SW @AX14816 32500000 B PRINT10 DON'T PRINT-JUST DUMMY @AX14816 32550000 PRINT5 EQU * @AX14816 32600000 LH R14,=H'1' GET INCREMENT 33000000 A R14,JRECPRT ADD OLD COUNT 33600000 ST R14,JRECPRT STORE NEW COUNT 33900000 TR CC,CCTRTAB TRANSLATE IN.CC TO ASA CC 34200000 TR IMAGE,JTRTABLE TRANSLATE PRINT LINE 34500000 GOIF CLOSPRT,ON=RETURN FINAL PRINT (IN CLOSE ROUTINE) 34800000 FIRSTPRT SET BYPASPRT,ON AT LEAST ONE PRINT HAS OCCURED 35100000 L R1,JSYSLST LOAD PRINT FILE DEF ADDRESS 35400000 PUT (1) PUT CURRENT REC & GET NEW ADDR 35700000 ST R1,JCURPRT SAVE NEW BUFFER ADDRESS AND 36000000 PRINT10 EQU * @AX14816 36050000 MVI CC,SPACE1 INIT LINE TO SINGLE SPACE 36300000 MVI IMAGE,JBLANK NOW BLANK LINE 36600000 MVC IMAGE+D1(L'IMAGE-D1),IMAGE BLANK OUT LINE 36900000 LR R11,R1 RETURN BUFFER ADDRESS TO CALLER 37200000 B RETURN RETURN 37500000 DROP R1 37800000 SPACE 3 38100000 TITLE '&COMPNM&ASMID - OUTPUT I/O MODULE - JPUNCH ROUTINE' 38150000 USING PCHLINE,R1 SET PUNCH LINE BASE 38400000 PUNCH BAL R14,SAVE GO SAVE REGISTERS 38700000 GOIF BYPASPCH,OFF=FIRSTPCH FIRST PUNCH 39000000 L R1,JCURPCH GET CURRENT PUNCH BUFFER 39300000 GOIF NOSEQ,ON=DONOTSEQ NOT TO BE SEQUENCED 39600000 LH R14,JDECKSEQ INCREMENT DECK SEQ BY ONE 39900000 LA R14,D1(,R14) '' 40200000 STH R14,JDECKSEQ '' 40500000 CVD R14,JDWORD CONVERT TO DECIMAL 40800000 UNPK PCHSEQ,JDWORD UNPACK 41100000 NC PCHSEQ,=8X'0F' AND OUT ZONES (TO INTERNAL) 41400000 SR R14,R14 ZERO REG 41700000 IC R14,JDECKIDL GET LENGTH OF DECKID 42000000 SH R14,=H'1' DECREMENT BY ONE 42300000 BM NOID BR IF NO DECKID 42600000 EX R14,MVCID MOVE ID TO PCHSEQ 42900000 NOID TR PCHSEQ,JTRTABLE TRANSLATE PCHSEQ TO EXTERNAL 43200000 B DONTTR DON'T TRANSLATE ANYTHING ELSE 43500000 DONOTSEQ TR PCHIMAGE,JTRTABLE TRANSLATE TO EXTERNAL 43800000 DONTTR GOIF (JDECK,JLINK),NOTALL=NOALT NOT DECK & LINK 44100000 LR R2,R1 PUT RECORD TO OBJECT FILE TOO 44400000 L R1,JSYSLNK LOAD LINK FILE DEF ADDR 44700000 PUT (1) LOCATE BUFFER 45000000 MVC PCHIMAGE,D0(R2) MOVE FROM PUNCH TO LINK BUFFER 45300000 NOALT GOIF CLOSPCH,ON=RETURN FINAL PUNCH (IN CLOSE ROUTINE) 45600000 FIRSTPCH SET (BYPASPCH,NOSEQ),ON AT LEAST ONE PUNCH AS OCCURED 45900000 GOIF JNOSEQPH,ON=DONTSEQ RECORD IS NOT TO BE SEQUENCED 46200000 SET NOSEQ,OFF SEQ RECORD NEXT TIME AROUND 46500000 DONTSEQ L R1,JSYSLNK LOAD LINK FILE DEF ADDR 46800000 GOIF JDECK,OFF=PUTLINK NODECK 47100000 L R1,JSYSPCH LOAD PUNCH FILE DEF ADDR 47400000 PUTLINK PUT (1) LOCATE BUFFER 47700000 ST R1,JCURPCH SAVE NEW BUFFER ADDRESS 48000000 L R14,JRECPCH ADD ONE TO PUNCH RECORD COUNT 48300000 LA R14,D1(,R14) '' 48600000 ST R14,JRECPCH '' 48900000 MVI PCHIMAGE,JBLANK INIT TO INTERNAL BLANKS 49200000 MVC PCHIMAGE+D1(L'PCHIMAGE-D1),PCHIMAGE '' 49500000 SET JNOSEQPH,OFF RESET NOSEQ SWITCH 49550000 LR R11,R1 RETURN BUFFER ADDR TO CALLER 49800000 B RETURN RETURN 50100000 MVCID MVC PCHSEQ(*-*),JDECKID OUT-OF-LINE MVC OF DECKID 50400000 DROP R1 DROP PUNCH LINE BASE 50700000 SPACE 3 51000000 TITLE '&COMPNM&ASMID - OUTPUT I/O MODULE - DCB OPEN' 51050000 OUTINIT BAL R14,SAVE GO SAVE REGISTERS 51300000 GOIF JOUT2ND,ON=CLOSE SECOND TIME HERE 51600000 SET JOUT2ND,ON FIRST TIME. SET FLAG 51900000 SPACE 3 52200000 TM D0(R11),BIT0 ANY OVERRIDING DDNAMES 52500000 BO NOPARM BR IF END OF PARM LIST 52800000 L R14,D4(,R11) PT TO DDNAME LIST 53100000 USING P,R14 ESTABLISH PARMLIST BASE 53400000 LA R15,P CLEAR END-OF-LIST FLAG 53700000 AH R15,PLEN CALC END OF TABLE (-2) 54000000 SPACE 1 54300000 L R1,JSYSLST PT TO SYSPRINT DCB 54600000 LA R2,PSYSPRIN PT TO SYSPRINT DDNAME 54900000 BAL R9,OVERRIDE CHECK FOR OVERRIDE 55200000 SPACE 1 55500000 L R1,JSYSPCH PT TO SYSPUNCH DCB 55800000 LA R2,PSYSPUNC PT TO SYSPUNCH DDNAME 56100000 BAL R9,OVERRIDE CHECK FOR OVERRIDE 56400000 SPACE 1 56700000 L R1,JSYSLNK PT TO SYSLIN DCB 57000000 LA R2,PSYSGO PT TO DDNAME 57300000 BAL R9,OVERRIDE CHECK FOR OVERRIDE 57600000 SPACE 1 57660000 L R1,JSYSTRM PT TO SYSTRM DCB 57720000 LA R2,PSYSTERM PT TO DDNAME 57780000 BAL R9,OVERRIDE CHECK FOR OVERRIDE 57840000 DROP R14 DROP DSECT BASE 57900000 NOPARM DC 0H'0' CONTINUE 58200000 SPACE 3 58500000 LM R1,R2,JOUTOPEN LOAD ADDR OF OPEN & CLOSE PL 58800000 GOIF JTERM,OFF=NOTERM TERM OPTION ON 59100000 GOIF (JLIST,JDECK,JLINK),ALL=OPEN, OK ALL ON X59200000 ELSE=CHECK MODIFY PARAMETER LIST FOR OPEN 59300000 NOTERM GOIF (JLIST,JDECK,JLINK),NONE=RETURN NO DATA SETS NEEDED 59400000 CHECK EQU * 59500000 SR R14,R14 ZERO INDEX 59700000 LM R3,R4,D4(R1) OPEN PARM LIST (PCH, LNK) 60000000 LM R5,R6,D4(R2) CLOS PARM LIST (PCH, LNK) 60300000 GOIF JLIST,OFF=NOPENLST LIST OPTION OFF 60600000 LA R14,D4(,R14) INCREMENT PTR (LST ALREADY ST) 60900000 NOPENLST GOIF JDECK,OFF=NOPENPCH DECK OPTION OFF 61200000 ST R3,D0(R14,R1) STORE PCH DCB ADDR (OPEN) 61500000 ST R5,D0(R14,R2) STORE PCH DCB ADDR (CLOSE) 61800000 LA R14,D4(,R14) INCREMENT PTR 62100000 NOPENPCH GOIF JLINK,OFF=NOPENLNK LINK OPTION IS OFF 62400000 ST R4,D0(R14,R1) STORE LNK DCB ADDR (OPEN) 62700000 ST R6,D0(R14,R2) STORE LNK DCB ADDR (CLOSE) 63000000 LA R14,D4(,R14) INCREMENT PTR 63300000 NOPENLNK GOIF JTERM,OFF=NOPENTRM TERM OPTION IS OFF 63600000 L R4,D12(R1) OPEN PARM LIST (TRM) 63640000 L R6,D12(R2) CLOSE PARM LIST (TRM) 63680000 ST R4,D0(R14,R1) STORE TRM DCB ADDR(OPEN) 63720000 ST R6,D0(R14,R2) STORE TRM DCB ADDR(CLOSE) 63760000 LA R14,D4(R14) INCREMENTE POINTER 63800000 NOPENTRM SH R14,=H'4' DECREMENTE POINTER 63840000 LA R3,D0(R14,R1) PT TO LAST OPEN PARM 63900000 OI D0(R3),BIT0 SET END OF OPEN PARM LIST 64200000 LA R3,D0(R14,R2) POINT TO LAST CLOSE PARM 64500000 OI D0(R3),BIT0 SET END OF LIST FLAG 64800000 SPACE 3 65100000 OPEN LA R10,XTPRT ADDR OF SYSPRINT DCB EXIT 65400000 LA R11,XTPCHLIN ADDR OF SYSPUNCH,LIN DCB EXIT 65700000 OPEN MF=(E,(1)) OPEN FILES 66000000 SPACE 3 66300000 B RETURN RETURN 66600000 SPACE 3 66900000 TITLE '&COMPNM&ASMID - OUTPUT I/O MODULE - DCB CLOSE' 66950000 CLOSE GOIF (JLIST,JDECK,JLINK),ANY=CLOSE1 IF ANY ON CLOSE DATA SETS 67200000 GOIF JTERM,OFF=RETURN IF NONE ON RETURN 67250000 CLOSE1 SET (CLOSPRT,CLOSPCH,CLOSTRM),ON INDICATE FINAL PRINT & PCH 67500000 GOIF JLIST,OFF=NOLIST LIST OPTION OFF 67800000 BAL R9,PRINT FORCE OUT LAST BUFFER 68100000 NOLIST GOIF JTERM,OFF=NOJTERM IS TERM OPTION USED 68110000 BAL R9,TSOPRINT PRINT LAST SYSTERM TOO 68150000 NOJTERM GOIF (JDECK,JLINK),NONE=NODKLK DECK & LINK OPTIONS OFF 68400000 GOIF BYPASPCH,OFF=NODKLK NO CARDS PUNCHED 68700000 BAL R9,PUNCH FORCE OUT LAST BUFFER 69000000 NODKLK L R1,JOUTCLOS CLOSE OUTPUT 69300000 CLOSE MF=(E,(1)) '' 69600000 SPACE 1 69900000 L R1,JSYSLST PT TO SYSPRINT DCB 70200000 BAL R9,FREEPOOL GO FREE BUFFERS 70500000 L R1,JSYSPCH PT TO SYSPUNCH DCB 70800000 BAL R9,FREEPOOL GO FREE BUFFERS 71100000 L R1,JSYSLNK PT TO SYSLIN DCB 71400000 BAL R9,FREEPOOL GO FREE BUFFERS 71700000 L R1,JSYSTRM PT TO SYSTRM DCB 71800000 BAL R9,FREEPOOL GO FREE BUFFERS 71900000 SPACE 1 72000000 XC JADOUTCM,JADOUTCM ZERO ADDRESS FOR ABORT MODULE 72300000 B RETURN RETURN 72600000 SPACE 3 72900000 TITLE '&COMPNM&ASMID - OUTPUT I/O MODULE - DDNAME OVERRIDE ROUT72950000 TINE AND DCB EXIT ROUTINES' 73000000 USING IHADCB,R1 ESTABLISH BASE FOR DCB 73200000 OVERRIDE CR R2,R15 PAST END OF LIST 73500000 BHR R9 YES, RETURN 73800031 CLC D0(D8,R2),=8X'00' IS DDNAME ZERO OY02543 74100031 BZR R9 YES, RETURN 74400000 MVC DCBDDNAM,D0(R2) OVERRIDE DDNAME 74700000 BR R9 RETURN 75000000 DROP R1 DROP DCB BASE 75300000 SPACE 2 75600000 USING IHADCB,R1 75900000 * DCB EXIT FOR SYSPRINT AND SYSTERM 76200000 USING *,R10 ESTABLISH BASE ADDRESS 76500000 XTPRT LH R3,DCBLRECL LD DEFAULT BLKSIZE 76800000 NI DCBRECFM,BITFF-BIT6 TURN OFF M BIT 77100000 OI DCBRECFM,BIT5 TURN ON A BIT 77400000 TM DCBRECFM,BIT0 IS RECORD LENGTH FIXED (F) 77700000 BO XTALL10 YES, GO CHECK FOR RECFM=FB 78000000 MVI DCBRECFM,BIT0+BIT3+BIT5 SET RECFM=FBA 78300000 B XTALL10 GO CHECK BLKSIZE 78600000 DROP R10 DROP BASE 78900000 SPACE 79200000 * DCB EXIT FOR SYSPUNCH & SYSLIN 79500000 USING *,R11 ESTABLISH BASE ADDRESS 79800000 XTPCHLIN LH R3,DCBLRECL LD DEFAULT BLKSIZE 80100000 NI DCBRECFM,BITFF-BIT5-BIT6 TURN OFF M & A BITS 80400000 TM DCBRECFM,BIT0 IS RECORD LENGTH FIXED (F) 80700000 BO XTALL10 YES, GO CHECK FOR RECFM=FB 81000000 MVI DCBRECFM,BIT0+BIT3 SET RECFM=FB 81300000 DROP R11 DROP BASE 81900000 SPACE 82200000 XTALL10 BALR R15,R0 ESTABLISH BASE ADDRESS IN REG 82500000 USING *,R15 '' 82800000 LH R5,DCBBLKSI IS BLKSIZE SPECIFIED 83700000 LTR R5,R5 '' 84000000 BZ XTALL30 NO, GO SET DEFAULT BLKSIZE 84300000 CR R3,R5 BLKSIZE LESS THAN LRECL? 84350000 BH XTALL30 IF SO SET BLKSIZE=LRECL 84400000 OI DCBRECFM,BIT3 SET BLOCKED 84450000 LR R3,R5 SAVE BLKSIZE FOR LATER USE 84600000 LH R2,DCBLRECL GET LOGICAL RECORD LENGTH 84900000 SR R4,R4 ZERO FOR DIVIDE 85200000 DR R4,R2 R4(REMAINDER)=R4R5 / R2(LRECL) 85500000 SR R3,R4 NOW BLKSIZE IS MULT OF LRECL 85800000 XTALL20 STH R3,DCBBLKSI STORE BLKSIZE IN DCB 86100000 BR R14 RETURN TO OPEN 86400000 XTALL30 NI DCBRECFM,BITFF-BIT3 SET UNBLOCKED 86450000 B XTALL20 SET DEFAULT BLKSIZE 86500000 DROP R1,R15 DROP BASES 86700000 TITLE '&COMPNM&ASMID - OUTPUT I/O MODULE - FREEPOOL ROUTINE, CO87050000 ONSTANTS AND PATCH AREA' 87100000 USING IHADCB,R1 ESTABLISH DCB ADDRESSABILITY 87300000 FREEPOOL TM DCBBUFCB+D3,BIT7 IS THERE A BUFCB 87600000 BOR R9 RETURN IF NO BUFCB 87900000 FREEPOOL (1) FREE BUFFERS IN BUFCB 88200000 BR R9 RETURN 88500000 DROP R1 DROP DCB BASE 88800000 SPACE 3 89100000 * CONSTANTS 89400000 * 89700000 CCTRTAB DC C'1 0-' ASA CC FOR EJECT,SINGLE,DOUBLE X90600000 AND TRIPLE SPACE 90900000 SPACE 3 91200000 JPATCH X0H00,3BC 5% PATCH AREA 91500000 SPACE 2 91800000 END START 92100000