TCS TITLE 'DMKTCS (CP) VM/370 - RELEASE 6' 00001000 ISEQ 73,80 VALIDATE INPUT SERIALIZATION 00002000 *. 00003000 * 00004000 * MODULE NAME - 00005000 * 00006000 * DMKTCS 00007000 * 00008000 * FUNCTION - 00009000 * 00010000 * TO SET UP A 3800 PRINTER PRIOR TO ACTUALLY PRINTING A 00011000 * SPOOL FILE ON IT. SETUP INCLUDES LOADING THE FCB, 00012000 * TRANSLATE TABLE, GRAPHIC CHARACTER MODIFICATIONS, 00013000 * FORMS OVERLAY SEQUENCE CONTROL, WRITABLE CHARACTER 00014000 * GENERATION MODULES,COPY MODIFICATION, AND COPY NUMBER OF 1. 00015000 * 00016000 * ATTRIBUTES - 00017000 * 00018000 * REENTRANT, PAGEABLE, CALLED VIA SVC 00019000 * 00020000 * ENTRY POINTS - 00021000 * 00022000 * DMKTCSET - SET UP THE 3800 PRIOR TO PRINTING THE FILE 00023000 * DMKTCSSP - SET UP THE 3800 PRIOR TO PRINTING THE SEPARATOR 00024000 * DMKTCSCO - SET UP THE ONLY THE FORMS OVERLAY SEQUENCE CTL 00025000 * 00026000 * ENTRY CONDITIONS - 00027000 * 00028000 * FOR DMKTCSET AND DMKTCSSP - 00029000 * 00030000 * GPR7 = ADDRESS OF SFBLOK FOR FILE BEING PRINTED 00031000 * GPR8 = ADDRESS OF RDEVBLOK FOR 3800 PRINTER 00032000 * GPR9 = ADDRESS OF RSPLCTL CONTROL BLOCK FOR PRINTER 00033000 * GPR10 = ADDRESS OF IOBLOK FOR PRINTER I/O 00034000 * GPR12 = ADDRESS OF RELEVANT ENTRY POINT 00035000 * GPR13 = ADDRESS OF STANDARD SAVEAREA 00036000 * 00037000 * FOR DMKTCSCO - 00038000 * 00039000 * GENERAL REGISTERS ARE THE SAME AS ABOVE. 00040000 * 00041000 * EXIT CONDITIONS - 00042000 * 00043000 * FOR DMKTCSSP AND DMKTCSET - 00044000 * COND CODE = ZERO - SETUP COMPLETED 00045000 * COND CODE = NON-ZERO - SETUP DIDN'T COMPLETE 00046000 * IF IOBFATAL SET, REASON IS HARDWARE ERROR 00047000 * OTHERWISE, BAD LOAD MODULE IS THE CAUSE 00048000 * 00049000 * FOR DMKTCSCO - 00050000 * COND CODE = NON-ZERO - MO MORE COPIES TO DO 00051000 * COND CODE = ZERO - SFBLOK IS SET UP FOR NEXT COPY 00052000 * 00053000 * CALLS TO OTHER ROUTINES - 00054000 * 00055000 * DMKIOSQR - TO ISSUE START I/O TO REAL 3800 00056000 * DMKPGTVG - GET PAGE OF SYSTEM VIRTUAL STORAGE 00057000 * DMKPGTVR - RELEASE PAGE OF SYSTEM VIRTUAL STORAGE 00058000 * DMKRPAGT - READ IN PAGE OF 3800 IMAGE LIBRARY 00059000 * DMKFREE - OBTAIN FREE STORAGE FOR CCWS 00060000 * DMKFRET - RETURN FREE STORAGE TO THE POOL 00061000 * DMKSCNVS - FIND RDEVBLOK FOR IMAGE LIBRARY DASD VOL 00062000 * DMKERMSG - ISSUE ERROR MESSAGES 00063000 * DMKSCNAU - SEE IF USER IS LOGGED ON 00064000 * DMKCVTBH - CONVERT STUFF FOR MESSAGES 00065000 * DMKSCNRD - GET DEVICE ADDRESS IN PRINTABLE CUU FORM 00066000 * 00067000 * TABLES / WORKAREAS - 00068000 * 00069000 * 00070000 * DMKQNTBL - TABLE OF 3800 NAMED SYSTEMS 00071000 * 00072000 * SAVEWRK1 - FLAG INDICATING ENTRY AT DMKTCSCO 00073000 * X'80' - ENTERED AT DMKTCSCO 00074000 * X'40' - 'CLEAR PRINTER' HAS BEEN ISSUED 00075000 * X'20' - FCB WAS CALCULATED FROM 6, 8, OR 12 00076000 * X'10' - ENTERED AT DMKTCSSP 00077000 * SAVEWRK1+1 - FLAG FOR SETTING COND CODE UPON EXITING 00078000 * SAVEWRK2 - ADDRESS OF HOLDING AREA 00079000 * SAVEWRK3 - VIRTUAL ADDRESS IN SYSTEM SPACE OF PAGE GOTTEN 00080000 * FOR READING IN THE NAMED SYSTEM PARTS 00081000 * SAVEWRK4, SAVEWRK5 - 8-CHARACTER NAME OF THE MODULE 00082000 * TO BE LOADED BY SUBROUTINE MEMLOAD 00083000 * SAVEWRK6 - STARTING CCPD (IN MEMLOAD SUBROUTINE) 00084000 * SAVEWRK7 - CURRENT CCPD (IN MEMLOAD SUBROUTINE) 00085000 * SAVEWRK8 - RESIDUAL MEMBER BYTE COUNT TO MOVE (MEMLOAD) 00086000 * 00087000 * REGISTER USAGE - 00088000 * 00089000 * GPR0 = 00090000 * GPR1 = 00091000 * GPR2 = ADDRESS OF SPLINK AND LOCKED BUFFERS 00092000 * GPR3 = INTERNAL SUBROUTINE RETURN ADDRESS REGISTER 00093000 * GPR4 = 00094000 * GPR5 = ADDRESS OF HOLDING AREA 00095000 * GPR6 = SCRATCH AND RSPXBLOK ADDRESSIBILITY 00096000 * GPR7 = ADDRESS OF SFBLOK OF FILE BEING PRINTED 00097000 * GPR8 = ADDR OF RDEVBLOK FOR 3800 PRINTER 00098000 * GPR9 = ADDR OF RSPLCTL WORK AREA 00099000 * GPR10 = ADDR OF IOBLOK FOR PRINTER I/O 00100000 * GPR11 = 00101000 * GPR12 = DMKTCS MODULE BASE 00102000 * GPR13 = ADDRESS OF STANDARD SAVE AREA 00103000 * GPR14 = BALR RETURN ADDRESS AND SCRATCH REGISTER 00104000 * GPR15 = BALR BRANCH ADDRESS AND SCRATCH REGISTER 00105000 * 00106000 * NOTES - 00107000 * 00108000 * 1. IT IS ASSUMED THAT, UPON ENTRY AT ANY ONE OF THE ABOVE 00109000 * ENTRY POINTS, THERE ARE TWO SPOOL FILE BUFFERS ALREADY 00110000 * LOCKED IN REAL STORAGE. THIS SHOULD HAVE BEEN DONE IN 00111000 * DMKRSP. 00112000 * 00113000 * 2. BECAUSE OF THE 2-PAGE MAXIMUM AND THE FACT THAT THE 00114000 * MODULE HAS 8 BYTES OF CONTROL INFORMATION AT ITS START, 00115000 * THE MAXIMUM AMOUNT OF LOAD DATA ABLE TO BE PROCESSED 00116000 * BY THIS ROUTINE IS 8192-8 OR 8184 BYTES. THIS 00117000 * RESTRICTION IS ONLY MEANINGFUL FOR COPY MODIFICATION 00118000 * SINCE THE 3800 HARDWARE ALLOWS 8192 BYTES FOR A 00119000 * COPY MODIFICATION. 00120000 * 00121000 * OPERATION - 00122000 * 00123000 * 1. DMKTCSET 00124000 * CALL DMKFREE TO OBTAIN A WORKAREA FOR HOLDING THE 00125000 * INFORMATION WHICH WILL BE REQUIRED FOR THE 3800 SETUP. 00126000 * CALL DMKPGTVG, DMKRPAGT TO GET THE FIRST DASD BUFFER. 00127000 * TRANSFER ALL INFORMATION REQUIRED INTO THE WORKAREA 00128000 * AND RELEASE THE PAGE JUST OBTAINED. THEN GO TO STEP 4. 00129000 * IF ENTERED FROM DMKTCSCO, UPDATE THE SFBCOPY AND 00130000 * SFBSTCPY FIELDS AND GO TO STEP 8. 00131000 * 00132000 * 2. DMKTCSSP 00133000 * OBTAIN A WORKAREA VIA DMKFREE AND INITIALIZE IT FOR 00134000 * THE SEPARATOR PAGE WITH INFORMATION IN THE 00135000 * 3800 PRINTER RDEVBLOK AND OTHER DEFAULT INFORMATION. 00136000 * THEN, CONTINUE WITH STEP 4. 00137000 * 00138000 * 3. DMKTCSCO 00139000 * INDICATE THIS ENTRY AND GO TO STEP 1. 00140000 * 00141000 * 4. IF ENTRY WAS VIA DMKTCSET AND IF THE CHARS REQUESTED 00142000 * IS THE SAME AS THAT ALREADY LOADED AS INDICATED IN 00143000 * THE RSPXCHR FIELD, THEN THERE IS NO NEED TO RELOAD THE 00144000 * NEW CHARACTER ARRANGEMENT TABLE. OTHERWISE, 00145000 * CALL INTERNAL SUBROUTINE MEMLOAD TO LOAD THE REQUESTED 00146000 * CHARACTER ARRANGEMENT TABLE INTO THE LOCKED BUFFER. 00147000 * SET UP TO LOAD THE REQUIRED WCGMS INTO EMPTY POSITIONS. 00148000 * IF A WCGM IS ALREADY LOADED AND UNMODIFIED, THERE IS NO 00149000 * NEED TO LOAD IT AGAIN. 00150000 * ALTER THE TRANSLATE TABLE IN STORAGE TO REFLECT CHANGED 00151000 * POSITIONS OF THE THE WCGMS AND ISSUE THE FOLLOWING 00152000 * CCWS TO THE 3800 PRINTER: LOAD WCGM, SELECT TRANSLATE 00153000 * TABLE 0, LOAD TRANSLATE TABLE, DUMMY SENSE. 00154000 * IF A LOAD CHECK OCCURS DUE TO INVALID LOAD DATA, 00155000 * ISSUE ERROR MESSAGE DMKTCS241E TO BOTH THE OWNER OF 00156000 * THE FILE AND THE OPERATOR AND RETURN WITH IOBFATAL SET. 00157000 * IF SUCCESSFUL, UPDATE THE CURRENT CONTENTS OF THE WCGMS. 00158000 * 00159000 * 5. IF ANY GRAPHIC MODIFICATIONS WERE INDICATED, INVALIDATE 00160000 * THE RDEVCRWC FIELDS USED BY THIS TABLE AND CALL MEMLOAD TO 00161000 * LOAD EACH GRAPHIC MODIFICATION AND ISSUE A LOAD GRAPHIC 00162000 * MODIFICATION TO THE 3800 FOR EACH ONE. 00163000 * LOAD CHECKS CAUSE DMKTCS241E TO BE ISSUED AND RETURN WITH 00164000 * IOBFATAL SET. 00165000 * 00166000 * 6. IF NO COPY MODIFICATION WAS SPECIFIED, SET UP A NULL 00167000 * COPY MODIFICATION AND LOAD IT VIA THE 'LOAD COPY 00168000 * MODIFICATION' CCW. ELSE CALL MEMLOAD TO LOAD IT IN 00169000 * AND THEN LOAD IT INTO THE 3800 VIA THE 'LOAD COPY 00170000 * MODIFICATION' CCW. LOAD CHECKS CAUSE DMKTCS241E TO BE 00171000 * ISSUED AND RETURN MADE TO THE CALLER WITH IOBFATAL SET. 00172000 * IF THE COPY MODIFICATION TO BE LOADED IS THE SAME AS THAT 00173000 * ALREADY IN (RSPXCMOD), NO NEED TO LOAD IT IN AGAIN. 00174000 * 00175000 * 7. IF THE FCB IS THE SAME AS THAT ALREADY LOADED (RSPXFCB), 00176000 * THERE IS NO NEED TO RELOAD IT. IF NOT, AND IT IS NOT 00177000 * 6, 8, OR 12, CALL MEMLOAD TO LOAD IT AND THEN ISSUE A 00178000 * 'LOAD FCB' CCW TO GET IT INTO THE 3800. ANY ERRORS 00179000 * CAUSE DMKTCS241E TO BE ISSUED, EXCEPT FOR AN FCB-FORMS 00180000 * MISMATCH WHICH CAUSES DMKTCS240E TO BE ISSUED. 00181000 * IF THE FCB IS 6, 8, OR 12, THEN, USING THE CURRENT PAGE 00182000 * LENGTH (RDEVCURP), CONSTRUCT AN FCB. IF THIS RESULTS IN 00183000 * A FCB-FORMS MISMATCH, TRY WITH DIFFERENT PAGE LENGTHS 00184000 * UNTIL SUCCESSFUL. STORE THE NEWLY DISCOVERED PAGE 00185000 * LENGTH IN RDEVCURP. 00186000 * 00187000 * 8. ISSUE THE 'LOAD COPY NUMBER' CCW FOR COPY MODIFICATION 00188000 * CONTROL INFORMATION, AND THE 'LOAD FORMS OVERLAY 00189000 * SEQUENCE CONTROL' CCW TO CONTROL THE FLASHING STATUS 00190000 * AND NUMBER OF COPIES TO BE PRINTED FOR THE 3800. 00191000 * 00192000 * 9. IF ENTERED VIA DMKTCSCO AND THERE ARE MORE COPIES TO 00193000 * BE PRINTED, ISSUE THE 'END OF TRANSMISSION' CCW. IF 00194000 * NO MORE COPIES REMAIN, ISSUE THE 'MARK FORMS' CCW. 00195000 * ALSO, UPDATE SFBCOPY AND SFBSTCPY. 00196000 * 00197000 * 10. RETURN TO CALLER 00198000 * 00199000 * RESPONSE - 00200000 * 00201000 * NONE 00202000 * 00203000 * ERROR MESSAGES - 00204000 * 00205000 * DMKTCS240E PRT (CUU), FCB-FORMS MISMATCH, FILEID (SPLID) 00206000 * DMKTCS241E PRT (CUU), INVALID LOAD MODULE (NAME) SPECIFIED, 00207000 * FILE (SPLID) (HELD|PURGED) 00208000 * 00209000 *. 00210000 EJECT 00211000 COPY OPTIONS 00212000 COPY LOCAL OPTIONS 00213000 EJECT 00214000 DMKTCS CSECT LOADER CONTROL ONLY @V60B9BA 00215000 EXTRN DMKPGTVG @V60B9BA 00216000 EXTRN DMKPGTVR @V60B9BA 00217000 EXTRN DMKRPAGT @V60B9BA 00218000 EXTRN DMKIOSQR @V60B9BA 00219000 EXTRN DMKERMSG @V60B9BA 00220000 EXTRN DMKSCNVS @V60B9BA 00221000 EXTRN DMKQNTBL @V60B9BA 00222000 EXTRN DMKSCNAU @V60B9BA 00223000 EXTRN DMKCVTBH @V60B9BA 00224000 EXTRN DMKCVTBD @VMI0013 00225000 EXTRN DMKSCNRD @V60B9BA 00226000 SPACE 3 00227000 USING PSA,R0 @V60B9BA 00228000 USING SFBLOK,R7 @V60B9BA 00229000 USING RSPLCTL,R9 @V60B9BA 00230000 USING SPLINK,R2 @V60B9BA 00231000 USING IOBLOK,R10 @V60B9BA 00232000 USING RDEVBLOK,R8 @V60B9BA 00233000 USING VMBLOK,R11 @V60B9BA 00234000 USING SAVEAREA,R13 @V60B9BA 00235000 SPACE 3 00236000 DC CL8'DMKTCS' MODULE NAME @V60B9BA 00237000 SPACE 3 00238000 DMKTCSET RELOC , @V60B9BA 00239000 XC SAVEWRK1,SAVEWRK1 CLEAR OUT OUR WORK AREAS @V60B9BA 00240000 XC SAVEWRK2(32),SAVEWRK2 .... @V60B9BA 00241000 TCSET LA R0,HLDSIZE SIZE OF HOLDING AREA @V60B9BA 00242000 CALL DMKFREE GET THE STORAGE @V60B9BA 00243000 LR R5,R1 ADDRESSIBILITY @V60B9BA 00244000 USING HLDAREA,R5 ... @V60B9BA 00245000 ST R5,SAVEWRK2 SAVE ITS ADDRESS @V60B9BA 00246000 XC HLDAREA(HLDSIZE*8),HLDAREA CLEAR IT @V60B9BA 00247000 L R1,RSPVPAGE GET FIRST LOCKED BUFFER @V60B9BA 00248000 L R0,SFBSTART FIRST DASD BUFFER @V60B9BA 00249000 TCSET2 CALL DMKRPAGT,PARM=(BRING+SYSTEM+LOCK) BRING IT IN @VA09394 00250050 BNZ EXITF0 PAGING ERROR @VA12900 00250075 CLC SPPREPAG,ZEROES IS IT REALLY THE FIRST? @VA09394 00250100 BE TCSET3 XFER IF SO @VA09394 00250150 L R0,SPNXTPAG POINT TO NEXT DASD BUFFER @VA09394 00250200 C R0,SFBSTART IS THIS WHERE WE STARTED? @VA09394 00250250 BE EXITFF XFER IF SO - ERROR @VA09394 00250300 B TCSET2 TRY NEXT PAGE @VA09394 00250350 TCSET3 ST R0,RSPDPAGE SAVE THE DASD ADDRESS @VA09394 00251100 ST R2,RSPRPAGE SAVE ITS REAL ADDRESS TOO @V60B9BA 00252000 CLI SPCHAR,X'00' NOT SPECIFIED? @V60B9BA 00253000 BE DFLTCHAR SET DEFAULT IF SO @V60B9BA 00254000 MVC HLDCHARS,SPCHAR SAVE THE CHAR ARR TABLE @V60B9BA 00255000 B GOTCHAR FINISHED WITH CHAR @V60B9BA 00256000 DFLTCHAR MVC HLDCHARS,RDEVXSEP USE THE DEFAULT @V60B9BA 00257000 GOTCHAR CLI SPCMOD,X'00' NOT SPECIFIED? @V60B9BA 00258000 BE GOTMDFY XFER IF SO @V60B9BA 00259000 MVC HLDMDFY,SPCMOD SAVE THE COPY MODIFICATION @V60B9BA 00260000 GOTMDFY CLI SPFCB,X'00' NEVER SPECIFIED ? @V60B9BA 00261000 BE DFLTFCB XFER IF SO @V60B9BA 00262000 MVC HLDFCB,SPFCB SAVE THE SPECIFIED FCB @V60B9BA 00263000 B GOTFCB XFER @V60B9BA 00264000 DFLTFCB MVC HLDFCB,=C'6 ' ASSUME 6 LPI FCB @V60B9BA 00265000 CLI RDEVFSEP,6 IS IT ? @V60B9BA 00266000 BE GOTFCB XFER IF SO @V60B9BA 00267000 MVI HLDFCB,C'8' ASSUME 8 LPI FCB @V60B9BA 00268000 CLI RDEVFSEP,8 IS IT ? @V60B9BA 00269000 BE GOTFCB XFER IF SO @V60B9BA 00270000 MVC HLDFCB(2),=C'12' IT MUST BE 12 LPI @V60B9BA 00271000 GOTFCB MVC HLDSTCPY,SFBSTCPY SAVE STARTING COPY NUMBER @V60B9BA 00272000 MVC HLDFLSHC,SPFLSHC SAVE THE FLASH COUNT @V60B9BA 00273000 MVC HLDCPY,SFBCOPY+1 TOTAL NUMBER OF COPIES @V60B9BA 00274000 MVC HLDFLAG,SPFLAG1 SAVE THE COPY FLAG @V60B9BA 00275000 SR R0,R0 DUMMY DASD ADDRESS @V60B9BA 00276000 CALL DMKRPAGT,PARM=SYSTEM GIVE BACK THE DASD PAGE @V60B9BA 00277000 TRANS 2,1,OPT=(BRING,DEFER,SYSTEM,LOCK) LOCK IT @V60B9BA 00278000 ST R0,RSPDPAGE ZERO THE DASD ADDRESS @V60B9BA 00279000 ST R2,RSPRPAGE SAVE ITS LOCKED REAL ADDR @V60B9BA 00280000 TM SAVEWRK1,X'80' ENTERED AT DMKTCSCO ? @V60B9BA 00281000 BZ TCSCOMN JOIN COMMON CODE IF NOT @V60B9BA 00282000 TM HLDFLAG,SPCOPYFG JUST ONE TRANSMISSION ? @V60B9BA 00283000 BO MARKFORM XFER IF SO @V60B9BA 00284000 CLC SFBCOPY,=H'1' FINAL COPY PRINTED ? @V60B9BA 00285000 BE MARKFORM XFER IF SO @V60B9BA 00286000 LH R1,SFBCOPY DECREMENT THE COPIES @V60B9BA 00287000 BCTR R1,0 ... LEFT TO PRINT @V60B9BA 00288000 STH R1,SFBCOPY ... AND SAVE IT @V60B9BA 00289000 STC R1,HLDCPY SAVE IT HERE ALSO @V60B9BA 00290000 SR R1,R1 NOW INCREMENT THE @V60B9BA 00291000 IC R1,SFBSTCPY ... STARTING COPY NUMBER @V60B9BA 00292000 LA R1,1(,R1) ... AND SAVE IT @V60B9BA 00293000 STC R1,SFBSTCPY ... IN THE SFBLOK @V60B9BA 00294000 STC R1,HLDSTCPY SAVE IT HERE ALSO @V60B9BA 00295000 SPACE 00296000 * ISSUE THE 'END OF TRANSMISSION' CCW 00297000 SPACE 00298000 LA R1,EOTCCW GET ITS ADDRESS @V60B9BA 00299000 ST R1,IOBCAW ADDRESS OF CCW STRING @V60B9BA 00300000 LA R1,EOTRTN RETURN ADDRESS @V60B9BA 00301000 ST R1,IOBIRA WHERE WE COME BACK @V60B9BA 00302000 ST R13,IOBMISC SAVE REGISTER 13 @V60B9BA 00303000 B TCSSIO DO THE I/O AND WAIT FOR IT @V60B9BA 00304000 SPACE 2 00305000 EOTRTN EQU * HERE ON INTERRUPT FROM EOT @V60B9BA 00306000 USING *,R12 TEMPORARY ADDRESSIBILITY @V60B9BA 00307000 S R12,=A(EOTRTN-DMKTCS) GET OLD VALUE @V60B9BA 00308000 USING DMKTCS,R12 NEW ADDRESSIBILITY @V60B9BA 00309000 L R13,IOBMISC RESTORE SAVE AREA ADDRESS @V60B9BA 00310000 LM R0,R11,SAVEREGS RESTORE REGISTERS @V60B9BA 00311000 L R5,SAVEWRK2 ADDRESS OF HOLDING AREA @V60B9BA 00312000 TM IOBSTAT,IOBFATAL FATAL I/O ERROR ? @V60B9BA 00313000 BO EXITFF EXIT WITH CC=NON-ZERO IF SO @V60B9BA 00314000 ST R5,IOBMISC2 CLEAR OUT 'TCS ' @V60B9BA 00315000 B LDFOSC SET UP FOR NEXT COPY @V60B9BA 00316000 SPACE 5 00317000 MARKFORM DS 0H @VA11550 00317200 LA R1,MKFMCCW LOAD THE 'MARK FORM' CCWS @VA11550 00317400 TM RDEVFLAG,RDEVDRAN ARE WE DRAINING?? @VA11550 00317600 BZ REGMKFM NO, JUST 'MARK FORM' @VA11550 00317800 MVC HLDCCW1,CLRCCW YES, MUST ALSO CLEAR PRINT. @VA11550 00318000 MVC HLDCCW2(32),MKFMCCW THEN THE MARK FORMS SEQUENCE@VA11550 00318200 LA R1,HLDCCW1 POINT TO THE CLEAR PRINT CCW @VA11550 00318400 REGMKFM DS 0H @VA11550 00318600 ST R1,IOBCAW SAVE IT IN THE IOB @V60B9BA 00319000 LA R1,MKFMRTN INTERRUPT RETURN POINT @V60B9BA 00320000 ST R1,IOBIRA SAVE IT @V60B9BA 00321000 ST R13,IOBMISC SAVE REGISTER 13 @V60B9BA 00322000 B TCSSIO START THE I/O OPERATION @V60B9BA 00323000 SPACE 2 00324000 MKFMRTN EQU * HERE IN INT FROM MARK FORM @V60B9BA 00325000 USING *,R12 TEMPORARY ADDRESSIBILITY @V60B9BA 00326000 S R12,=A(MKFMRTN-DMKTCS) GET OLD VALUE @V60B9BA 00327000 USING DMKTCS,R12 NEW ADDRESSIBILITY @V60B9BA 00328000 L R13,IOBMISC RESTORE SAVE AREA ADDRESS @V60B9BA 00329000 LM R0,R11,SAVEREGS RESTORE REGISTERS @V60B9BA 00330000 ST R12,IOBMISC2 CLEAR OUT 'TCS ' @V60B9BA 00331000 B EXITFF EXIT CC = NON-ZERO @V60B9BA 00332000 * (NO MORE COPIES TO DO) @V60B9BA 00333000 SPACE 5 00334000 DMKTCSSP RELOC , ENTRY FROM DKMMKSEP @V60B9BA 00335000 XC SAVEWRK1,SAVEWRK1 CLEAR OUT OUR WORK AREAS @V60B9BA 00336000 XC SAVEWRK2(32),SAVEWRK2 .... @V60B9BA 00337000 LA R0,HLDSIZE SIZE OF HOLDING AREA @V60B9BA 00338000 CALL DMKFREE GET THE STORAGE @V60B9BA 00339000 LR R5,R1 ADDRESSIBILITY @V60B9BA 00340000 ST R5,SAVEWRK2 SAVE IT FOR LATER @V60B9BA 00341000 XC HLDAREA(8*HLDSIZE),HLDAREA CLEAR IT @V60B9BA 00342000 OI SAVEWRK1,X'10' SET ENTERED AT TCSSP FLAG @V60B9BA 00343000 MVC HLDCHARS,RDEVXSEP CHAR ARR TABLE @V60B9BA 00344000 MVC HLDFCB,=C'6 ' ASSUME 6 LPI @V60B9BA 00345000 CLI RDEVFSEP,6 IS THAT IT ? @V60B9BA 00346000 BE GOTFCB2 XFER IF SO @V60B9BA 00347000 MVI HLDFCB,C'8' TRY 8 LPI @V60B9BA 00348000 CLI RDEVFSEP,8 IS IT THAT ? @V60B9BA 00349000 BE GOTFCB2 XFER IF SO @V60B9BA 00350000 MVC HLDFCB(2),=C'12' IT MUST BE 12 LPI @V60B9BA 00351000 GOTFCB2 MVI HLDSTCPY,1 ASSUME STARTING COPY OF 1 @V60B9BA 00352000 MVI HLDFLSHC,0 NO FLASHING ON SEP PAGE @V60B9BA 00353000 MVI HLDCPY,1 ASSUME 1 COPY @V60B9BA 00354000 B TCSCOMN JOIN COMMON CODE @V60B9BA 00355000 SPACE 5 00356000 DMKTCSCO RELOC , ENTRY FOR MULTIPLE COPIES @V60B9BA 00357000 XC SAVEWRK1,SAVEWRK1 CLEAR OUT OUR WORK AREAS @V60B9BA 00358000 XC SAVEWRK2(32),SAVEWRK2 ... @V60B9BA 00359000 OI SAVEWRK1,X'80' INDICATE DMKTCSCO ENTRY @V60B9BA 00360000 B TCSET SET UP THE HOLDING AREA @V60B9BA 00361000 EJECT 00362000 TCSCOMN EQU * COMMON CODE @V60B9BA 00363000 CALL DMKPGTVG GET A PAGE OF VIRT SPACE @V60B9BA 00364000 ST R1,SAVEWRK3 SAVE ITS VIRTUAL ADDRESS @V60B9BA 00365000 L R6,RDEVEXTN GET ADDR OF RSPXBLOK @V60B9BA 00366000 USING RSPXBLOK,R6 ADDRESSIBILITY @V60B9BA 00367000 CLC HLDCHARS,RSPXCHR IS WHAT WE WANT ALREADY IN? @V60B9BA 00368000 BE LDMDFY YES, TRY COPY MODIFICATION @V60B9BA 00369000 SPACE 00370000 * WE MUST NOW LOAD THE CHARACTER ARRANGEMENT TABLE SPECIFIED 00371000 * AND ANY GRAPHIC MODIFICATIONS ASSOCIATED WITH IT. 00372000 SPACE 00373000 MVC SAVEWRK4,=C'XTB1' IT'S A CHAR ARR TABLE @V60B9BA 00374000 MVC SAVEWRK5,HLDCHARS THIS IS ITS NAME @V60B9BA 00375000 BAL R3,MEMLOAD LOAD IT INTO THE LOCKED BFRS@V60B9BA 00376000 BNZ MSG241E ERROR - BAD MODULE LOAD @V60B9BA 00377000 L R2,RSPRPAGE GET ADDRESS OF BUFFER @V60B9BA 00378000 L R5,SAVEWRK2 ADDR OF HOLDING AREA @V60B9BA 00379000 L R6,RDEVEXTN ADDR OF RSPXBLOK @V60B9BA 00380000 USING CATSECT,R2 ADDRESSIBILITY @V60B9BA 00381000 TM RDEVFTR,FTR4WCGM IS THE FEATURE INSTALLED? @V60B9BA 00382000 BO GOT4 XFER IF SO V60B9BA 00383000 CLI CATWCGM+4,X'00' ARE WE USING MORE THAN 2 ? @V60B9BA 00384000 BNE MSG241E XFER IF SO @V60B9BA 00385000 GOT4 MVC HLDGCM1(16),CATGRAF SAVE THE GRAPHIC MODS @V60B9BA 00386000 MVC CATFINAL(1),CATWCGM SET UP THE WCGMS SPECIFIED @V60B9BA 00387000 MVC CATFINAL+1(1),CATWCGM+2 ... IN THE CAT FOR A @V60B9BA 00388000 MVC CATFINAL+2(1),CATWCGM+4 ... LOAD WCGM CCW @V60B9BA 00389000 MVC CATFINAL+3(1),CATWCGM+6 ... @V60B9BA 00390000 MVC HLDCCW1,CLRCCW CLEAR PRINTER CCW @V60B9BA 00391000 LM R0,R1,LDWCGCCW LOAD WCGM CCW @V60B9BA 00392000 ALR R0,R2 RELOCATE DATA ADDRESS @V60B9BA 00393000 STM R0,R1,HLDCCW2 OUR SECOND CCW @V60B9BA 00394000 MVC HLDCCW3,SELTTCCW SELECT TRANSLATE TABLE 0 @V60B9BA 00395000 LM R0,R1,LTTCCW LOAD TRANSLATE TABLE CCW @V60B9BA 00396000 ALR R0,R2 RELOCATE DATA ADDRESS @V60B9BA 00397000 STM R0,R1,HLDCCW4 OUR FOURTH CCW @V60B9BA 00398000 MVC HLDCCW5,LOADSNS DUMMY SENSE CCW @V60B9BA 00399000 LA R1,HLDCCW1 OUR FIRST CCW @V60B9BA 00400000 ST R1,IOBCAW PUT IT IN THE IOBLOCK @V60B9BA 00401000 LA R1,CATRTN THE INTERRUPT RETURN ADDR @V60B9BA 00402000 ST R1,IOBIRA SAVE IT IN THE IOBLOK @V60B9BA 00403000 ST R13,IOBMISC SAVE REGISTER 13 @V60B9BA 00404000 B TCSSIO DO THE START I/O @V60B9BA 00405000 SPACE 00406000 CATRTN EQU * HERE AFTER TRANS TBL I/O @V60B9BA 00407000 USING *,R12 TEMPORARY ADDRESSIBILITY @V60B9BA 00408000 S R12,=A(CATRTN-DMKTCS) @V60B9BA 00409000 USING DMKTCS,R12 NEW ADDRESSIBILITY @V60B9BA 00410000 LR R1,R10 CHECK FOR COPY IOBLOK @V60B9BA 00411000 L R10,IOBLINK LOAD ADDRESS OF ORIGINAL @V60B9BA 00412000 CR R1,R10 COPY IOBLOK PRESENT? @V60B9BA 00413000 BE OK1 XFER IF NOT @V60B9BA 00414000 OI IOBSTAT,IOBFATAL INDICATE FATAL ERROR @V60B9BA 00415000 LA R0,IOBSIZE LOAD SIZE OF IOBLOK @V60B9BA 00416000 CALL DMKFRET RETURN STORAGE @V60B9BA 00417000 B TCSDSP WAIT FOR DEVICE END @V60B9BA 00418000 OK1 L R13,IOBMISC RESTORE REGISTER 13 @V60B9BA 00419000 LM R0,R11,SAVEREGS RESTORE ENTRY REGISTERS @V60B9BA 00420000 L R5,SAVEWRK2 ADDR OF HOLDING AREA @V60B9BA 00421000 L R6,RDEVEXTN RSPXBLOK ADDRESSIBILITY @V60B9BA 00422000 TM IOBSTAT,IOBFATAL FATAL I/O ERROR ? @V60B9BA 00423000 BO EXITFF ERROR EXIT IF SO @V60B9BA 00424000 CLC IOBMISC2(2),=C'LD' DID A LOAD CHECK OCCUR ? @V60B9BA 00425000 BE MSG241E XFER IF SO @V60B9BA 00426000 ST R5,IOBMISC2 GET RID OF 'TCS ' @V60B9BA 00427000 MVC RSPXCRWC(4),CATFINAL NEW WCGM VALUES @V60B9BA 00428000 MVC RSPXCHR,HLDCHARS NEW CAT IN THE 3800 @V60B9BA 00429000 OI SAVEWRK1,X'40' SET CLR PRT ISSUED FLAG @V60B9BA 00430000 SPACE 00431000 * NOW WE MUST LOAD THE GRAPHIC MODIFICATIONS 00432000 * ASSOCIATED WITH THIS CHARACTER ARRANGEMENT TABLE 00433000 * THE TRANSLATE TABLE HAS BEEN SET UP ALREADY AND THE 00434000 * 'CLEAR PRINTER' CCW HAS BEEN ISSUED. 00435000 SPACE 00436000 LDGRMOD SR R1,R1 INDEX INTO GRAPHIC MODS @V60B9BA 00437000 MVC SAVEWRK4,=C'GRAF' FIRST 4 CHARS OF MEMBER @V60B9BA 00438000 LDGLOOP ST R1,SAVEWRK9 SAVE IT ACROSS MEMLOAD @V60B9BA 00439000 LA R3,HLDGCM1(R1) GCM NAME @V60B9BA 00440000 CLI 0(R3),C' ' ARE WE DONE ? @V60B9BA 00441000 BE LDMDFY XFER IF SO @V60B9BA 00442000 MVC SAVEWRK5,0(R3) MOVE IN THE GCM NAME @V60B9BA 00443000 BAL R3,MEMLOAD LOAD IT INTO THE BUFFERS @V60B9BA 00444000 BNZ MSG241E ERROR RETURN IF BAD LOAD @V60B9BA 00445000 L R5,SAVEWRK2 ADDRESS OF HOLDING AREA @V60B9BA 00446000 L R2,RSPRPAGE SET UP FOR IDAL ADDRESSING @V60B9BA 00447000 LA R2,8(R2) FIRST BYTE OF GRAPH MOD @V60B9BA 00448000 ST R2,HLDCCW5 PLACE TO PUT FIRST IDAW @V60B9BA 00449000 LA R2,2040(R2) NEXT 2048 BYTE BLOCK @V60B9BA 00450000 ST R2,HLDCCW5+4 2ND IDAW @V60B9BA 00451000 L R2,RSPRPAG2 NEXT BUFFER @V60B9BA 00452000 ST R2,HLDCCW6 3RD IDAW @V60B9BA 00453000 LA R2,2048(R2) SECOND BLOCK IN BUFFER @V60B9BA 00454000 ST R2,HLDCCW6+4 4TH IDAW @V60B9BA 00455000 L R2,RSPRPAGE POINT TO 1ST PAGE AGAIN @V60B9BA 00456000 LA R0,HLDCCW5 POINT TO IDAW LIST @V60B9BA 00457000 ICM R0,B'1000',LGMCCW LOAD GRAPHIC MOD CCW @V60B9BA 00458000 LH R1,6(R2) LENGTH OF THE GRAPHIC MOD @V60B9BA 00459000 ICM R1,B'1100',LGMCCW+4 PUT IN THE CCW FLAGS @V60B9BA 00460000 STM R0,R1,HLDCCW1 FIRST CCW @V60B9BA 00461000 MVC HLDCCW2,LOADSNS DUMMY SENSE CCW @V60B9BA 00462000 LA R1,HLDCCW1 OUR FIRST CCW @V60B9BA 00463000 ST R1,IOBCAW PUT IT IN THE IOBLOCK @V60B9BA 00464000 LA R1,LGMRTN THE INTERRUPT RETURN ADDR @V60B9BA 00465000 ST R1,IOBIRA SAVE IT IN THE IOBLOK @V60B9BA 00466000 ST R13,IOBMISC SAVE REGISTER 13 @V60B9BA 00467000 B TCSSIO DO THE START I/O @V60B9BA 00468000 SPACE 00469000 LGMRTN EQU * HERE AFTER GRAPH MOD I/O @V60B9BA 00470000 USING *,R12 TEMPORARY ADDRESSIBILITY @V60B9BA 00471000 S R12,=A(LGMRTN-DMKTCS) @V60B9BA 00472000 USING DMKTCS,R12 NEW ADDRESSIBILITY @V60B9BA 00473000 LR R1,R10 CHECK FOR COPY IOBLOK @V60B9BA 00474000 L R10,IOBLINK LOAD ADDRESS OF ORIGINAL @V60B9BA 00475000 CR R1,R10 COPY IOBLOK PRESENT? @V60B9BA 00476000 BE OK2 XFER IF NOT @V60B9BA 00477000 OI IOBSTAT,IOBFATAL INDICATE FATAL ERROR @V60B9BA 00478000 LA R0,IOBSIZE LOAD SIZE OF IOBLOK @V60B9BA 00479000 CALL DMKFRET RETURN STORAGE @V60B9BA 00480000 B TCSDSP WAIT FOR DEVICE END @V60B9BA 00481000 OK2 L R13,IOBMISC RESTORE REGISTER 13 @V60B9BA 00482000 LM R0,R11,SAVEREGS RESTORE ENTRY REGISTERS @V60B9BA 00483000 L R5,SAVEWRK2 ADDR OF HOLDING AREA @V60B9BA 00484000 TM IOBSTAT,IOBFATAL FATAL I/O ERROR ? @V60B9BA 00485000 BO EXITFF ERROR EXIT IF SO @V60B9BA 00486000 CLC IOBMISC2(2),=C'LD' DID A LOAD CHECK OCCUR ? @V60B9BA 00487000 BE MSG241E XFER IF SO @V60B9BA 00488000 ST R5,IOBMISC2 GET RID OF 'TCS ' @V60B9BA 00489000 L R1,SAVEWRK9 RESTORE GRAPHIC MOD INDEX @V60B9BA 00490000 LA R1,4(R1) POINT TO NEXT ONE @V60B9BA 00491000 CH R1,=H'16' FINISHED LAST ONE ? @V60B9BA 00492000 BE LDMDFY XFER IF SO @V60B9BA 00493000 B LDGLOOP DO NEXT GRAPHIC MOD @V60B9BA 00494000 SPACE 2 00495000 * NOW DO THE COPY MODIFICATION LOAD 00496000 SPACE 00497000 LDMDFY L R6,RDEVEXTN POINT TO RSPXBLOK @V60B9BA 00498000 CLC HLDMDFY,RSPXCMOD IS IT ALREADY THERE ? @V60B9BA 00499000 * (INCLUDING NULL CMOD) @V60B9BA 00500000 BE LDFCB IF SO, GO ON TO THE FCB @V60B9BA 00501000 MVC SAVEWRK4,=C'MOD1' FIRST 4 CHARACTERS @V60B9BA 00502000 L R2,RSPRPAGE FIRST BUFFER @V60B9BA 00503000 MVC 0(L'NULLMOD,R2),NULLMOD MOVE IN A NULL CMOD @V60B9BA 00504000 CLI HLDMDFY,0 NULL CMOD SPCECIFIED ? @V60B9BA 00505000 BE LOADIT GO LOAD IT INTO THE 3800 @V60B9BA 00506000 MVC SAVEWRK5,HLDMDFY MOVE IN THE CMOD NAME @V60B9BA 00507000 BAL R3,MEMLOAD LOAD IT INTO THE BUFFERS @V60B9BA 00508000 BNZ MSG241E ERROR RETURN FOR BAD LOAD @V60B9BA 00509000 LOADIT L R2,RSPRPAGE SET UP FOR IDAL ADDRESSING @V60B9BA 00510000 L R5,SAVEWRK2 ADDR OF HOLDING AREA @V60B9BA 00511000 L R6,RDEVEXTN RSPXBLOK ADDRESSIBILITY @V60B9BA 00512000 LA R2,8(R2) FIRST BYTE OF COPY MOD @V60B9BA 00513000 ST R2,HLDCCW5 PLACE TO PUT FIRST IDAW @V60B9BA 00514000 LA R2,2040(R2) NEXT 2048 BYTE BLOCK @V60B9BA 00515000 ST R2,HLDCCW5+4 2ND IDAW @V60B9BA 00516000 L R2,RSPRPAG2 NEXT BUFFER @V60B9BA 00517000 ST R2,HLDCCW6 3RD IDAW @V60B9BA 00518000 LA R2,2048(R2) SECOND BLOCK IN BUFFER @V60B9BA 00519000 ST R2,HLDCCW6+4 4TH IDAW @V60B9BA 00520000 L R2,RSPRPAGE POINT TO 1ST PAGE AGAIN @V60B9BA 00521000 MVC HLDCCW1,CLRCCW SET UP CLEAR PRINTER CCW @V60B9BA 00522000 LA R0,HLDCCW5 POINT TO IDAW LIST @V60B9BA 00523000 ICM R0,B'1000',LCMCCW LOAD COPY MOD CCW @V60B9BA 00524000 LH R1,6(R2) LENGTH OF THE COPY MOD @V60B9BA 00525000 ICM R1,B'1100',LCMCCW+4 PUT IN THE CCW FLAGS @V60B9BA 00526000 STM R0,R1,HLDCCW2 SECOND CCW @V60B9BA 00527000 MVC HLDCCW3,LOADSNS DUMMY SENSE CCW @V60B9BA 00528000 LA R1,HLDCCW1 OUR FIRST CCW @V60B9BA 00529000 TM SAVEWRK1,X'40' CLEAR PRINTER ISSUED? @V60B9BA 00530000 BZ *+8 XFER IF NOT @V60B9BA 00531000 LA R1,HLDCCW2 BYPASS CLEAR PRINTER CCW @V60B9BA 00532000 OI SAVEWRK1,X'40' CLEAR PRINTER NOW IS DONE @V60B9BA 00533000 ST R1,IOBCAW PUT IT IN THE IOBLOCK @V60B9BA 00534000 LA R1,LCMRTN THE INTERRUPT RETURN ADDR @V60B9BA 00535000 ST R1,IOBIRA SAVE IT IN THE IOBLOK @V60B9BA 00536000 ST R13,IOBMISC SAVE REGISTER 13 @V60B9BA 00537000 B TCSSIO DO THE START I/O @V60B9BA 00538000 SPACE 00539000 LCMRTN EQU * HERE AFTER COPY MOD I/O @V60B9BA 00540000 USING *,R12 TEMPORARY ADDRESSIBILITY @V60B9BA 00541000 S R12,=A(LCMRTN-DMKTCS) @V60B9BA 00542000 USING DMKTCS,R12 NEW ADDRESSIBILITY @V60B9BA 00543000 LR R1,R10 CHECK FOR COPY IOBLOK @V60B9BA 00544000 L R10,IOBLINK LOAD ADDRESS OF ORIGINAL @V60B9BA 00545000 CR R1,R10 COPY IOBLOK PRESENT? @V60B9BA 00546000 BE OK3 XFER IF NOT @V60B9BA 00547000 OI IOBSTAT,IOBFATAL INDICATE FATAL ERROR @V60B9BA 00548000 LA R0,IOBSIZE LOAD SIZE OF IOBLOK @V60B9BA 00549000 CALL DMKFRET RETURN STORAGE @V60B9BA 00550000 B TCSDSP WAIT FOR DEVICE END @V60B9BA 00551000 OK3 L R13,IOBMISC RESTORE REGISTER 13 @V60B9BA 00552000 LM R0,R11,SAVEREGS RESTORE ENTRY REGISTERS @V60B9BA 00553000 L R5,SAVEWRK2 ADDR OF HOLDING AREA @V60B9BA 00554000 TM IOBSTAT,IOBFATAL FATAL I/O ERROR ? @V60B9BA 00555000 BO EXITFF ERROR EXIT IF SO @V60B9BA 00556000 CLC IOBMISC2(2),=C'LD' DID A LOAD CHECK OCCUR ? @V60B9BA 00557000 BE MSG241E XFER IF SO @V60B9BA 00558000 ST R5,IOBMISC2 GET RID OF 'TCS ' @V60B9BA 00559000 L R6,RDEVEXTN RSPXBLOK ADDRESSIBILITY @V60B9BA 00560000 MVC RSPXCMOD,HLDMDFY NEW CMOD IN THE 3800 @V60B9BA 00561000 SPACE 2 00562000 * NOW WE LOAD THE FCB 00563000 SPACE 00564000 LDFCB MVC SAVEWRK4,=C'FCB3' FIRST FOUR CHARACTERS @V60B9BA 00565000 MVC SAVEWRK5,HLDFCB THE FCB NAME @V60B9BA 00566000 L R2,RSPRPAGE BUFFER POINTER @V60B9BA 00567000 LA R1,6/2 ASSUME FCB WAS '6 ' @V60B9BA 00568000 CLC HLDFCB,=C'6 ' WAS IT ? @V60B9BA 00569000 BE CALCFCB XFER IF SO @V60B9BA 00570000 LA R1,8/2 ASSUME FCB WAS '8 ' @V60B9BA 00571000 CLC HLDFCB,=C'8 ' WAS IT ? @V60B9BA 00572000 BE CALCFCB XFER IF SO @V60B9BA 00573000 LA R1,12/2 ASSUME FCB WAS '12 ' @V60B9BA 00574000 CLC HLDFCB,=C'12 ' WAS IT ? @V60B9BA 00575000 BE CALCFCB XFER IF SO @V60B9BA 00576000 CLC RSPXFCB,HLDFCB IS IT ALREADY IN ? @V60B9BA 00577000 BE LDFOSC XFER IF SO - DONE @V60B9BA 00578000 BAL R3,MEMLOAD LOAD IN THE FCB @V60B9BA 00579000 BNZ MSG241E ERROR RETURN IF BAD LOAD @V60B9BA 00580000 L R2,RSPRPAGE BUFFER POINTER @VA09314 00580100 L R5,SAVEWRK2 ADDR OF HOLDING AREA @VA09314 00580200 L R6,RDEVEXTN RSPXBLOK ADDRESSIBILITY @VA09314 00580300 LH R1,6(R2) GET LENGTH INTO R1 @VA09314 00581100 B FCBIO IT'S IN STORAGE- LOAD IT @V60B9BA 00582000 SPACE 00583000 CALCFCB EQU * HERE TO CALCULATE THE PROPER FCB 00584000 OI SAVEWRK1,X'20' FCB IS CALCULATED @V60B9BA 00585000 LR R4,R1 NUMBER OF HALF-INCHES @V60B9BA 00586000 S R4,F3 SUBTRACT 3 TO GET FCB BYTE @V60B9BA 00587000 SLL R4,4 PUT IT IN POSITION FOR FCB @V60B9BA 00588000 STC R4,8(R2) PUT IT IN THE BUFFER AND @V60B9BA 00589000 MVC 9(143,R2),8(R2) .. PROPOGATE TO MAX LENGTH @V60B9BA 00590000 ST R1,SAVEWRK7 SAVE THE LPI/2 @V60B9BA 00591000 LA R4,8(R2,R1) PLACE TO PUT CHANNEL 1 CODE @V60B9BA 00592000 OI 0(R4),X'01' PUT IN SKIP TO CH 1 @V60B9BA 00593000 SR R3,R3 INITIALIZE THE REGISTER @V60B9BA 00594000 IC R3,RDEVCURP USER CURRENT PAPER SIZE 1ST @V60B9BA 00595000 LA R4,12 NUMBER OF LINE SIZES TO TRY @V60B9BA 00596000 B FCB2 WE ARE SET UP FIRST TIME @V60B9BA 00597000 FCBLOOP SR R3,R3 INITIALIZE THE REGISTER @V60B9BA 00598000 IC R3,LINESIZE-1(R4) GET A PAPER SIZE IN @V60B9BA 00599000 FCB2 STC R3,SAVEWRK9 SAVE PAPER LENGTH FOR LATER @V60B9BA 00600000 SR R0,R0 INITIALIZE FOR MULTIPLY @V60B9BA 00601000 L R1,SAVEWRK7 LPI/2 INTO R1 @V60B9BA 00602000 MR R0,R3 MULT BY NUMBER OF HALF-INS @V60B9BA 00603000 FCBIO L R0,LDFCBCCW FIRST PART OF LOAD FCB CCW @V60B9BA 00604000 ALR R0,R2 RELOCATE ADDRESS @V60B9BA 00605000 O R1,LDFCBCCW+4 LENGTH + FLAGS @V60B9BA 00606000 STM R0,R1,HLDCCW2 SECOND CCW @V60B9BA 00607000 MVC HLDCCW3,LOADSNS DUMMY SENSE CCW @V60B9BA 00608000 MVC HLDCCW1,CLRCCW CLEAR PRINT CCW @V60B9BA 00609000 LA R1,HLDCCW1 OUR FIRST CCW @V60B9BA 00610000 TM SAVEWRK1,X'40' HAS CLR PRT BEEN ISSUED? @V60B9BA 00611000 BZ *+8 XFER IF NOT @V60B9BA 00612000 LA R1,HLDCCW2 BYPASS THE CLR PRT @V60B9BA 00613000 OI SAVEWRK1,X'40' IT NOW HAS BEEN ISSUED @V60B9BA 00614000 ST R1,IOBCAW PUT IT IN THE IOBLOCK @V60B9BA 00615000 LA R1,FCBRTN THE INTERRUPT RETURN ADDR @V60B9BA 00616000 ST R1,IOBIRA SAVE IT IN THE IOBLOK @V60B9BA 00617000 ST R13,IOBMISC SAVE REGISTER 13 @V60B9BA 00618000 ST R4,SAVEWRK8 SAVE THE PAPER LENGTH INDEX @V60B9BA 00619000 B TCSSIO DO THE START I/O @V60B9BA 00620000 SPACE 00621000 FCBRTN EQU * HERE AFTER LOAD FCB I/O @V60B9BA 00622000 USING *,R12 TEMPORARY ADDRESSIBILITY @V60B9BA 00623000 S R12,=A(FCBRTN-DMKTCS) @V60B9BA 00624000 USING DMKTCS,R12 NEW ADDRESSIBILITY @V60B9BA 00625000 LR R1,R10 CHECK FOR COPY IOBLOK @V60B9BA 00626000 L R10,IOBLINK LOAD ADDRESS OF ORIGINAL @V60B9BA 00627000 CR R1,R10 COPY IOBLOK PRESENT? @V60B9BA 00628000 BE OK4 XFER IF NOT @V60B9BA 00629000 OI IOBSTAT,IOBFATAL INDICATE FATAL ERROR @V60B9BA 00630000 LA R0,IOBSIZE LOAD SIZE OF IOBLOK @V60B9BA 00631000 CALL DMKFRET RETURN STORAGE @V60B9BA 00632000 B TCSDSP WAIT FOR DEVICE END @V60B9BA 00633000 OK4 L R13,IOBMISC RESTORE REGISTER 13 @V60B9BA 00634000 LM R0,R11,SAVEREGS RESTORE ENTRY REGISTERS @V60B9BA 00635000 L R5,SAVEWRK2 ADDR OF HOLDING AREA @V60B9BA 00636000 L R4,SAVEWRK8 RESTORE THE PAPER LGTH INDEX@V60B9BA 00637000 TM IOBSTAT,IOBFATAL FATAL I/O ERROR ? @V60B9BA 00638000 BO EXITFF ERROR EXIT IF SO @V60B9BA 00639000 CLC IOBMISC2(2),=C'LD' DID A LOAD CHECK OCCUR ? @V60B9BA 00640000 BNE FCBDONE NO- THE FCB HAS BEEN LOADED @V60B9BA 00641000 TM IOBMISC2+2,X'08' WAS IT FCB LENGTH CHECK? @V60B9BA 00642000 BZ MSG241E NO-SO BAD MODULE LOAD @V60B9BA 00643000 TM SAVEWRK1,X'20' FCB CALCULATED ? @V60B9BA 00644000 BZ MSG240E NO- FORMS-FCB MISMATCH @V60B9BA 00645000 BCT R4,FCBLOOP TRY NEXT PAPER LENGTH @V60B9BA 00646000 B MSG241E RAN OUT OF PAPER LENGTHS @V60B9BA 00647000 FCBDONE ST R5,IOBMISC2 GET RID OF 'TCS ' @V60B9BA 00648000 L R6,RDEVEXTN RSPXBLOK ADDRESSIBILITY @V60B9BA 00649000 MVC RSPXFCB,HLDFCB NEW FCB LOADED @V60B9BA 00650000 TM SAVEWRK1,X'20' FCB CALCULATED ? @V60B9BA 00651000 BZ LDFOSC XFER IF NOT @V60B9BA 00652000 MVC RDEVCURP,SAVEWRK9 GET CURRENT PAPER LENGTH @V60B9BA 00653000 SPACE 2 00654000 LDFOSC LA R0,HLDSTCPY GET STARTING COPY NUMBER @V60B9BA 00655000 O R0,LDCPYCCW SET UP THE LOAD CPY NO. CCW @V60B9BA 00656000 L R1,LDCPYCCW+4 THE SECOND HALF @V60B9BA 00657000 STM R0,R1,HLDCCW2 FIRST IS LD COPY NUM CCW @V60B9BA 00658000 MVC HLDCCW1,CLRCCW MIGHT NEED A CLR PRT @V60B9BA 00659000 TM HLDFLAG,SPCOPYFG 1 TRANSMISSION ? @V60B9BA 00660000 BZ TWOBYTES XFER IF NOT @V60B9BA 00661000 CLI HLDFLSHC,0 ZERO FLASH COUNT ? @V60B9BA 00662000 BE TWOBYTES XFER IF SO @V60B9BA 00663000 CLC HLDFLSHC,HLDCPY ALL COPIES FLASHED ? @V60B9BA 00664000 BNL TWOBYTES XFER IF SO @V60B9BA 00665000 SPACE 00666000 L R1,=X'00FF0000' INITIALIZED FOSC @V60B9BA 00667000 ICM R1,B'1000',HLDFLSHC NUMBER TO BE FLASHED @V60B9BA 00668000 ICM R1,B'0010',HLDCPY TOTAL NUMBER OF COPIES @V60B9BA 00669000 SR R0,R0 MUST SUBTRACT THE FIRST @V60B9BA 00670000 IC R0,HLDFLSHC .. PART TO GET THE SECOND @V60B9BA 00671000 SLL R0,8 GET IT IN POSITION @V60B9BA 00672000 SLR R1,R0 GET THE FINAL FOSC @V60B9BA 00673000 ST R1,SAVEWRK9 PLACE TO PUT IT @V60B9BA 00674000 LA R1,4 NUMBER OF BYTES FOR THE CCW @V60B9BA 00675000 B FOSCIO DO THE 3800 I/O @V60B9BA 00676000 SPACE 00677000 TWOBYTES TM HLDFLAG,SPCOPYFG 1 TRANSMISSION ? @V60B9BA 00678000 BZ MULTXM XFER IF NOT @V60B9BA 00679000 SR R0,R0 GET AN INITIALIZED FOSC @V60B9BA 00680000 CLI HLDFLSHC,0 ZERO FLASH COUNT ? @V60B9BA 00681000 BE *+8 XFER IF SO @V60B9BA 00682000 ICM R0,B'0100',=X'FF' SPECIFY FLAHSING @V60B9BA 00683000 ICM R0,B'1000',HLDCPY TOTAL COPIES TO PRINT @V60B9BA 00684000 ST R0,SAVEWRK9 PLACE TO PUT IT @V60B9BA 00685000 LA R1,2 NUMBER OF BYTES IN FOSC @V60B9BA 00686000 B FOSCIO GO DO THE I/O @V60B9BA 00687000 MULTXM MVI SAVEWRK9,X'01' ONE COPY TO PRINT NOW @V60B9BA 00688000 MVI SAVEWRK9+1,0 ASSUME NO FLASHING @V60B9BA 00689000 CLC HLDSTCPY,HLDFLSHC SHOULD WE FLASH THIS ONE? @V60B9BA 00690000 BH *+8 XFER IF NOT @V60B9BA 00691000 MVI SAVEWRK9+1,X'FF' SPECIFY FLASHING @V60B9BA 00692000 LA R1,2 TWO BYTES IN THE FOSC @V60B9BA 00693000 SPACE 00694000 FOSCIO LA R0,SAVEWRK9 WHERE THE FOSC IS @V60B9BA 00695000 ICM R0,B'1000',LFOSCCCW THE FOSC CCW @V60B9BA 00696000 ICM R1,B'1100',LFOSCCCW+4 THE FLAGS @V60B9BA 00697000 STM R0,R1,HLDCCW3 SECOND CCW @V60B9BA 00698000 MVC HLDCCW4,BLKDATCK SET BLK DATA CK LATCH @VA09294 00699100 MVC HLDCCW5,LOADSNS DUMMY SENSE @VA09294 00699200 LA R1,HLDCCW1 OUR FIRST CCW @V60B9BA 00700000 TM SAVEWRK1,X'40' HAS 'CLR PRT' BEEN ISSUED? @V60B9BA 00701000 BZ *+8 XFER IF NOT @V60B9BA 00702000 LA R1,HLDCCW2 BYPASS THE CLR PRT @V60B9BA 00703000 OI SAVEWRK1,X'40' IT NOW HAS BEEN ISSUED @V60B9BA 00704000 ST R1,IOBCAW PUT IT IN THE IOBLOCK @V60B9BA 00705000 LA R1,FOSCRTN THE INTERRUPT RETURN ADDR @V60B9BA 00706000 ST R1,IOBIRA SAVE IT IN THE IOBLOK @V60B9BA 00707000 ST R13,IOBMISC SAVE REGISTER 13 @V60B9BA 00708000 B TCSSIO DO THE START I/O @V60B9BA 00709000 SPACE 00710000 FOSCRTN EQU * HERE AFTER LOAD FOSC I/O @V60B9BA 00711000 USING *,R12 TEMPORARY ADDRESSIBILITY @V60B9BA 00712000 S R12,=A(FOSCRTN-DMKTCS) @V60B9BA 00713000 USING DMKTCS,R12 NEW ADDRESSIBILITY @V60B9BA 00714000 LR R1,R10 CHECK FOR COPY IOBLOK @V60B9BA 00715000 L R10,IOBLINK LOAD ADDRESS OF ORIGINAL @V60B9BA 00716000 CR R1,R10 COPY IOBLOK PRESENT? @V60B9BA 00717000 BE OK5 XFER IF NOT @V60B9BA 00718000 OI IOBSTAT,IOBFATAL INDICATE FATAL ERROR @V60B9BA 00719000 LA R0,IOBSIZE LOAD SIZE OF IOBLOK @V60B9BA 00720000 CALL DMKFRET RETURN STORAGE @V60B9BA 00721000 B TCSDSP WAIT FOR DEVICE END @V60B9BA 00722000 OK5 L R13,IOBMISC RESTORE REGISTER 13 @V60B9BA 00723000 LM R0,R11,SAVEREGS RESTORE ENTRY REGISTERS @V60B9BA 00724000 L R5,SAVEWRK2 ADDR OF HOLDING AREA @V60B9BA 00725000 TM IOBSTAT,IOBFATAL FATAL I/O ERROR ? @V60B9BA 00726000 BO EXITFF ERROR EXIT IF SO @V60B9BA 00727000 CLC IOBMISC2(2),=C'LD' DID A LOAD CHECK OCCUR ? @V60B9BA 00728000 BNE FOSCOK XFER IF NOT @V60B9BA 00729000 OI IOBSTAT,IOBFATAL SET FATAL I/O ERROR @V60B9BA 00730000 B EXITFF AND EXIT @V60B9BA 00731000 FOSCOK ST R5,IOBMISC2 GET RID OF 'TCS ' @V60B9BA 00732000 B EXIT0 AND LEAVE @V60B9BA 00733000 SPACE 6 00734000 TCSSIO MVC IOBMISC2(4),=C'TCS ' INDICATE SETUP ENTRY @V60B9BA 00735000 NI IOBFLAG,X'FF'-IOBRSTRT CLEAR THE RESTART FLAG @V60B9BA 00736000 CALL DMKIOSQR ISSUE THE START I/O @V60B9BA 00737000 TCSDSP GOTO DMKDSPCH WAIT FOR THE INTERRUPT @V60B9BA 00738000 SPACE 5 00739000 EXITF0 DS 0H @VA12900 00739200 MVI SAVEWRK1+1,X'F0' SET CC=4 - PAGING ERROR @VA12900 00739400 B EXIT GO TO COMMON EXIT ROUTINE @VA12900 00739600 SPACE 2 00739800 EXITFF MVI SAVEWRK1+1,X'FF' NON-ZERO CONDITION CODE @V60B9BA 00740000 B EXIT GO TO COMMON EXIT @V60B9BA 00741000 SPACE 00742000 EXIT0 EQU * ITS ZERO CONDITION CODE @V60B9BA 00743000 EXIT L R1,SAVEWRK3 WAS THERE A SYS VIRT PAGE? @V60B9BA 00744000 LTR R1,R1 WELL ? @V60B9BA 00745000 BZ EXITA XFER IF NOT @V60B9BA 00746000 SR R0,R0 DUMMY DASD ADDRESS @V60B9BA 00747000 CALL DMKRPAGT,AFFINITY,PARM=SYSTEM RELEASE IT @V60B9BA 00748000 CALL DMKPGTVR GIVE IT BACK @V60B9BA 00749000 EXITA LA R0,HLDSIZE LET'S GIVE BACK THE @V60B9BA 00750000 L R1,SAVEWRK2 HOLDING AREA WE GOT @V60B9BA 00751000 CALL DMKFRET GO DO IT @V60B9BA 00752000 EXITB TM SAVEWRK1+1,X'FF' SET THE CONDITION CODE @V60B9BA 00753000 EXIT 00754000 SPACE 5 00755000 MSG240E LA R2,240 FCB-FORMS MISMATCH CODE @V60B9BA 00756000 LA R5,15 MESSAGE DATA LENGTH @V60B9BA 00757000 B MSGCOMN JOIN COMMON CODE @V60B9BA 00758000 SPACE 00759000 MSG241E LA R2,241 INVALID LOAD MODULE @V60B9BA 00760000 LA R5,20 LENGTH OF DATA @V60B9BA 00761000 SPACE 00762000 MSGCOMN L R4,RSPRPAGE ADDR OF DATA AREA @V60B9BA 00763000 MVI 3(R4),0 DELIMITER BEFOR 2ND FIELD @V60B9BA 00764000 LA R4,4(R4) NEXT MESSAGE FIELD @V60B9BA 00765000 CH R2,=H'240' MSG ID 240 ? @V60B9BA 00766000 BE SKIPMOD XFER IF SO @V60B9BA 00767000 MVC 0(4,R4),SAVEWRK5 MODULE NAME @V60B9BA 00768000 MVI 4(R4),0 DELIMITER @V60B9BA 00769000 LA R4,5(R4) NEXT MESSAGE FIELD @V60B9BA 00770000 SKIPMOD LH R1,SFBFILID GET SPOOL FILE ID @V60B9BA 00771000 CALL DMKCVTBD CONVERT TO DECIMAL @VMI0013 00772000 STCM R1,B'1111',0(R4) SPOOLID @V60B9BA 00773000 MVI 4(R4),0 DELIMITER @V60B9BA 00774000 LA R4,5(R4) NEXT FIELD @V60B9BA 00775000 MVC 0(6,R4),BLANKS BLANK THE FIELD @V60B9BA 00776000 TM SAVEWRK1,X'10' ENTERED AT DMKTCSSP? @V60B9BA 00777000 BO MSGCONT XFER IF SO @V60B9BA 00778000 MVC 0(6,R4),=C'HELD ' FILE STATUS @V60B9BA 00779000 TM RDEVSTA2,RDEVPURG IS IT PURGE ? @V60B9BA 00780000 BZ MSGCONT XFER IF NOT @V60B9BA 00781000 MVC 0(6,R4),=C'PURGED' MOVE THAT @V60B9BA 00782000 SPACE 00783000 MSGCONT L R4,RSPRPAGE BEGINNING OF DATA AREA @V60B9BA 00784000 CALL DMKSCNRD GET 3800 ADDR IN CUU FORM @V60B9BA 00785000 CALL DMKCVTBH CONVERT TO PRINTABLE HEX @V60B9BA 00786000 STCM R1,B'0111',0(R4) DATA AREA @V60B9BA 00787000 LA R0,8 USERID LENGTH @V60B9BA 00788000 LA R1,SFBUSER USERID ADDRESS @V60B9BA 00789000 CALL DMKSCNAU GET THE VMBLOK @V60B9BA 00790000 BALR R6,0 SAVE CONDITION CODE @V60B9BA 00791000 SWTCHVM SWITCH TO USER'S VMBLOK @VMI0081 00792000 LR R0,R5 MESSAGE LENGTH @V60B9BA 00793000 ICM R0,B'1110',DMKTCS+3 MODULE ID @V60B9BA 00794000 LR R1,R4 ADDRESS OF DATA @V60B9BA 00795000 ICM R2,B'1100',=X'B0C5' OP + ALARM + RETURN @V60B9BA 00796000 CALL DMKERMSG SEND MESSAGE TO OPERATOR @V60B9BA 00797000 SPM R6 RESTORE CONDITION CODE @V60B9BA 00798000 BNZ EREXIT HE'S NOT LOGGED ON @V60B9BA 00799000 ICM R2,B'1000',=X'90' ALARM + RETURN @V60B9BA 00800000 CALL DMKERMSG SEND USER THE MESSAGE @V60B9BA 00801000 SPACE 00802000 EREXIT L R1,SAVEWRK3 THE SYSTEM VIRTUAL PAGE @V60B9BA 00803000 CALL DMKPGTVR GIVE IT BACK @V60B9BA 00804000 LA R0,HLDSIZE RETURN THE HOLDING AREA @V60B9BA 00805000 L R1,SAVEWRK2 ITS ADDRESS @V60B9BA 00806000 CALL DMKFRET RETURN IT @V60B9BA 00807000 MVI SAVEWRK1+1,X'FF' SET NON-ZERO COND. CODE @VA09268 00808100 L R1,SAVER11 VMBLOK OF CALLER @VMI0081 00809000 SWTCHVM SWITCH TO CALLER'S VMBLOK @VMI0081 00810000 B EXITB RETURN TO CALLER @VA09268 00811100 EJECT 00812000 *. 00813000 * THIS SUBROUTINE READS MEMBERS OF THE IMAGE LIBRARY SPECIFIED 00814000 * IN RDEVIMAG INTO THE LOCKED BUFFERS INDICATED IN THE 00815000 * RSPLCTL CONTROL BLOCK. THE DIRECTORY AND DATA ARE INITIALLY 00816000 * MOVED TO THE BUFFERS POINTED TO BY SAVEWRK3 AND THEN MOVED. 00817000 * ON ENTRY, THE MEMBER TO LOAD IS CONTAINED IN SAVEWRK4 & SAVEWRK5. 00818000 * THE DATA IS MOVED IN 4 SECTIONS: A, B, C, AND D. 00819000 * SINCE ITS MAXIMUM IS 8192 BYTES, IT CAN SPAN 3 PAGES 00820000 * IN THE IMAGE LIBRARY, WITH SECTION A IN THE FIRST PAGE, 00821000 * SECTIONS B & C IN THE SECOND PAGE, AND SECTION D IN THE 00822000 * THIRD PAGE. THE RESULT CAN SPAN 2 PAGES WITH 00823000 * SECTIONS A AND B LANDING IN THE FIRST PAGE AND 00824000 * SECTIONS C AND D LANDING IN THE SECOND PAGE. 00825000 *. 00826000 SPACE 00827000 MEMLOAD L R1,=A(DMKQNTBL) GET IMAGE LIBRARY ANCHOR @V60B9BA 00828000 LTR R1,R1 ANY SYSTEMS DEFINED ? @V60B9BA 00829000 BZ MEMERROR ERROR RETURN IF NOT @V60B9BA 00830000 TRANS 2,1,OPT=(BRING,DEFER,SYSTEM) BRING NPRTBL IN @V60B9BA 00831000 USING NPRTBL,R2 ADDRESSIBILITY @V60B9BA 00832000 MEMLD1 CLC NPRNAME,RDEVIMAG IS THIS THE IMAGE LIBRARY? @V60B9BA 00833000 BE MEMLD2 XFER IF SO @V60B9BA 00834000 AL R2,NPRPNT NEXT ENTRY @V60B9BA 00835000 CLC NPRPNT,ZEROES DUMMY LAST ENTRY ? @V60B9BA 00836000 BNE MEMLD1 TRY AGAIN IF NOT @V60B9BA 00837000 MEMERROR TM *,X'FF' NON-ZERO CONDITION CODE @V60B9BA 00838000 BR R3 RETURN TO CALLER @V60B9BA 00839000 MEMLD2 LA R0,6 LENGTH OF VOLSER @V60B9BA 00840000 LA R1,NPRVOL ADDRESS OF VOLSER @V60B9BA 00841000 CALL DMKSCNVS FIND THE RDEVBLOK @V60B9BA 00842000 BNZR R3 ERROR RETURN IF NOT FOUND @V60B9BA 00843000 TM RDEVFLAG-RDEVBLOK(R1),RDEVOWN CP-OWNED ? @V60B9BA 00844000 BZ MEMERROR ERROR IF NOT @V60B9BA 00845000 LA R6,32 PAGES/CYL FOR 2314 @V60B9BA 00846000 TM RDEVTYPE-RDEVBLOK(R1),TYP2314 2314? @V60B9BA 00847000 BO MEMLD3 XFER IF SO @V60B9BA 00848000 LA R6,120 PAGES/CYL FOR 3350 @V60B9BA 00849000 CLI RDEVTYPE-RDEVBLOK(R1),TYP3350 IS IT 3350? @V60B9BA 00850000 BE MEMLD3 XFER IF SO @V60B9BA 00851000 LA R6,96 Pages/cyl for 3375 HRC106DK 00851100 CLI RDEVTYPE-RDEVBLOK(R1),TYP3375 Is it 3375? HRC106DK 00851200 BE MEMLD3 Xfer if so HRC106DK 00851300 LA R6,150 Pages/cyl for 3380 HRC106DK 00851400 CLI RDEVTYPE-RDEVBLOK(R1),TYP3380 Is it 3380? HRC106DK 00851500 BE MEMLD3 Xfer if so HRC106DK 00851600 LA R6,57 PAGES/CYL FOR 3330 @V60B9BA 00852000 TM RDEVTYPE-RDEVBLOK(R1),TYP3330 IS IT A 3330? @V60B9BA 00853000 BO MEMLD3 XFER IF SO @V60B9BA 00854000 LA R6,24 IT MUST BE A 3340 OR 2305 @V60B9BA 00855000 MEMLD3 SLL R6,8 GET IT INTO POSITION @V60B9BA 00856000 MVC SAVEWRK6,NPRSTART GET STARTING CCPD @V60B9BA 00857000 MVC SAVEWRK6+3(1),RDEVCODE+1-RDEVBLOK(R1) INDEX @V60B9BA 00858000 L R1,SAVEWRK3 VIRT ADDRESS OF SYSTEM PAGE @V60B9BA 00859000 L R0,SAVEWRK6 STARTING DASD CCPD @V60B9BA 00860000 ST R0,SAVEWRK7 CURRENT CCPD @V60B9BA 00861000 CALL DMKRPAGT,PARM=SYSTEM+BRING BRING IT IN @V60B9BA 00862000 BNZR R3 RETURN, PAGING ERROR @V60B9BA 00863000 DROP R2 NOT NEEDED FOR NPRTBL @V60B9BA 00864000 USING PDEBLOK,R2 ADDRESSES DIRECTORY ENTRIES @V60B9BA 00865000 CLC PDEIMAG,RDEVIMAG IS IT THE RIGHT IMAG LIB ? @V60B9BA 00866000 BNER R3 ERROR RETURN IF NOT @V60B9BA 00867000 L R0,PDENUM NUMBER OF MEMBERS @V60B9BA 00868000 LA R2,PDESIZE(R2) FIRST REAL MEMBER @V60B9BA 00869000 MEMLD3A LA R4,PDESIZE INCREMENT FOR BXLE @V60B9BA 00870000 LR R5,R2 SET UP THE @V60B9BA 00871000 O R5,F4095 .. COMPARAND TO END OF PAGE @V60B9BA 00872000 MEMLD4 CLC PDENAME,SAVEWRK4 IS THIS THE MEMBER TO LOAD? @V60B9BA 00873000 BE MEMLD7 XFER IF SO @V60B9BA 00874000 BCT R0,MEMLD5 TRY NEXT MEMBER @V60B9BA 00875000 B MEMERROR COULDN'T FIND THE MEMBER @V60B9BA 00876000 MEMLD5 BXLE R2,R4,MEMLD4 POINT TO NEXT ENTRY @V60B9BA 00877000 SPACE 00878000 * MUST GET NEXT DIRECTORY PAGE 00879000 SPACE 00880000 LR R4,R0 SAVE RESIDUAL MEMBER COUNT @V60B9BA 00881000 L R0,SAVEWRK7 CURRENT CCPD @V60B9BA 00882000 AL R0,F256 BUMP TO NEXT PAGE @V60B9BA 00883000 LR R1,R0 TO R1 FOR WORK @V60B9BA 00884000 N R1,=X'0000FF00' ISOLATE PAGE NUMBER @V60B9BA 00885000 CR R1,R6 REACHED MAXIMUM ? @V60B9BA 00886000 BNH MEMLD6 XFER IF NOT @V60B9BA 00887000 AL R0,=X'00010000' NEXT CYLINDER @V60B9BA 00888000 ICM R0,B'0010',F1+3 POINT TO PAGE 1 @V60B9BA 00889000 MEMLD6 ST R0,SAVEWRK7 SAVE CURRENT CCPD @V60B9BA 00890000 L R1,SAVEWRK3 VIRTUAL ADDR OF SYSTEM PAGE @V60B9BA 00891000 CALL DMKRPAGT,PARM=BRING+SYSTEM BRING IT IN @V60B9BA 00892000 BNZR R3 PAGING ERROR - RETURN @V60B9BA 00893000 LR R0,R4 RESTORE RESIDUAL MEMB CNT @V60B9BA 00894000 B MEMLD3A CONTINUE THE SEARCH @V60B9BA 00895000 SPACE 00896000 * WE FOUND THE DIRECTORY ENTRY 00897000 SPACE 00898000 MEMLD7 L R4,PDEDISP GET RBA OF MEMBER @V60B9BA 00899000 SRDL R4,12 DIVIDE BY 4096 @V60B9BA 00900000 SRL R5,20 REMAINDER IN R5 @V60B9BA 00901000 SLL R4,8 GET PAGE DISP INTO POSITION @V60B9BA 00902000 CLC PDELGTH,=F'8192' GREATER THAN MAXIMUM ? @V60B9BA 00903000 BHR R3 ERROR RETURN IF SO @V60B9BA 00904000 MVC SAVEWRK8,PDELGTH SAVE LENGTH LOCALLY @V60B9BA 00905000 DROP R2 NO LONGER NEEDED FOR DRCTRY @V60B9BA 00906000 SR R0,R0 WE NOW GET THE DISPLACEMENT @V60B9BA 00907000 SR R1,R1 GET PAGE NUMBER OF @VA10748 00908100 ICM R1,B'0010',SAVEWRK6+2 IMAGELIB START @VA10748 00908200 S R1,F256 CONVERT TO OFFSET FROM CYL START @VA10748 00908300 MVI SAVEWRK6+2,X'01' BACKUP IMAGELIB TO CYL START @VA10748 00908400 ALR R1,R4 PLUS PAGE DISPLACEMENT @VA10748 00908500 DR R0,R6 DIVIDE BY PAG/CYL @V60B9BA 00909000 SLL R1,16 GET NUM OF CYLS IN POSITION @V60B9BA 00910000 ALR R0,R1 ADD CYLS TO REMAINDER @V60B9BA 00911000 AL R0,SAVEWRK6 ADD START TO DISP @V60B9BA 00912000 ST R0,SAVEWRK7 SAVE IT FOR LATER @V60B9BA 00913000 L R4,RSPRPAGE TARGET ADDR FOR 1ST SECTION @V60B9BA 00914000 L R1,SAVEWRK3 VIRT SYSTEM PAGE @V60B9BA 00915000 CALL DMKRPAGT,PARM=BRING+SYSTEM BRING IT IN @V60B9BA 00916000 BNZR R3 PAGING ERROR - RETURN @V60B9BA 00917000 LR R1,R2 HOLD REAL ADDR FOR WORK @V60B9BA 00918000 ALR R2,R5 ADD DISP TO GET START @V60B9BA 00919000 CLC 0(4,R2),SAVEWRK5 NAMES MATCH ? @V60B9BA 00920000 BNER R3 ERROR RETURN IF NOT @V60B9BA 00921000 AL R1,F4096 GET LENGTH OF FIRST SECTION @V60B9BA 00922000 SLR R1,R2 ... OF THE MEMBER TO MOVE @V60B9BA 00923000 L R0,RSPRPAGE TARGET ADDRESS (SECT 1) @V60B9BA 00924000 LR R4,R2 SOURCE ADDRESS (SECT 1) @V60B9BA 00925000 LR R5,R1 SOURCE LENGTH @V60B9BA 00926000 LR R2,R1 SAVE THE MVCL LENGTH @V60B9BA 00927000 MVCL R0,R4 DO THE MOVE FOR SECT 1 @V60B9BA 00928000 C R2,SAVEWRK8 HAVE WE FINISHED? @V60B9BA 00929000 BNL MEMEXIT XFER IF SO @V60B9BA 00930000 SPACE 00931000 * SET UP TO MOVE THE SECOND SECTION 00932000 SPACE 00933000 S R2,SAVEWRK8 NEGATIVE OF REMAINING COUNT @V60B9BA 00934000 LCR R2,R2 MAKE IT POSITIVE @V60B9BA 00935000 ST R2,SAVEWRK8 SAVE IT @V60B9BA 00936000 LR R4,R0 SAVE THE NEW TARGET ADDRESS @V60B9BA 00937000 L R0,SAVEWRK7 CURRENT CCPD @V60B9BA 00938000 AL R0,F256 BUMP TO NEXT PAGE @V60B9BA 00939000 LR R1,R0 TO R1 FOR WORK @V60B9BA 00940000 N R1,=X'0000FF00' ISOLATE PAGE NUMBER @V60B9BA 00941000 CR R1,R6 REACHED MAX ? @V60B9BA 00942000 BNH MEMLD11 XFER IF NOT @V60B9BA 00943000 AL R0,=X'00010000' BUMP TO NEXT CYLINDER @V60B9BA 00944000 ICM R0,B'0010',F1+3 PAGE 1 @V60B9BA 00945000 MEMLD11 ST R0,SAVEWRK7 SAVE CURRENT CCPD @V60B9BA 00946000 L R1,SAVEWRK3 VIRTUAL ADDR OF SYSTEM PAGE @V60B9BA 00947000 CALL DMKRPAGT,PARM=BRING+SYSTEM BRING IT IN @V60B9BA 00948000 BNZR R3 PAGING ERROR - RETURN @V60B9BA 00949000 LA R1,4095(R4) GET COUNT FOR SECTION 2 @V60B9BA 00950000 N R1,XPAGNUM ROUND DOWN TO A PAGE @V60B9BA 00951000 SLR R1,R4 GET BYTE COUNT @V60B9BA 00952000 LR R0,R4 TARGET ADDRESS @V60B9BA 00953000 LR R5,R1 SOURCE LENGTH @V60B9BA 00954000 LR R4,R2 SOURCE ADDRESS @V60B9BA 00955000 LR R2,R1 SAVE MOVE LENGTH @V60B9BA 00956000 MVCL R0,R4 DO THE MOVE FOR SECTION 2 @V60B9BA 00957000 C R2,SAVEWRK8 HAVE WE FINISHED ? @V60B9BA 00958000 BNL MEMEXIT RETURN IF SO @V60B9BA 00959000 SPACE 00960000 * SET UP TO MOVE THE THIRD SECTION 00961000 SPACE 00962000 S R2,SAVEWRK8 GET NEGATIVE OF BYTES LEFT @V60B9BA 00963000 LCR R2,R2 MAKE IT POSITIVE @V60B9BA 00964000 ST R2,SAVEWRK8 SAVE IT FOR LATER @V60B9BA 00965000 LR R1,R4 GET NEXT ADDRESS @VA09470 00966050 AL R1,F4096 CALC MOVE LENGTH @VA09470 00966100 N R1,XPAGNUM ... FOR SECTION 3 @V60B9BA 00967000 SLR R1,R4 THIS IS THE SOURCE LENGTH @V60B9BA 00968000 LR R5,R1 SOURCE LGHTH (ADDR SET UP) @V60B9BA 00969000 L R0,RSPRPAG2 TARGET FOR SECTION 3 @V60B9BA 00970000 LR R2,R1 SAVE THE MOVE LENGTH @V60B9BA 00971000 MVCL R0,R4 MOVE DATA FOR SECTION 3 @V60B9BA 00972000 C R2,SAVEWRK8 FINISHED ? @V60B9BA 00973000 BNL MEMEXIT XFER IF SO @V60B9BA 00974000 SPACE 00975000 * THIS IS A LONG MEMEBER. MOVE THE LAST SECTION 00976000 SPACE 00977000 S R2,SAVEWRK8 FINAL BYTE COUNT TO @V60B9BA 00978000 LCR R2,R2 .. MOVE IS NOW CALCULATED @V60B9BA 00979000 ST R2,SAVEWRK8 .. AND SAVED @V60B9BA 00980000 LR R4,R0 NEW TARGET ADDRESS @V60B9BA 00981000 L R0,SAVEWRK7 CURRENT CCPD @V60B9BA 00982000 AL R0,F256 BUMP TO NEXT PAGE @V60B9BA 00983000 LR R1,R0 TO R1 FOR WORK @V60B9BA 00984000 N R1,=X'0000FF00' ISOLATE PAGE NUMBER @V60B9BA 00985000 CR R1,R6 REACHED MAXIMUM ? @V60B9BA 00986000 BNH MEMLD12 XFER IF NOT @V60B9BA 00987000 AL R0,=X'00010000' BUMP TO NEXT CYLINDER @V60B9BA 00988000 ICM R0,B'0010',F1+3 PAGE 1 @V60B9BA 00989000 MEMLD12 ST R0,SAVEWRK7 SAVE CURRENT CCPD @V60B9BA 00990000 L R1,SAVEWRK3 VIRTUAL ADDR OF SYSTEM PAGE @V60B9BA 00991000 CALL DMKRPAGT,PARM=BRING+SYSTEM BRING IT IN @V60B9BA 00992000 BNZR R3 PAGING ERROR - RETURN @V60B9BA 00993000 L R1,SAVEWRK8 TARGET LENGTH @V60B9BA 00994000 LR R5,R1 SOURCE LENGTH @V60B9BA 00995000 LR R0,R4 TARGET ADDRESS @V60B9BA 00996000 LR R4,R2 SOURCE ADDRESS @V60B9BA 00997000 MVCL R0,R4 MOVE DATA FOR FINAL SECTION @V60B9BA 00998000 MEMEXIT TM *,0 SET ZERO CONDITION CODE @V60B9BA 00999000 BR R3 AND RETURN @V60B9BA 01000000 EJECT 01001000 * CONSTANT DATA AREA 01002000 SPACE 01003000 EOTCCW CCW X'07',*-*,CC+SILI,1 END OF TRANSMISSION @V60B9BA 01004000 LOADSNS CCW X'04',*-*,SILI+SKIP,1 DUMMY SENSE CCW @V60B9BA 01005000 SPACE 01006000 MKFMCCW CCW X'8B',*-*,CC+SILI,1 SKIP TO CHANNEL 1 @V60B9BA 01007000 CCW X'17',*-*,CC+SILI,1 MARK FORM CCW @V60B9BA 01008000 CCW X'8B',*-*,CC+SILI,1 SKIP TO CHANNEL 1 @V60B9BA 01009000 CCW X'04',*-*,SILI+SKIP,1 DUMMY SENSE @V60B9BA 01010000 SPACE 01011000 CLRCCW CCW X'87',*-*,CC+SILI,1 CLEAR PRINTER CCW @V60B9BA 01012000 LDWCGCCW CCW X'53',CATFINAL-CATSECT,CC+SILI,4 LOAD WCGM CCW @V60B9BA 01013000 SELTTCCW CCW X'47',*-*,CC+SILI,1 SELECT TRANS TABLE 0 @V60B9BA 01014000 LTTCCW CCW X'83',CATTABLE-CATSECT,CC+SILI,256 LOAD TR TAB @V60B9BA 01015000 LGMCCW CCW X'25',*-*,CC+SILI+IDA,0 LOAD GRAPHIC MOD @V60B9BA 01016000 LCMCCW CCW X'35',*-*,CC+SILI+IDA,0 LOAD COPY MOD @V60B9BA 01017000 LDFCBCCW CCW X'63',8,CC+SILI,0 LOAD FCB CCS @V60B9BA 01018000 LDCPYCCW CCW X'23',*-*,CC+SILI,1 LOAD COPY NUMBER @V60B9BA 01019000 LFOSCCCW CCW X'43',*-*,CC+SILI,0 LOAD FOSC CCW @V60B9BA 01020000 BLKDATCK CCW X'73',*-*,CC+SILI,1 BLOCK DATA CHECK @VA09294 01020100 SPACE 01021000 NULLMOD DC X'404040400000000700010001010140' NULL COPY MOD @V60B9BA 01022000 SPACE 2 01023000 * INCHES FORMS TYPE 01024000 LINESIZE DC AL1(6) 3 ISO @V60B9BA 01025000 DC AL1(7) 3 & HALF COMMON USE (USA, CANADA) @V60B9BA 01026000 DC AL1(8) 4 ISO @V60B9BA 01027000 DC AL1(11) 5 & HALF COMMON USE (USA, CANADA) @V60B9BA 01028000 DC AL1(12) 6 ISO @V60B9BA 01029000 DC AL1(14) 7 COMMON USE (USA, CANADA) @V60B9BA 01030000 DC AL1(16) 8 ISO @V60B9BA 01031000 DC AL1(17) 8 & HALF COMMON USE (USA, CANADA) @V60B9BA 01032000 DC AL1(20) 10 ISO @V60B9BA 01033000 DC AL1(22) 11 COMMON USE (USA, CANADA) @V60B9BA 01034000 DC AL1(24) 12 ISO @V60B9BA 01035000 SPACE 4 01036000 HLDAREA DSECT 01037000 HLDCHARS DS CL4 CHAR ARR TBL TO LOAD @V60B9BA 01038000 HLDGCM1 DS CL4 GRAPHIC MOD 1 @V60B9BA 01039000 HLDGCM2 DS CL4 GRAPHIC MOD 2 @V60B9BA 01040000 HLDGCM3 DS CL4 GRAPHIC MOD 3 @V60B9BA 01041000 HLDGCM4 DS CL4 GRAPHIC MOD 4 @V60B9BA 01042000 HLDMDFY DS CL4 COPY MODIFICATION @V60B9BA 01043000 HLDFCB DS CL4 FCB NAME @V60B9BA 01044000 HLDSTCPY DS 1X STARTING COPY NUMBER @V60B9BA 01045000 HLDFLSHC DS 1X FLASH COUNT @V60B9BA 01046000 HLDCPY DS 1X NUMBER OF COPIES TO PRINT @V60B9BA 01047000 HLDFLAG DS 1X COPY OF SPFLAG1 @V60B9BA 01048000 HLDCCW1 DS 1D 3800 SETUP CCW NUMBER 1 @V60B9BA 01049000 HLDCCW2 DS 1D 3800 SETUP CCW NUMBER 2 @V60B9BA 01050000 HLDCCW3 DS 1D 3800 SETUP CCW NUMBER 3 @V60B9BA 01051000 HLDCCW4 DS 1D 3800 SETUP CCW NUMBER 4 @V60B9BA 01052000 HLDCCW5 DS 1D 3800 SETUP CCW NUMBER 5 @V60B9BA 01053000 HLDCCW6 DS 1D 3800 SETUP CCW NUMBER 6 @V60B9BA 01054000 HLDCCW7 DS 1D 3800 SETUP CCW NUMBER 7 @V60B9BA 01055000 HLDCCW8 DS 1D 3800 SETUP CCW NUMBER 8 @V60B9BA 01056000 HLDSIZE EQU (*-HLDAREA)/8 SIZE IN DOUBLEWORDS @V60B9BA 01057000 SPACE 4 01058000 PDEBLOK DSECT , IMAGELIB DIRECTORY ENTRY @V60B9BA 01059000 PDENAME DS CL8 MEMBER NAME @V60B9BA 01060000 PDEDISP DS 1F RBA OF START OF MEMBER @V60B9BA 01061000 PDELGTH DS 1F LENGTH OF MEMBER IN BYTES @V60B9BA 01062000 ORG PDENAME FIRST DUMMY ENTRY @V60B9BA 01063000 PDEIMAG DS CL8 NAMED SYSTEM NAME @V60B9BA 01064000 PDEDIRLN DS 1F LENGTH OF DIRECTORY IN BYTES@V60B9BA 01065000 PDENUM DS 1F NUMBER OF MEMBERS @V60B9BA 01066000 PDESIZE EQU *-PDEBLOK SIZE OF ENTRY IN BYTES @V60B9BA 01067000 SPACE 3 01068000 CATSECT DSECT , CHARACTER ARRANGEMENT TABLE @V60B9BA 01069000 CATNAME DS CL4 NAME OF THIS CAT @V60B9BA 01070000 DS XL2 RESERVED @V60B9BA 01071000 CATLEN DS 1H LENGTH IN BYTES OF REMAINDER@V60B9BA 01072000 CATTABLE DS XL256 TRANSLATE TABLE @V60B9BA 01073000 CATWCGM DS 4XL2 WCGM'S AND THEIR POSITIONS @V60B9BA 01074000 CATGRAF DS 4CL4 NAMES OF THE GRAPHIC MODS @V60B9BA 01075000 CATSIZE EQU *-CATSECT LENGTH OF MODULE IN BYTES @V60B9BA 01076000 DS 0D WORK AREA IN BUFFER @V60B9BA 01077000 CATFINAL DS 4X FINAL DATA FOR LOAD WCGM @V60B9BA 01078000 SPACE 3 01079000 COPY VMBLOK @V60B9BA 01080000 COPY SAVE @V60B9BA 01081000 COPY SPOOL @V60B9BA 01082000 COPY RBLOKS @V60B9BA 01083000 COPY IOBLOKS @V60B9BA 01084000 COPY NPRTBL @V60B9BA 01085000 COPY EQU @V60B9BA 01086000 COPY DEVTYPES @V60B9BA 01087000 PSA , @V60B9BA 01088000 END 01089000