CSO TITLE 'DMKCSO (CP) VM/370 - RELEASE 6' 00001000 ISEQ 73,80 VALIDATE SEQUENCING OF INPUT 00002000 *. 00003000 * MODULE NAME - 00004000 * 00005000 * DMKCSO 00006000 * 00007000 * FUNCTION - 00008000 * 00009000 * DMKCSO CONTAINS THE SPOOLING COMMANDS USED TO CONTROL THE REAL 00010000 * SPOOLING UNIT RECORD DEVICES ATTACHED TO THE SYSTEM. THE FUNC- 00011000 * TION OF EACH COMMAND IS DESCRIBED SEPARATELY 00012000 * 00013000 * ATTRIBUTES - 00014000 * 00015000 * REENTRANT, PAGEABLE, CALLED VIA SVC 00016000 * 00017000 * ENTRY POINTS - 00018000 * 00019000 * DMKCSOFL - FLUSH COMMAND 00020000 * DMKCSOSP - SPACE COMMAND 00021000 * DMKCSODR - DRAIN COMMAND 00022000 * DMKCSOST - START COMMAND 00023000 * DMKCSOSD - START DEVICE BY TYPE 00024000 * DMKCSORP - REPEAT COMMAND 00025000 * DMKCSOBS - BACK SPACE COMMAND 00026000 * 00027000 * ENTRY CONDITIONS - 00028000 * 00029000 * GPR9 = ADDRESS OF THE COMMAND LINE BUFFER; MUST BE PRESERVED 00030000 * FOR CALLS TO DMKSCNFD 00031000 * GPR12 = ADDRESS OF ENTRY POINT 00032000 * GPR13 = ADDRESS OF SAVEAREA 00033000 * 00034000 * EXIT CONDITIONS - 00035000 * 00036000 * NORMAL - 00037000 * GPR2 = 0 00038000 * SOME COMMANDS WRITE A VERIFYING MESSAGE TO THE OPERA- 00039000 * TOR; THESE MESSAGES ARE DESCRIBED WITH THE COMMANDS 00040000 * THAT ISSUE THEM 00041000 * 00042000 * ERROR - 00043000 * GPR2 = CONTAINS THE BINARY ERROR MESSAGE NUMBER 00044000 * - EITHER AN OPTION IS ILLEGAL, OR SOME CONDITION 00045000 * EXISTS THAT MAKES IT IMPOSSIBLE TO EXECUTE THE COMMAND 00046000 * A MESSAGE IS PRINTED TO DESCRIBE THE ERROR; THE ERROR 00047000 * MESSAGES THAT MAY OCCUR ARE LISTED WITH EACH COMMAND 00048000 * 00049000 * CALLS TO OTHER ROUTINES - 00050000 * 00051000 * DMKSCNRU - TO LOCATE THE RDEVBLOK FOR A SPOOLING DEVICE 00052000 * DMKSTKIO - TO STACK IOBLOKS USED TO START OUTPUT DEVICES 00053000 * DMKSCNFD - TO SCAN THE COMMAND LINE BUFFER FOR OPTIONS 00054000 * DMKSPLDL - TO DELETE FILES ON DELETE CHAIN (DMKRSPDL) 00055000 * DMKDSPCH - EXIT VIA GOTO TO WAIT FOR INTERRUPT FROM I/O 00056000 * DMKFREE - TO OBTAIN FREE STORAGE FOR MESSAGE BUFFERS AND 00057000 * IOBLOKS 00058000 * DMKFRET - TO RETURN USED BLOKS TO FREE STORAGE 00059000 * DMKQCNWT - TO WRITE ERROR AND VERIFICATION MESSAGES 00060000 * DMKCVTBH - TO CONVERT BINARY UNIT ADDRESSES INTO PRINTABLE HEX 00061000 * CHARACTERS FOR ERROR MESSAGES 00062000 * DMKCVTHB - TO CONVERT HEX OPTIONS TO BINARY ADDRESSES 00063000 * DMKCVTDB - TO CONVERT DECIMAL TO BINARY 00064000 * DMKERMSG - TO WRITE ERROR MESSAGES 00065000 * DMKCKSPL - CHECKPOINT THE REAL DEVICE STATUS 00066000 * DMKPTRAN - BRING IN THE 3800 IMAGELIB TABLE 00067000 * 00068000 * EXTERNAL REFERENCES - 00069000 * 00070000 * DMKRSPEX - USED AS IOBIRA FOR IOBLOKS USED TO START UNIT 00071000 * RECORD OUTPUT UNITS 00072000 * DMKQNTBL - ANCHOR FOR 3800 NAMED SYSTEMS USED AS 00073000 * IMAGE LIBRARIES 00074000 * 00075000 * TABLES / WORKAREAS - 00076000 * 00077000 * 00078000 * REGISTER USAGE - 00079000 * 00080000 * ALL SUBROUTINES IN THE MODULE CONFORM GENERALLY TO THIS USAGE; 00081000 * ANY INDIVIDUAL DIFFERENCES OR EXTENSIONS ARE LISTED WITH THE 00082000 * COMMAND DESCRIPTION 00083000 * 00084000 * GPR0 = OPTION LENGTH - RETURNED FROM DMKSCNFD 00085000 * GPR1 = OPTION ADDRESS - RETURNED FROM DMKSCNFD 00086000 * GPR2 = SCRATCH 00087000 * GPR3 = LENGTH FIELD FOR EXECUTED MVC'S AND TRT'S 00088000 * GPR4 = INTERNAL SUBROUTINE LINKAGE 00089000 * GPR5 = INDICATOR FOR MULTIPURPOSE ROUTINES (START/DRAIN) 00090000 * GPR6 = SCRATCH 00091000 * GPR7 = SCRATCH 00092000 * GPR8 = RDEVBLOK BASE 00093000 * GPR9 = RSPLCTL BASE 00094000 * GPR10 = IOBLOK BASE 00095000 * GPR11 = VMBLOK BASE FOR SYSVMBK 00096000 * GPR12 = DMKCSO BASE 00097000 * GPR13 = SAVEAREA BASE 00098000 * GPR14 = EXTERNAL LINKAGE 00099000 * GPR15 = EXTERNAL LINKAGE 00100000 * 00101000 * NOTES - NONE 00102000 * 00103000 * OPERATION - 00104000 * 00105000 * ALL COMMAND PROCESSORS ARE ENTERED VIA A CALL FROM DMKCFM; THE 00106000 * THE FUNCTION, FORMAT AND OPERATION OF EACH COMMAND ARE DESCRI- 00107000 * BED IN THE FOLLOWING SECTIONS 00108000 *. 00109000 EJECT 00110000 COPY OPTIONS 00111000 COPY LOCAL OPTIONS 00112000 SPACE 3 00113000 DMKCSO CSECT 00114000 SPACE 3 00115000 EXTRN DMKCVTBH,DMKCVTHB,DMKRSPEX 00116000 EXTRN DMKSCNFD,DMKCVTDB,DMKERMSG,DMKSTKIO,DMKSCNRU @V396298 00117000 EXTRN DMKSPLDL 00118000 EXTRN DMKCKSPL @V304298 00119000 EXTRN DMKQCNWT @V4075A0 00120000 EXTRN DMKQNTBL @V60B9BA 00121000 SPACE 3 00122000 USING PSA,R0 00123000 USING VMBLOK,R11 00124000 USING SAVEAREA,R13 00125000 EJECT 00126000 *. 00127000 * SUBROUTINE NAME - 00128000 * 00129000 * DMKCSOFL 00130000 * 00131000 * FUNCTION - 00132000 * 00133000 * TO IMMEDIATELY TERMINATE THE OUTPUT ON THE SPECIFIED REAL 00134000 * SPOOL PRINTER OR PUNCH. IF THE DEVICE HAS BEEN DRAINED, OUTPUT 00135000 * OUTPUT WILL STOP; OTHERWISE, THE NEXT FILE OR THE NEXT COPY OF 00136000 * THE CURRENT FILE WILL BE STARTED. IF HOLD IS SPECIFIED 00137000 * THE FILE WILL BE HELD: OTHERWISE DELETE THE FILE. 00138000 * 00139000 * COMMAND LINE FORMAT - 00140000 * 00141000 * +-------+------------------------+ 00142000 * | FLUSH | RADDR | 00143000 * | F | ALL HO | 00144000 * +-------+------------------------+ 00145000 * 00146000 * OPERATION - 00147000 * 00148000 * 1. BAL TO GETDEVIC TO LOCATE THE RDEVBLOK FOR THE OUTPUT DEV 00149000 * 2. IF DEVICE NOT PRT OR PCH: EXIT GIVING MSG021E. 00150000 * IF DEVICE DEDICATED: EXIT GIVING MSG140E. 00151000 * IF DEVICE IF OFFLINE: EXIT GIVING MSG046E. 00152000 * IF DEVICE NO ACTIVE: EXIT GIVING MSG141E. 00153000 * 3. SET THE RDEVTERM BIT IN RDEVFLAG 00154000 * 4. CALL DMKSCNFD TO LOCATE NEXT OPTION: 00155000 * IF 'ALL', LOCATE SFBLOK AND SET SFBCOPY TO 1 00156000 * AND GO TO STEP4. 00157000 * IF 'HOLD': SET SFBSHOLD FLAG AND GO TO STEP4. 00158000 * IF NONE: EXIT. 00159000 * 00160000 * RESPONSE - 00161000 * 00162000 * PRT RAD FLUSHED USERID FILE RECDS COPY STAT 00163000 * PUN 00164000 * 00165000 * PRT RAD FILE HELD USERID FILE RECDS COPY STAT 00166000 * PUN 00167000 * 00168000 * ERROR MESSAGES - 00169000 * 00170000 * DMKCSO003E INVALID OPTION - (OPTION) 00171000 * DMKCSO006E INVALID DEVICE TYPE - (ADDR) 00172000 * DMKCSO013E CONFLICTING OPTION - (OPTION) 00173000 * DMKCSO021E RADDR MISSING OR INVALID 00174000 * DMKCSO040E DEV (ADDR) DOES NOT EXIST 00175000 * DMKCSO046E (TYPE) (RADDR) OFFLINE 00176000 * DMKCSO140E (TYPE) (RADDR) ATTACHED TO (USERID) 00177000 * DMKCSO141E (TYPE) (RADDR) NOT ACTIVE 00178000 *. 00179000 EJECT 00180000 ID DC CL8'DMKCSO' MODULE NAME 00181000 SPACE 2 00182000 DMKCSOFL RELOC 00183000 BAL R4,CLEAR CLEAR SAVEWRK1,2-9 00184000 BAL R4,GETDEVIC GO LOCATE DEVICE BLOK 00185000 USING RDEVBLOK,R8 R8 POINTS TO RDEVBLOK 00186000 SPACE 2 00187000 FLSCAN EQU * 00188000 CALL DMKSCNFD IS NEXT OPTION ALL ?? 00189000 BNZ FLCONT NO - NONE PRESENT 00190000 LR R14,R0 COUNT 00191000 BCTR R14,0 -1 00192000 C R0,F2 COUNT OF 2 00193000 BL MSG003E INVALID OPTION 00194000 BE TESTHLD MIN FOR HOLD 00195000 EX R14,CLCALL ALL ?? 00196000 BNE TESTREQ NO - 00197000 TM SAVEWRK1,X'40' COPY OPTION PRESENT ?? 00198000 BO MSG013E CONFLICTING OPTION 00199000 OI SAVEWRK1,X'40' SET COPIES TO ONE 00200000 B FLSCAN CHECK FOR MORE OPTIONS 00201000 SPACE 00202000 TESTREQ DS 0H @V200930 00203000 SPACE 00204000 TESTHLD EX R14,CLCHOLD HOLD ?? 00205000 BNE MSG003E INVALID OPTION 00206000 TM SAVEWRK1,X'80' HOLD FLAG SET ?? 00207000 BO MSG013E YES -- CONFLICTING OPTION 00208000 OI SAVEWRK1,X'80' YES - FILE TO BE HELD 00209000 B FLSCAN 00210000 SPACE 00211000 USING SFBLOK,R7 00212000 USING RSPLCTL,R9 00213000 FLCONT ICM R9,B'1111',RDEVSPL IS THERE A ACTIVE FILE ?? @VA00716 00214000 BZ MSG141E NO ACTIVE FILE 00215000 SWITCH MAKE SURE WE ARE ON THE IO PROCESSOR @V4075A0 00216000 TM RDEVFLAG,RDEVACNT PUNCHING ACCOUNTING CARDS ?? 00217000 BO MSG141E YES -- GIVE INACTIVE MSG 00218000 OI RDEVFLAG,RDEVTERM SET TERMINATE FLAG 00219000 SPACE 00220000 LR R7,R9 SET SFBLOK ADDRESS IF 00221000 CLI 0(R9),X'FF' THIS IS THE SFBLOK ADDRESS 00222000 BE *+8 YES -- PLACE HERE BY WARM START 00223000 L R7,RSPSFBLK SPOOL FILE BLOCK PRESENT ?? 00224000 LTR R7,R7 ?? 00225000 BZ CSOEXIT NO - LEAVE 00226000 FLHOLD TM SAVEWRK1,X'80' HOLD OPTION SET ?? 00227000 BZ *+8 NO - 00228000 OI SFBFLAG,SFBSHOLD SET SFBLOK SYSTEM HOLD 00229000 FLCOPY TM SAVEWRK1,X'40' SET COPIES TO ONE ?? 00230000 BZ *+10 NO - LEAVE COPIES AS IS @VA00716 00231000 MVC SFBCOPY(2),F1+2 SET COPY TO ONE @VA00716 00232000 OI SFBFLAG,SFBRECER INDICATE RECORD ALLOCATION IN ERROR 00233000 B CSOEXIT AND EXIT 00234000 SPACE 00235000 EJECT 00236000 *. 00237000 * SUBROUTINE NAME - 00238000 * 00239000 * DMKCSOSP 00240000 * 00241000 * FUNCTION - 00242000 * 00243000 * TO FORCE THE SPECIFIED REAL SPOOL PRINTER TO SINGLE-SPACED 00244000 * OUTPUT FOR THE REMAINDER OF THE CURRENT SPOOL FILE. A START 00245000 * COMMAND TO RADDR WILL RESET THE SPACE FLAG. 00246000 * 00247000 * COMMAND LINE FORMAT - 00248000 * 00249000 * +-------+-------+ 00250000 * | SPACE | RADDR | 00251000 * | SPA | | 00252000 * +-------+-------+ 00253000 * 00254000 * OPERATION - 00255000 * 00256000 * 1. BAL TO GETDEVIC TO LOCATE RDEVBLOK FOR PRINTER 00257000 * 2. IF DEVICE NOT PRINTER, EXIT GIVING MSG021E. 00258000 * IF DEVICE DEDICATED: EXIT GIVING MSG140E. 00259000 * IF DEVICE OFFLINE: EXIT GIVING MSG046E. 00260000 * IF DEVICE NOT ACTIVE: EXIT GIVING MSG141E. 00261000 * 3. SET THE RDEVSPAC BIT IN RDEVFLAG 00262000 * 4. EXIT 00263000 * 00264000 * RESPONSE - 00265000 * 00266000 * NONE 00267000 * 00268000 * 00269000 * ERROR MESSAGES - 00270000 * 00271000 * DMKCSO006E INVALID DEVICE TYPE - (ADDR) 00272000 * DMKCSO021E RADDR MISSING OR INVALID 00273000 * DMKCSO040E DEV (ADDR) DOES NOT EXIST 00274000 * DMKCSO046E (TYPE) (RADDR) OFFLINE 00275000 * DMKCSO140E (TYPE) (RADDR) ATTACHED TO (USERID) 00276000 * DMKCSO141E (TYPE) (RADDR) NOT ACTIVE 00277000 *. 00278000 EJECT 00279000 DMKCSOSP RELOC 00280000 BAL R4,CLEAR CLEAR SAVEWRK1,2-9 00281000 BAL R4,GETDEVIC GO LOCATE RDEVBLOK 00282000 USING RDEVBLOK,R8 R8 POINTS TO RDEVBLOK 00283000 TM RDEVTYPE,TYPPRT IS IT A PRINTER ?? 00284000 BZ MSG006E NO -- INVALID ADDRESS 00285000 SPACE 00286000 ICM R2,B'1111',RDEVSPL GET ACTIVE FILE POINTER @VA00716 00287000 BZ MSG141E NO ACTIVE FILE - BRANCH @VA00716 00288000 SPACE 00289000 SWITCH MAKE SURE WE ARE ON THE IO PROCESSOR @V4075A0 00290000 OI RDEVFLAG,RDEVSPAC SET SPACE REQUEST 00291000 B CSOEXIT AND LEAVE 00292000 EJECT 00293000 *. 00294000 * SUBROUTINE NAME - 00295000 * 00296000 * DMKCSODR 00297000 * 00298000 * FUNCTION - 00299000 * 00300000 * TO HALT THE OPERATION OF THE SPECIFIED DEVICE(S) AFTER THEY 00301000 * HAVE COMPLETED PROCESSING THE CURRENTLY ACTIVE FILE 00302000 * 00303000 * COMMAND LINE FORMAT - 00304000 * 00305000 * +-------+----------+ 00306000 * | DRAIN | READER | 00307000 * | DR | PRINTER | 00308000 * | | PUNCH | 00309000 * | | ALL | 00310000 * | | --- | 00311000 * | | RADDR ...| 00312000 * +-------+----------+ 00313000 * 00314000 * READER PRINTER PUNCH ALL 00315000 * R RDR P PRT PU PCH ALL 00316000 * 00317000 * 00318000 * OPERATION - 00319000 * 00320000 * 1. SET RDEVDRAN FLAG IN GPR5 00321000 * 2. SET 'DRAINED' IN MESSAGE AREA OF SAVEAREA 00322000 * 3. JOIN COMMON START/DRAIN CODE AT STEP 3 FOR DMKCSOST 00323000 * 00324000 * RESPONSE - 00325000 * 00326000 * PRT XXX DRAINED SYSTEM CLASS = ABCD NOSEP 00327000 * PUN SEP 00328000 * RDR XXX DRAINED SYSTEM 00329000 * 00330000 * MESSAGE ISSUED BY THIS MODULE IF DEVICE IS 00331000 * NOT ACTIVE. IF DEVICE IS ACTIVE, MODULE 00332000 * DMKRSP WILL ISSUE THE MESSAGE WHEN CURRENT 00333000 * FILE IS FINISHED. 00334000 * 00335000 * ERROR MESSAGES - 00336000 * 00337000 * DMKCSO003E INVALID OPTION _ (OPTION) 00338000 * DMKCSO006E INVALID DEVICE TYPE - (ADDR) 00339000 * DMKCSO021E RADDR MISSING OR INVALID 00340000 * DMKCSO040E DEV (ADDR) DOES NOT EXIST 00341000 * DMKCSO046E (TYPE) (RADDR) OFFLINE 00342000 * DMKCSO140E (TYPE) (RADDR) ATTACHED TO (USERID) 00343000 *. 00344000 EJECT 00345000 DMKCSODR RELOC 00346000 BAL R4,CLEAR CLEAR SAVEWRK1,2-9 00347000 LA R5,RDEVDRAN SET DRAIN OPTION 00348000 LA R0,HLDSIZE GET STORAGE FOR THE WRKAREA @V60B9BA 00349000 CALL DMKFREE GO GET IT @V60B9BA 00350000 ST R1,SAVEWRK3 SAVE THE POINTER TO IT @V60B9BA 00351000 XC 0(HLDSIZE*8,R1),0(R1) CLEAR THE AREA @V60B9BA 00352000 B STARTX AND JOIN COMMON DRAIN/START CODE 00353000 EJECT 00354000 *. 00355000 * SUBROUTINE NAME - 00356000 * 00357000 * DMKCSOST 00358000 * 00359000 * FUNCTION - 00360000 * 00361000 * TO RESTART A SPOOLING DEVICE AFTER IT HAS BEEN DRAINED, 00362000 * AND/OR TO CHANGE THE OUTPUT CLASSES THAT IT MAY SERVICE. IF 00363000 * THE NOSEP OPTION IS SPECIFIED, NO OUTPUT SEPARATOR WILL BE 00364000 * PRINTED OR PUNCHED BETWEEN JOBS. 00365000 * 00366000 * COMMAND LINE FORMAT - 00367000 * 00368000 * +-------+-------------------------------+ 00369000 * | START | READER | 00370000 * | STA | PRINTER | 00371000 * | | PUNCH | 00372000 * | | ALL | 00373000 * | | --- | 00374000 * | | RADDR ... | 00375000 * | | ... ... | 00376000 * | | ... ... | 00377000 * | | ... ... | 00378000 * | | ... | 00379000 * +-------+-------------------------------+ 00380000 * 00381000 * READER PRINTER PUNCH ALL CLASS NOSEP 00382000 * R RDR P PRT PU PCH ALL CL NOS 00383000 * 00384000 * FLASH CHARS PURGE FCB IMAGE 00385000 * FL CH PU FCB IM 00386000 * 00387000 * CLASS (ABCD) ABCD 1 TO 4 CLASSES (A-Z OR 0-9) 00388000 * 00389000 * FLASH (FFFF) 1 TO 4 CHARACTERS (FLASH OVERLAY NAME) 00390000 * 00391000 * CHARS (CCCC) 1 TO 4 CHARACTERS (CHAR ARR TBL FOR SEP) 00392000 * 00393000 * FCB 6, 8, OR 12 LINES/INCH (SEP PAGE) 00394000 * 00395000 * IMAGE 1 TO 8 CHARACTERS (IMAGE LIBRARY NAME) 00396000 * 00397000 * PURGE PURGE FILES HAVING INVALID MODULE NAMES 00398000 * FOR A 3800 00399000 * 00400000 * 00401000 * OPERATION - 00402000 * 00403000 * 1. ENTRY DMKCSOSD- SAVE DEVICE TYPE IN SAVEWRK1+1 AND 00404000 * INDICATE THAT ERROR, DRAIN OR START MESSAGES ARE NOT 00405000 * TO BE PRINTED. CLEAR DRAIN FLAG FROM GPR5. 00406000 * 2. IF TYPE = X'FF' OR X'FE', GO TO STEP 11A. 00407000 * IF TYPE = PUNCH AND PRINTER: GO TO STEP 13. 00408000 * IF TYPE = PUNCH: GO TO STEP 15. 00409000 * OTHERWISE GO TO STEP 14. 00410000 * 3. ENTRY DMKCSOST- CLEAR DRAIN FLAG FROM GPR5. 00411000 * 4. STARTX- CALL DMKFREE TO OBTAIN WORK AREA. 00412000 * CALL DMKSCNFD TO LOCATE DEVICE OPTION 00413000 * IF 'ALL' OR NONE: GO TO STEP 12. 00414000 * IF 'RDR': GO TO STEP 16. 00415000 * IF 'PCH': GO TO STEP 15. 00416000 * IF 'PRT': GO TO STEP 14. 00417000 * 5. BAL TO GETDVIC2 TO LOCATE RDEVBLOK. SAVE THE REAL 00418000 * DEVICE ADDRESS IN SAVEWRK4. 00419000 * IF NONE: EXIT. 00420000 * 6. CALL DMKSCNFD TO LOCATE NEXT OPTION - 00421000 * IF 'CLASS' CALL DMKSCNFD TO LOCATE CLASS, 00422000 * IF NONE OR CLASS INVALID: EXIT 00423000 * GIVING MSG028E. OTHERWISE SAVE CLASS 00424000 * IN SAVEWRK2 AND GO TO STEP 6. 00425000 * IF 'NOSEP': INDICATE BY FLAG IN SAVEWRK1 AND GO TO STEP 6. 00426000 * IF 'FLASH': FIND FLASH NAME AND IF INVALID EXIT W/ERROR. 00427000 * ELSE SAVE NAME IN HLDFLASH AND GO TO STEP 6. 00428000 * IF 'CHARS': FIND CHARS NAME AND IF INVALID EXIT W/ERROR. 00429000 * ELSE SAVE NAME IN HLDCHARS AND GO TO STEP 6. 00430000 * IF 'FCB': FIND IF 6, 8, OR 12. IF NOT EXIT W/ERROR. 00431000 * ELSE SAVE VALUE IN HLDFCB AND GO TO STEP 6. 00432000 * IF 'IMAGE': FIND IMAGE NAME AND IF INVALID EXIT W/ERROR. 00433000 * ELSE SAVE VALUE IN HLDIMAGE AND GOTO STEP 6. 00434000 * IF 'PURGE': SET THE HLDPURGE FLAG AND GOTO STEP 5. 00435000 * OTHERWISE RESET SCAN POINTERS TO PREVIOUS OPTION. 00436000 * 7. IF DEVICE IS INVALID TYPE: EXIT GIVING MSG021E. 00437000 * IF DEVICE IS DEDICATED: EXIT GIVING MSG140E. 00438000 * IF DEVICE IS OFFLINE: EXIT GIVING MSG046E. 00439000 * 8. IF NEW CLASS IS PRESENT: MOVE CLASSES TO RDEVCLAS. 00440000 * SET RDEVSEP - TURN ON SEPARATOR FLAG. 00441000 * IF NOSEP: RESET RDEVSEP- TURN OFF SEPARATOR FLAG. 00442000 * IF FLASH, CHARS, FCB, IMAGE, OR PURGE ARE PRESENT, 00443000 * STORE THEIR VALUES IN THE IN THE PROPER LOCATIONS 00444000 * IN THE RDEVBLOK. 00445000 * 9. IF START COMMAND GIVE STARTED MESSAGES FOR ALL DEVICES. 00446000 * IF DRAIN COMMAND AND DEVICE NOT BUSY GIVE DRAINED MSG. 00447000 * 10. IF DEVICE IS NOT BUSY: BUILD IOBLOK WITH A 00448000 * DUMMY DEVICE END INTERRUPT AND STACK IT VIA A CALL 00449000 * TO DMKSTKIO. 00450000 * 11. IF TYPE = RADDR: GO TO STEP 5. OTHERWISE GO TO STEP4. 00451000 * 11A. DODEL - CALL DMKSPLDL TO DELETE FILES ON DELETE CHAIN 00452000 * 12. DOALL- SET GPR6 TO READER DEVICE CHAIN. 00453000 * BAL TO SCANDEV. 00454000 * 13. STPUPR- SET GPR6 TO PUNCH DEVICE CHAIN. 00455000 * BAL TO SCANDEV. 00456000 * 14. STPRT- SET GPR6 TO PRINTER DEVICE CHAIN. 00457000 * BAL TO SCANDEV AND ON RETURN EXIT. 00458000 * 15. STPCH- SET GPR6 TO PUNCH DEVICE CHAIN. 00459000 * BAL TO SCANDEV AND ON RETURN EXIT. 00460000 * 16. STRDR- SET GPR6 TO READER DEVICE CHAIN 00461000 * BAL TO SCANDEV AND ON RETURN EXIT. 00462000 * 17. SCANDEV- LOCATE EACH RDEVBLOK ON THE 00463000 * DEVICE CHAIN GIVEN IN GPR6 AND 00464000 * GO TO STEP 10. 00465000 * 18. DONEXT- IF TYPE IS REAL ADDRESS: GO TO STEP 4. 00466000 * IF NOT LAST DEVICE ON DEVICE CHAIN: GO TO 00467000 * STEP 17. OTHERWISE RETURN TO CALLER. 00468000 * 00469000 * RESPONSE - 00470000 * 00471000 * PRT XXX STARTED SYSTEM CLASS = ABCD NOSEP 00472000 * PUN SEP 00473000 * RDR XXX STARTED SYSTEM 00474000 * 00475000 * ERROR MESSAGES - 00476000 * 00477000 * DMKCSO003E INVALID OPTION - (OPTION) 00478000 * DMKCSO006E INVALID DEVICE TYPE - (ADDR) 00479000 * DMKCSO013E CONFLICTING OPTION - (OPTION) 00480000 * DMKCSO021E RADDR MISSING OR INVALID 00481000 * DMKCSO028E CLASS MISSING OR INVALID 00482000 * DMKCSO040E DEV (ADDR) DOES NOT EXIST 00483000 * DMKCSO046E (TYPE) (RADDR) OFFLINE 00484000 * DMKCSO140E (TYPE) (RADDR) ATTACHED TO (USERID) 00485000 *. 00486000 EJECT 00487000 DMKCSOSD RELOC 00488000 USING BUFFER,R9 00489000 USING RDEVBLOK,R8 00490000 BAL R4,CLEAR CLEAR SAVE WORK AREA 00491000 STC R5,SAVEWRK1+1 SAVE DEVICE TYPE 00492000 SR R5,R5 INDICATE START 00493000 OI SAVEWRK1,X'01' INDICATE NO MESSAGES TO BE PRINTED 00494000 LA R0,HLDSIZE GET STORAGE FOR THE WRKAREA @V60B9BA 00495000 CALL DMKFREE GO GET IT @V60B9BA 00496000 ST R1,SAVEWRK3 SAVE THE POINTER TO IT @V60B9BA 00497000 XC 0(HLDSIZE*8,R1),0(R1) CLEAR THE AREA @V60B9BA 00498000 SWITCH MAKE SURE WE ARE ON THE IO PROCESSOR @V4075A0 00499000 CLI SAVEWRK1+1,X'FE' SET BY DMKCPI TO START ALL 00500000 * X'FF' START ALL DEVICES 00501000 * X'FE' START ALL DEVICES EXCEPT DRAINED DEVICES 00502000 BNL DODEL YES -- 00503000 TM SAVEWRK1+1,TYPPUN+TYPPRT PUNCH AND PRINTER 00504000 BO STPUPR YES - START BOTH 00505000 TM SAVEWRK1+1,TYPPUN PUNCH ?? 00506000 BO STPCH 00507000 B STPRT 00508000 SPACE 00509000 SPACE 00510000 DMKCSOST RELOC 00511000 BAL R4,CLEAR CLEAR SAVEWRK1,2-9 00512000 SR R5,R5 CLEAR DRAIN CODE REGISTER 00513000 LA R0,HLDSIZE GET STORAGE FOR THE WRKAREA @V60B9BA 00514000 CALL DMKFREE GO GET IT @V60B9BA 00515000 ST R1,SAVEWRK3 SAVE THE POINTER TO IT @V60B9BA 00516000 STARTX EQU * DRAIN JOINS HERE -- 00517000 L R1,SAVEWRK3 RESTORE WORKAREA POINTER @V60B9BA 00518000 XC 0(HLDSIZE*8,R1),0(R1) CLEAR THE AREA @V60B9BA 00519000 SWITCH MAKE SURE WE ARE ON THE IO PROCESSOR @V4075A0 00520000 CALL DMKSCNFD PICK UP FIRST OPTION 00521000 BNZ DOALL DEFAULT ALL 00522000 LR R14,R0 COUNT 00523000 BCTR R14,0 -1 00524000 C R0,F3 LENGTH OF 3 ?? 00525000 BNE CNT1 NO - 00526000 SPACE 00527000 CLC =C'RDR',0(R1) RDR ?? 00528000 BE STRDR YES - 00529000 CLC =C'PRT',0(R1) PRT ?? 00530000 BE STPRT YES - 00531000 CLC =C'PCH',0(R1) PCH ?? 00532000 BE STPCH YES - 00533000 CLC =C'ALL',0(R1) ALL ?? 00534000 BE DOALL YES - 00535000 SPACE 00536000 CNT1 EX R14,CLCREAD READER ?? 00537000 BE STRDR YES - 00538000 EX R14,CLCPRINT PRINTER ?? 00539000 BE STPRT YES - 00540000 C R0,F2 COUNT OF 2 00541000 BL RADDR NO - COULD BE RADDR 00542000 EX R14,CLCPUN PUNCH ?? 00543000 BE STPCH YES - 00544000 SPACE 00545000 RADDR MVI SAVEWRK1+2,X'02' CLEAR WORK BYTE 00546000 SPACE 00547000 BAL R4,GETDVIC2 LOCATE RDEVBLOK 00548000 ST R1,SAVEWRK4 SAVE REAL DEVICE ADDRESS 00549000 STSCAN MVC SAVEWRK8(8),BUFNXT SAVE COMMAND LINE INFO 00550000 SPACE 00551000 CALL DMKSCNFD LOCATE NEXT OPTION 00552000 BNZ PROCESS NONE PROCESS 00553000 LR R14,R0 COUNT 00554000 BCTR R14,0 -1 00555000 TM RDEVTYPC,CLASURI READER TYPE DEVICE ?? 00556000 BO CKRADD YES - FURTHER OPTS INVALID @V60B9BA 00557000 L R3,SAVEWRK3 WE NEED THE WORK AREA @V60B9BA 00558000 USING HLDAREA,R3 ADDRESSIBILITY @V60B9BA 00559000 C R0,F2 MIN COUNT FOR CLASS 00560000 BL CKRADD NO -- CHECK FOR VALID RADDR 00561000 BE TSTFLASH YES - TEST FLASH @V60B9BA 00562000 SPACE 00563000 TSTFCB CLI RDEVTYPE,TYP3800 IS THIS A 3800 ? @V60B9BA 00564000 BNE TSTNOSEP FCB ONLY VALID FOR 3800 @V60B9BA 00565000 EX R14,CLCFCB FCB OPTION ? @V60B9BA 00566000 BNE TSTNOSEP XFER IF NOT @V60B9BA 00567000 CLI HLDFCB,X'00' FCB ALREADY SET ? @V60B9BA 00568000 BNE MSG013E YES - CONFLICTING OPTIONS @V60B9BA 00569000 CALL DMKSCNFD GET THE FCB VALUE @V60B9BA 00570000 BNZ MSG246E ERROR - MISSING @V60B9BA 00571000 CALL DMKCVTDB DECIMAL TO BINARY @V60B9BA 00572000 BNZ MSG246E XFER IF INVALID @V60B9BA 00573000 STC R1,HLDFCB SAVE IT FOR NOW @V60B9BA 00574000 C R1,F6 IS IT A 6 ? @V60B9BA 00575000 BE STSCAN YES - GET NEXT OPTION @V60B9BA 00576000 C R1,F8 IS IT AN 8 ? @V60B9BA 00577000 BE STSCAN YES - GET NEXT OPTION @V60B9BA 00578000 C R1,=F'12' IS IT A 12 ? @V60B9BA 00579000 BE STSCAN YES - GET NEXT OPTION @V60B9BA 00580000 B MSG246E INVALID FCB VALUE @V60B9BA 00581000 SPACE 00582000 TSTNOSEP EX R14,CLCNOS NOSEP ?? @V60B9BA 00583000 BNE TSTFLASH NO - @V60B9BA 00584000 TM SAVEWRK1+2,X'80' NOSEP FLAG SET ?? 00585000 BO MSG013E YES - CONFLICTING OPTION 00586000 OI SAVEWRK1+2,X'80' INDICATE NOSEP 00587000 B STSCAN GET NEXT OPTION 00588000 SPACE 00589000 TSTFLASH CLI RDEVTYPE,TYP3800 IS THIS A 3800 ? @V60B9BA 00590000 BNE TSTCLASS SKIP ESOTERIC STUFF IF NOT @V60B9BA 00591000 EX R14,CLCFLASH TEST FOR FLASH @V60B9BA 00592000 BNE TSTCHARS XFER IF NOT FLASH @V60B9BA 00593000 CLI HLDFLASH,X'00' FLASH SET ? @V60B9BA 00594000 BNE MSG013E YES - CONFLICTING OPTION @V60B9BA 00595000 MVC HLDFLASH,BLANKS INITIALIZE @V60B9BA 00596000 CALL DMKSCNFD GET THE FLASH NAME @V60B9BA 00597000 BNZ MSG243E MISSING FLASH NAME @V60B9BA 00598000 C R0,F4 MOVE THAN 4 CHARS ? @V60B9BA 00599000 BH MSG243E ERROR IF SO @V60B9BA 00600000 LR R2,R0 THE EXECUTE TARGET @V60B9BA 00601000 BCTR R2,0 DECREMENT FOR MVC @V60B9BA 00602000 EX R2,MVCFLASH MOVE IT INTO WORK AREA @V60B9BA 00603000 B STSCAN GET NEXT OPTION @V60B9BA 00604000 SPACE 00605000 TSTCHARS EX R14,CLCCHARS TEST FOR CHARS @V60B9BA 00606000 BNE TSTIMAGE XFER IF NOT CHARS @V60B9BA 00607000 CLI HLDCHARS,X'00' CHARS SET ? @V60B9BA 00608000 BNE MSG013E YES - CONFLICTING OPTION @V60B9BA 00609000 MVC HLDCHARS,BLANKS INITIALIZE @V60B9BA 00610000 CALL DMKSCNFD GET THE CHARS NAME @V60B9BA 00611000 BNZ MSG245E MISSING CHARS NAME @V60B9BA 00612000 C R0,F4 MOVE THAN 4 CHARS ? @V60B9BA 00613000 BH MSG245E ERROR IF SO @V60B9BA 00614000 LR R2,R0 THE EXECUTE TARGET @V60B9BA 00615000 BCTR R2,0 DECREMENT FOR MVC @V60B9BA 00616000 EX R2,MVCCHARS MOVE IT INTO WORK AREA @V60B9BA 00617000 B STSCAN GET NEXT OPTION @V60B9BA 00618000 SPACE 00619000 TSTIMAGE EX R14,CLCIMAGE TEST FOR IMAGE @V60B9BA 00620000 BNE TSTPURGE XFER IF NOT IMAGE @V60B9BA 00621000 CLI HLDIMAGE,X'00' IMAGE SET ? @V60B9BA 00622000 BNE MSG013E YES - CONFLICTING OPTION @V60B9BA 00623000 MVC HLDIMAGE,BLANKS INITIALIZE @V60B9BA 00624000 CALL DMKSCNFD GET THE IMAGE NAME @V60B9BA 00625000 BNZ MSG244E MISSING IMAGE NAME @V60B9BA 00626000 C R0,F8 MOVE THAN 8 CHARS ? @V60B9BA 00627000 BH MSG244E ERROR IF SO @V60B9BA 00628000 LR R2,R0 THE EXECUTE TARGET @V60B9BA 00629000 BCTR R2,0 DECREMENT FOR MVC @V60B9BA 00630000 EX R2,MVCIMAGE MOVE IT INTO WORK AREA @V60B9BA 00631000 B STSCAN GET NEXT OPTION @V60B9BA 00632000 SPACE 00633000 TSTPURGE EX R14,CLCPURGE PURGE OPTION ? @V60B9BA 00634000 BNE TSTCLASS XFER IF NOT @V60B9BA 00635000 TM HLDFLAG1,HLDPURGE SET ALREADY ? @V60B9BA 00636000 BO MSG013E YES - CONFLICTING OPTION @V60B9BA 00637000 OI HLDFLAG1,HLDPURGE SET THE FLAG @V60B9BA 00638000 B STSCAN GET NEXT OPTION @V60B9BA 00639000 DROP R3 NO LONGER NEEDED @V60B9BA 00640000 SPACE 00641000 TSTCLASS EQU * 00642000 EX R14,CLCCLASS CLASS ?? 00643000 BE CLASSOK YES -- 00644000 CKRADD CALL DMKCVTHB IS IT A VALID REAL ADDRESS 00645000 LM R0,R1,BALRSAVE RESTORE LENGTH AND ADDRESS 00646000 BNZ MSG003E NO -- INVALID OPTION 00647000 B RSTSCAN YES -- 00648000 CLASSOK TM SAVEWRK1+2,X'40' CLASS PRESENT ?? 00649000 BO MSG013E YES -- CONFLICTING OPTION 00650000 OI SAVEWRK1+2,X'40' INDICATE CLASSES 00651000 SPACE 00652000 CALL DMKSCNFD GET CLASSES 00653000 BNZ MSG028E CLASSES MISSING 00654000 C R0,F4 MAX OF 4 CLASSES 00655000 BH MSG028E TO MANY CLASSES 00656000 LR R3,R0 COUNT 00657000 MVC SAVEWRK2(4),BLANKS BLANK AREA TO SAVE CLASSES 00658000 LA R4,SAVEWRK2 ADDRESS OF AREA 00659000 SPACE 00660000 CLASSTRT IC R2,0(R1) GET CLASS IN R2 @V200930 00661000 CLI 0(R1),C'*' IS IT CLASS ALL ?? @V200930 00662000 BE SETCLAS YES, SET IT @V200930 00663000 CLI 0(R1),C'A' VALIDATE CLASS @V200930 00664000 BL MSG028E INVALID CLASS 00665000 TRT 0(1,R1),ALPHANUM TEST CLASS 00666000 BH *+8 VALID - 00667000 B MSG028E ALL OTHERS INVALID 00668000 SETCLAS DS 0H @V200930 00669000 STC R2,0(R4) STORE CLASS IN SAVEWRK2 AREA 00670000 LA R1,1(R1) UPDATE 00671000 LA R4,1(R4) ADDRESS 00672000 BCT R3,CLASSTRT AND COUNT DOWN 00673000 B STSCAN GET NEXT OPTION 00674000 SPACE 00675000 RSTSCAN MVC BUFNXT(8),SAVEWRK8 RESTORE BUFFER POINTERS 00676000 PROCESS EQU * HERE TO PROCESS THE CURRENT DEVICE 00677000 SPACE 00678000 BAL R4,TSTSTAT CHECK FOR DEDICATED OR OFFLINE @VA00716 00679000 * CASE OF MORE RADDRESSES 00680000 MVC SAVEWRK1+3(1),RDEVFLAG SAVE ITS ORIG VALUE @V60B9BA 00681000 LTR R5,R5 START COMMAND ? 00682000 BNZ TESTSTAT NO -- DRAIN COMMAND 00683000 CLI SAVEWRK2,C' ' NEW CLASS PRESENT ?? 00684000 BNH *+10 NO -- LEAVE ALONE 00685000 MVC RDEVCLAS(4),SAVEWRK2 MOVE IN NEW CLASSES 00686000 OI RDEVFLAG,RDEVSEP TURN ON SEPERATOR FLAG 00687000 TM SAVEWRK1+2,X'80' NOSEP INDICATOR ON ?? 00688000 BZ *+8 NO -- LEAVE SEP FLAG ON - 00689000 NI RDEVFLAG,X'FF'-RDEVSEP TURN OFF SEP FLAG 00690000 XC SAVEWRK2(4),SAVEWRK2 CLEAR CLASS SAVE AREA 00691000 NI SAVEWRK1+2,X'7F' CLEAR SEP FLAG 00692000 CLI RDEVTYPE,TYP3800 IS IT A 3800 PRINTER ? @V60B9BA 00693000 BNE TESTSTAT XFER IF NOT @V60B9BA 00694000 L R3,SAVEWRK3 POINT TO WORK AREA @V60B9BA 00695000 USING HLDAREA,R3 ADDRESSIBILITY @V60B9BA 00696000 CLI HLDFCB,X'00' FCB RESET ? @V60B9BA 00697000 BE *+10 XFER IF NOT @V60B9BA 00698000 MVC RDEVFSEP,HLDFCB MOVE IN NEW VALUE @V60B9BA 00699000 CLI HLDFLASH,X'00' FLASH NAME RESET ? @V60B9BA 00700000 BE *+10 XFER IF NOT @V60B9BA 00701000 MVC RDEVOVLY,HLDFLASH NEW FLASH NAME @V60B9BA 00702000 CLI HLDCHARS,X'00' CHARS RESET ? @V60B9BA 00703000 BE *+10 XFER IF NOT @V60B9BA 00704000 MVC RDEVXSEP,HLDCHARS NEW CHAR ARR TBL FOR SEP @V60B9BA 00705000 NI RDEVSTA2,X'FF'-RDEVPURG RESET IT FIRST @V60B9BA 00706000 TM HLDFLAG1,HLDPURGE PURGE SET ? @V60B9BA 00707000 BZ TESTSTAT XFER IF NOT @V60B9BA 00708000 OI RDEVSTA2,RDEVPURG SET THE PURGE OPTION @V60B9BA 00709000 B TESTSTAT .. 00710000 SPACE 00711000 TESTDEV EQU * HERE TO TEST DEVICE FOR DEVICE INTERRUPT 00712000 TM SAVEWRK1,X'03' FROM DMKCSU OR DMKCPI AND/OR 00713000 * NO INVALID OPTION ??? 00714000 BNZ TESTSTAT YES -- 00715000 CALL DMKSCNFD ANY MORE OPTIONS ?? 00716000 BZ MSG003E YES -- INVALID OPTION 00717000 OI SAVEWRK1,X'02' SET NO INVALID OPTIONS 00718000 TESTSTAT TM RDEVSTAT,RDEVDED+RDEVDISA DEDICATED OR OFFLINE ?? 00719000 BNZ DONEXT1 YES, DON'T TOUCH OR CHECKPOINT @VA09477 00720000 CLI SAVEWRK1+1,X'FF' START ALL - FROM DMKCPI 00721000 BE STARTALL YES - START ALL DEVICES 00722000 TM SAVEWRK1,X'01' CALLED FROM DMKCSU OR DMKCPI 00723000 BZ STARTALL NO - 00724000 TM RDEVFLAG,RDEVDRAN DEVICE DRAINED ?? 00725000 BO DONEXT1 YES, DON'T TOUCH OR CHECKPOINT @VA09477 00726000 STARTALL DS 0H @VA11294 00727100 NI RDEVFLAG,X'FF'-RDEVLOAD RESET LOAD FLAG @VA11294 00727200 LTR R5,R5 DRAIN COMMAND ? @VA11294 00727300 BZ NOTDRAIN NO - NORMAL PATH @VA11294 00727400 TM RDEVFLAG,RDEVDRAN ALREADY DRAINED ? @VA11294 00727500 BO TESTDEV1 YES - 3800 ACT COUNT CORRECT @VA11294 00727600 NOTDRAIN DS 0H @VA11294 00727700 NI RDEVFLAG,X'FF'-RDEVDRAN RESET DRAIN FLAG @VA11294 00727800 EX R5,SETDRAIN SET START / DRAIN OPTIONS @VA11294 00727900 CLI RDEVTYPE,TYP3800 3800 ? @V60B9BA 00729000 BNE TESTDEV1 XFER IF NOT @V60B9BA 00730000 LTR R5,R5 DRAIN COMMAND? @VA09264 00730100 BZ START2 XFER IF NOT @VA09264 00730200 L R3,RDEVEXTN POINT TO RDEVBLOK EXTENSION @VA09264 00730300 USING RSPXBLOK,R3 ADDRESSIBILITY @VA09264 00730400 XC RSPXBLOK(RSPXSIZE*8),RSPXBLOK CLEAR IT @VA09264 00730500 DROP R3 NO LONGER NEEDED @VA09264 00730600 START2 DS 0H @VA09264 00730700 SPACE 00731000 *. 00732000 * AT THIS POINT, THE IMAGE LIBRARY ACTIVITY COUNTS MUST BE 00733000 * UPDATED FOR BOTH THE DRAIN AND START COMMANDS. 00734000 * 1. FOR THE DRAIN COMMAND, DECREMENT THE ACTIVITY COUNT 00735000 * OF THE SYSTEM NAMED IN RDEVIMAG IF THE 3800 IS NOT 00736000 * ALREADY DRAINED. 00737000 * 2. FOR THE START COMMAND WHEN A NEW IMAGE LIBRARY IS NOT 00738000 * SPECIFIED, INCREMENT THE ACTIVITY COUNT OF THE SYSTEM 00739000 * IN RDEVIMAG ONLY IF THE DEVICE IS CURRENTLY DRAINED. 00740000 * 3. FOR THE START COMMAND WHEN A NEW IMAGE LIBRARY NAME 00741000 * IS SPECIFIED: 00742000 * A. IF THE DEVICE IS ALREADY STARTED,DECREMENT THE 00743000 * COUNT FOR THE SYSTEM SSPECIFIED IN RDEVIMAG AND 00744000 * INCREMENT THE COUNT FOR THE SYSTEM IN HLDIMAGE, 00745000 * UNLESS THEY ARE THE SAME SYSTEM, IN WHICH CASE 00746000 * DO NOTHING. 00747000 * B. IF THE DEVICE IS CURRENTLY DRAINED, JUST INCREMENT 00748000 * THE ACTIVITY COUNT OF THE SYSTEM STORED IN HLDIMAGE. 00749000 * 4. IN ANY CASE WHERE THE NEW IMAGE LIBRARY IS NOT FOUND, 00750000 * EXIT WITH ERROR MESSAGE DMKCSO244E. 00751000 *. 00752000 SPACE 00753000 L R3,SAVEWRK3 POINT TO WORK AREA @V60B9BA 00754000 USING HLDAREA,R3 ADDRESSIBILITY @V60B9BA 00755000 L R1,=A(DMKQNTBL) START OF 3800 IMAGE LIBS @V60B9BA 00756000 LTR R1,R1 ARE THERE ANY ? @V60B9BA 00757000 BZ MSG244E THERE SHOULD BE ONE @V60B9BA 00758000 TRANS 2,1,OPT=(BRING,DEFER,SYSTEM) GET IT IN @V60B9BA 00759000 LR R14,R2 POINT TO EACH SYSTEM ENTRY @V60B9BA 00760000 USING NPRTBL,R14 ADDRESSIBILITY @V60B9BA 00761000 LTR R14,R14 ANY IMAGE LIBS EXIST? @V60B9BA 00762000 BZ CKIMAGE2 XFER IF NOT @V60B9BA 00763000 CKIMAGE0 CLC HLDIMAGE,NPRNAME IS IT THE NEW ONE ? @V60B9BA 00764000 BNE CKIMAG0A XFER IF NOT @V60B9BA 00765000 ST R14,HLDPTRN SAVE THE POINTER @V60B9BA 00766000 CKIMAG0A CLC RDEVIMAG,NPRNAME IS THIS THE OLD ONE ? @V60B9BA 00767000 BNE CKIMAGE1 XFER IF NOT @V60B9BA 00768000 ST R14,HLDPTRO SAVE THE POINTER @V60B9BA 00769000 CKIMAGE1 AL R14,NPRPNT NEXT ONE @V60B9BA 00770000 CLC NPRPNT,ZEROES IS IT THE DUMMY LAST ENTRY? @V60B9BA 00771000 BNE CKIMAGE0 TRY NEXT ONE IF NOT @V60B9BA 00772000 CKIMAGE2 CLI HLDIMAGE,X'00' NEW IMAGE SPECIFIED ? @V60B9BA 00773000 BE CKIMAG2A XFER IF NOT @V60B9BA 00774000 OC HLDPTRN,HLDPTRN DID WE FIND ITS NAME ? @V60B9BA 00775000 BZ MSG244E ERROR IF NOT @V60B9BA 00776000 SPACE 00777000 CKIMAG2A LTR R5,R5 DRAIN COMMAND ? @V60B9BA 00778000 BNZ DECRDV XFER IF SO @V60B9BA 00779000 CLI HLDIMAGE,X'00' NEW IMAGE SPECIFIED ? @V60B9BA 00780000 BNE NEWIMAGE XFER IF SO @V60B9BA 00781000 TM SAVEWRK1+3,RDEVDRAN ORIGINALLY DRAINED? @V60B9BA 00782000 BZ TESTDEV1 XFER IF NOT @V60B9BA 00783000 L R14,HLDPTRO INCREMENT RDEVIMAG @V60B9BA 00784000 LTR R14,R14 DID WE FIND IT ? @V60B9BA 00785000 BZ MSG244E ERROR-WE CAN'T INCR IT @V60B9BA 00786000 B INCRMNT GO DO IT @V60B9BA 00787000 NEWIMAGE L R14,HLDPTRN HLDIMAGE WILL BE INCR'ED @V60B9BA 00788000 MVC RDEVIMAG,HLDIMAGE ALSO MOVE NEW ONE IN @V60B9BA 00789000 TM SAVEWRK1+3,RDEVDRAN ORIGINALLY DRAINED? @V60B9BA 00790000 BO INCRMNT XFER IF SO @V60B9BA 00791000 CLC HLDPTRN,HLDPTRO OLD AND NEW THE SAME ? @V60B9BA 00792000 BE TESTDEV1 FINISHED IF SO @V60B9BA 00793000 INCRMNT SR R15,R15 INITIALIZE @V60B9BA 00794000 IC R15,NPRCNT CURRENT COUNT @V60B9BA 00795000 LA R15,1(R15) INCREMENT @V60B9BA 00796000 STC R15,NPRCNT SAVE IT @V60B9BA 00797000 TM SAVEWRK1+3,RDEVDRAN ORIGINALLY DRAINED? @V60B9BA 00798000 BO TESTDEV1 XFER IF SO @V60B9BA 00799000 DECRDV L R14,HLDPTRO RDEVIMAGE POINTER @V60B9BA 00800000 LTR R14,R14 DID WE FIND IT ? @V60B9BA 00801000 BZ TESTDEV1 DON'T DECR, BUT GO ON @V60B9BA 00802000 SR R15,R15 ZERO IT @V60B9BA 00803000 IC R15,NPRCNT OLD COUNT @V60B9BA 00804000 LTR R15,R15 ALREADY ZERO ?? @V60B9BA 00805000 BZ TESTDEV1 XFER IF SO @V60B9BA 00806000 BCTR R15,0 DECREMENT IT @V60B9BA 00807000 STC R15,NPRCNT NEW COUNT @V60B9BA 00808000 DROP R14,R3 NO LONGER NEEDED @V60B9BA 00809000 SPACE 00810000 SPACE 00811000 TESTDEV1 BAL R3,STARTMSG GO GIVE START/DRAIN MSG 00812000 TM RDEVFLAG,RDEVACNT IS IT BUSY WITH ACCOUNT FILE 00813000 BO DONEXT YES - 00814000 ICM R4,B'1111',RDEVSPL IS DEVICE ACTIVE ?? @VA00716 00815000 BZ STARTDEV NO - START IT 00816000 CLI 0(R4),X'FF' IS SFBLOK ADDRESS IN RDEVSPL ?? 00817000 * ACTIVE FILE WHEN CHECKPOINT WAS TAKEN. 00818000 BE STARTDEV YES -- GIVE DEVICE END 00819000 TM RDEVSTAT,RDEVNRDY NOT READY FLAG SET ?? 00820000 BO STARTDEV YES --GIVE DEVICE END 00821000 TM RDEVFLAG,RDEVTERM FILE TO BE FLUSHED ?? 00822000 BZ DONEXT NO -- 00823000 ICM R3,B'1111',RDEVAIOB IS THERE A ACTIVE IOB ?? @VA00716 00824000 BNZ DONEXT YES - 00825000 ICM R14,B'1111',RSPSFBLK-RSPLCTL(R4) PRT GOING IDLE @VA13341 00825400 BZ DONEXT YES,NO NEED FOR NEW ONE. @VA13341 00825800 TM RDEVSTA2,RDEVINTL SFBLOK ALREADY EXIST? @VA05941 00826000 BZ STARTDEV NO. @VA05941 00827000 BALR R3,R0 @VA05941 00828000 RDEVINTL EQU X'08' @VA05941 00829000 SPACE 00830000 STARTDEV LA R0,IOBSIZE GET CORE FOR AN 00831000 CALL DMKFREE IOBLOK 00832000 L R2,SAVEWRK4 RESTORE ADDRESS OF DEVICE 00833000 USING IOBLOK,R1 TEMPORARY ADDRESSABILITY 00834000 XC IOBLOK(IOBSIZE*8),IOBLOK CLEAR IOBLOK 00835000 ST R1,IOBLINK IOBLOK POINTS TO ITSELF (= ORIGINAL COPY) 00836000 STH R2,IOBRADD STORE DEVICE ADDRESS 00837000 MVI IOBCSW+4,DE INSERT DUMMY DEVICE END @VA00716 00838000 MVC IOBUSER(4),ASYSVM USE ADDRESS OF SYSTEM VMBLOK 00839000 MVI IOBFLAG,IOBCP SET FLAGS AND STATUS 00840000 LTR R3,R3 SHOULD FATAL FLAG BE SET 00841000 BNZ SETIRA NO -- 00842000 OI IOBSTAT,IOBFATAL CLEAR DEVICE AND RECHAIN FILE 00843000 ICM R3,B'1111',RSPSFBLK-RSPLCTL(R4) SPOOL FILE @VA00716 00844000 * BLOK PRESENT? 00845000 BZ SETIRA NO -- 00846000 OI SFBFLAG2-SFBLOK(R3),SFBREQUE FORCE REQUEUING OF FILE 00847000 SETIRA L R3,=A(DMKRSPEX) SET DMKRSPEX AS 00848000 ST R3,IOBIRA INTERRUPT RETURN ADDRESS 00849000 MVC IOBMISC(3),ID+3 INDICATE CALL FROM CSO 00850000 LR R10,R1 SET UP IOB REG FOR CALL 00851000 CALL DMKSTKIO AND STACK THE BLOK FOR DISPATCH 00852000 B DONEXT 00856000 SPACE 3 00857000 DODEL EQU * HERE TO DELETE FILES ON DELETE CHAIN 00858000 SR R7,R7 INDICATE NO SPOOL FILE 00859000 CALL DMKSPLDL,AFFINITY START DELETE ROUTINE @V4075A0 00860000 DOALL EQU * HERE TO START OR DRAIN ALL DEVICES 00861000 TM SAVEWRK1+2,X'02' RADDRESS AND ALL DONE ?? 00862000 BO STEXIT YES -- 00863000 L R6,ARIORD POINTER TO READER CHAIN @VA00716 00864000 MVC SAVEWRK6(3),=C'RDR' SET UP FOR MESSAGE 00865000 BAL R10,SCANDEV 00866000 STPUPR L R6,ARIOPU POINTER TO PUNCH CHAIN 00867000 MVC SAVEWRK6(3),=C'PUN' SET UP FOR MESSAGE 00868000 BAL R10,SCANDEV 00869000 STPRT L R6,ARIOPR POINTER TO PRINTER CHAIN 00870000 MVC SAVEWRK6(3),=C'PRT' SET UP FOR MESSAGE 00871000 B SCANEXIT SCAN FOR DEVICE AND EXIT @VA00716 00872000 SPACE 00873000 STPCH L R6,ARIOPU POINTER TO PUNCH CHAIN 00874000 MVC SAVEWRK6(3),=C'PUN' SET UP FOR MESSAGE 00875000 B SCANEXIT SCAN FOR DEVICE AND EXIT @VA00716 00876000 SPACE 00877000 STRDR L R6,ARIORD POINTER TO READER CHAIN @VA00716 00878000 MVC SAVEWRK6(3),=C'RDR' SET UP MESSAGE 00879000 SCANEXIT BAL R10,SCANDEV SCAN FOR DEVICE @VA00716 00880000 B STEXIT AND EXIT @VA00716 00881000 SPACE 00882000 ALL EQU X'80' 00883000 SPACE 00884000 SETDRAIN OI RDEVFLAG,0 EXECUTED TO SET DRAIN FLAG 00885000 TMTYPE TM RDEVTYPE,X'00' EXECUTED TO TEST TYPE 00886000 SPACE 00887000 SPACE 2 00888000 ORG *-193 00889000 ALPHANUM EQU * TRT TABLE TO VALIDATE THE 36 LEGAL OUTPUT CLASSES 00890000 ORG 00891000 DC C'ABCDEFGHI' VALID CLASSES 00892000 DC 7X'00' ILLEGAL CLASSES 00893000 DC C'JKLMNOPQR' VALID CLASSES 00894000 DC 8X'00' ILLEGAL CLASSES 00895000 DC C'STUVWXYZ' VALID CLASSES 00896000 DC 6X'00' ILLEGAL CLASSES 00897000 DC C'0123456789' VALID CLASSES 00898000 DC 6X'00' ILLEGAL CLASSES 00899000 SPACE 2 00900000 DS 0H 00901000 SPACE 00902000 SCANDEV ST R10,SAVEWRK5 SAVE RETURN ADDRESS 00903000 ICM R7,B'1111',0(R6) GET NUMBER OF LIST ENTRIES @VA00716 00904000 BZ ZEROCNT BRANCH IF ZERO ENTRIES @VA00716 00905000 NEXTDEV LA R6,4(,R6) POINT TO NEXT LIST ENTRY 00906000 LH R8,0(,R6) GET INDEX INTO DEVICE TABLE 00907000 SLL R8,3(0) CONVERT TO BYTE INDEX @V200820 00908000 A R8,ARIODV POINT TO RDEVLBOK 00909000 LH R2,2(,R6) GET DEVICE ADDRESS 00910000 ST R2,SAVEWRK4 SAVE DEVICE ADDRESS 00911000 MVC SAVEWRK1+3(1),RDEVFLAG MOVE IN ORIGINAL STATUS @V60B9BA 00912000 B TESTDEV RETURN TO TEST DEVICE 00913000 SPACE 00914000 DONEXT CALL DMKCKSPL,AFFINITY,PARM=CHGRDV CHKPNT THE CHANGE @V4075A0 00915000 DONEXT1 EQU * @VA09477 00915100 TM SAVEWRK1+2,X'02' REAL ADDRESS ?? @V304298 00916000 BO STARTX YES -- 00917000 BCT R7,NEXTDEV COUNT DOWN LIST TO NEXT DEVICE 00918000 ZEROCNT L R10,SAVEWRK5 RESTORE RETURN ADDRESS 00919000 BR R10 RETURN 00920000 SPACE 3 00921000 STEXIT L R1,SAVEWRK3 GET RID OF THE WORK AREA @V60B9BA 00922000 LTR R1,R1 IS THERE ONE ? @V60B9BA 00923000 BZ STEXIT2 XFER IF NOT @V60B9BA 00924000 LA R0,HLDSIZE NUMBER OF DBL WDS @V60B9BA 00925000 CALL DMKFRET GIVE BACK THE STORAGE @V60B9BA 00926000 STEXIT2 EXIT , @V60B9BA 00927000 SPACE 3 00928000 STARTMSG EQU * HERE TO PRINT MSG DRAINED OR STARTED 00929000 TM SAVEWRK1,X'01' WAS CALLER DMKCSU OR DMKCPI ?? 00930000 BCR 1,R3 YES -- RETURN WITHOUT GIVING MSG 00931000 ICM R4,B'1111',RDEVSPL DEVICE ACTIVE WITH FILE ? @VA00716 00932000 BZ MOVETYPE NO - 00933000 LTR R5,R5 DRAIN OR START MSG 00934000 BZ MOVETYPE START MSG ONLY ON ACTIVE 00935000 TM RDEVSTAT,RDEVNRDY NOTREADY FLAG SET ?? 00936000 BZ DONEXT NO -- DO NEXT DEVICE 00937000 TM RDEVFLAG,RDEVTERM FLUSH COMMAND GIVEN TO THIS DEVICE ? 00938000 BZ DONEXT NO -- DO NEXT DEVICE 00939000 NI RDEVSTAT,X'FF'-RDEVBUSY RESET DEVICE BUSY FLAG 00940000 SR R3,R3 INDICATE FATAL ERROR IN NEW IOBLOK 00941000 ST R3,RDEVAIOB CLEAR ACTIVE IOBLOK ADDRESS 00942000 ST R3,RDEVIOER CLEAR IOERBLOK ADDRESS 00943000 B STARTDEV GO GIVE DEVICE END INTERRUPT 00944000 MOVETYPE MVC DEVTYPE(3),SAVEWRK6 FILE IN MSG DEVICE TYPE 00945000 MVC DEVCLASS(4),RDEVCLAS MOVE IN CLASSES 00946000 OC DEVCLASS(4),BLANKS EDIT FOR UCASE @V200930 00947000 L R1,SAVEWRK4 GET DEVICE ADDRESS 00948000 CALL DMKCVTBH AND CONVERT 00949000 STCM R1,B'0111',DEVADDR AND STORE IN MSG 00950000 MVC DEVMSG(7),=C'STARTED' 00951000 LTR R5,R5 STARTING ?? 00952000 BZ *+10 00953000 MVC DEVMSG(7),=C'DRAINED' 00954000 MVC DEVSEP(3),=C' NO' SET NOSEP @V200930 00955000 TM RDEVFLAG,RDEVSEP TEST FOR NOSEP @V200930 00956000 BZ *+10 YES IT IS NOSEP @V200930 00957000 MVC DEVSEP(3),BLANKS MARK AS SEP @V200930 00958000 LA R0,STARTLR READER MSG SIZE @V200930 00959000 TM RDEVTYPC,CLASURI IS IT A READER TYPE ?? @V200930 00960000 BO *+8 YES, CONT @V200930 00961000 LA R0,STARTL LENGTH AND 00962000 LA R1,STMSG AND ADDRESS OF MESSAGE 00963000 CALL DMKQCNWT,AFFINITY,PARM=(NORET+OPERATOR) @V4075A0 00964000 NI RDEVFLAG,X'FF'-RDEVSPAC RESET SPACE FLAG 00965000 TM VMOSTAT,VMSYSOP IS USER SYSTEM OPERATOR ?? 00966000 BCR 1,R3 YES -- RETURN TO CALLER 00967000 CALL DMKQCNWT,AFFINITY,PARM=NORET SEND MSG TO USER @V4075A0 00968000 BR R3 RETURN TO CALLER 00969000 SPACE 00970000 STMSG DS 0H @V200930 00971000 DEVTYPE DC CL5' ' @V200930 00972000 DEVADDR DC CL3' ' @V200930 00973000 DC CL1' ' @V200930 00974000 DEVMSG DC CL7' ' STARTED OR DRAINED @V200930 00975000 DC CL3' ' @V200930 00976000 DEVUSER DC CL8'SYSTEM ' @V200930 00977000 STARTLR EQU *-STMSG READER MSG SIZE @V200930 00978000 DC CL9' CLASS = ' @V200930 00979000 DEVCLASS DC CL4' ' @V200930 00980000 DEVSEP DC CL6' NOSEP' @V200930 00981000 STARTL EQU *-STMSG @V200930 00982000 DS 0H 00983000 EJECT 00984000 *. 00985000 * SUBROUTINE NAME - 00986000 * 00987000 * DMKCSORP 00988000 * 00989000 * FUNCTION - 00990000 * 00991000 * TO REPEAT THE CURRENTLY ACTIVE FILE ON THE SPECIFIED DEVICE A 00992000 * SPECIFIED NUMBER OF TIMES. THE NUMBER OF COPIES SPECIFIED IS 00993000 * ADDED TO THE NUMBER SPECIFIED BY THE USER. IF 'HOLD' IS 00994000 * SPECIFIED THE FILE WILL BE HELD AFTER PRINTING THE 00995000 * LAST COPY REQUESTED. 00996000 * 00997000 * COMMAND LINE FORMAT - 00998000 * 00999000 * +--------+-----------------------+ 01000000 * | REPEAT | RADDR | 01001000 * | REP | HO | 01002000 * +--------+-----------------------+ 01003000 * 01004000 * OPERATION - 01005000 * 01006000 * 1. BAL TO GETDEVIC TO LOCATE THE RDEVBLOK FOR THE DEVICE ON 01007000 * WHICH THE FILE IS TO BE REPEATED 01008000 * 2. IF DEVICE NOT PRINTER OR PUNCH: EXIT GIVING MSG021E. 01009000 * IF DEVICE IS DEDICATE: EXIT GIVING MSG140E. 01010000 * IF DEVICE IS OFFLINE: EXIT GIVING MSG046E. 01011000 * IF DEVICE NOT ACTIVE: EXIT GIVING MSG141E. 01012000 * 3. CALL DMKSCNFD TO LOCATE THE NUMBER OF COPIES REQUESTED 01013000 * OR KEYWORD 'HOLD'. IF 'HOLD' SET SFBSHOLD AND 01014000 * GO TO STEP 3. 01015000 * 4. IF NO NUMBER IS GIVEN, 1 IS ASSUMED 01016000 * 5. CONVERT THE NUMBER TO BINARY AND VERIFY THAT THE NUMBER 01017000 * REQUESTED IS LESS THAN 100 01018000 * 6. ADD THE NUMBER GIVEN TO THE COPIES FIELD IN THE SFBLOK 01019000 * IF NONE: GO TO STEP 7. 01020000 * IF TOTAL COPIES IN SFBLOK IS OVER 99, RESET TO 99 COPIES 01021000 * 7. EXIT 01022000 * 01023000 * RESPONSE - 01024000 * 01025000 * TYPE XXX REPEATED USERID FILE= NNNN RECDS=NNNNNN COPY= NN C TYP 01026000 * 01027000 * 01028000 * ERROR MESSAGES - 01029000 * 01030000 * DMKCSO003E INVALID OPTION - (OPTION) 01031000 * DMKCSO006E INVALID DEVICE TYPE - (ADDR) 01032000 * DMKCSO013E CONFLICTING OPTION - (OPTION) 01033000 * DMKCSO021E RADDR MISSING OR INVALID 01034000 * DMKCSO030E COPIES MISSING OR INVALID 01035000 * DMKCSO040E DEV (ADDR) DOES NOT EXIST 01036000 * DMKCSO046E (TYPE) (RADDR) OFFLINE 01037000 * DMKCSO140E (TYPE) (RADDR) ATTACHED TO (USERID) 01038000 * DMKCSO141E (TYPE) (RADDR) NOT ACTIVE 01039000 *. 01040000 SPACE 01041000 DMKCSORP RELOC 01042000 BAL R4,CLEAR CLEAR SAVEWRK1,2-9 01043000 BAL R4,GETDEVIC LOCATE REAL DEVICE BLOK FOR FILE 01044000 * TO BE REPEATED 01045000 ST R1,SAVEWRK2 SAVE DEVICE ADDRESS 01046000 USING RDEVBLOK,R8 01047000 LA R2,1 DEFAULT NUMBER FOR REPEAT 01048000 REPSCAN EQU * 01049000 CALL DMKSCNFD DID USER SPECIFY NUMBER OF REPEATS ? 01050000 BNZ SETRPEAT NO -- 01051000 TM SAVEWRK1,X'C0' HOLD AND COPY SET ?? 01052000 BO MSG003E YES -- INVALID OPTION 01053000 LR R14,R0 COUNT 01054000 BCTR R14,0 -1 01055000 C R0,F2 VALID COUNT FOR HOLD 01056000 BL CVTCOPY MUST BE COUNT 01057000 EX R14,CLCHOLD HOLD OPTION ?? 01058000 BNE CVTCOPY NO - 01059000 TM SAVEWRK1,X'80' HOLD OPTION SET ?? 01060000 BO MSG013E YES -- CONFLICTING OPTION 01061000 OI SAVEWRK1,X'80' SET SWITCH 01062000 B REPSCAN 01063000 SPACE 01064000 CVTCOPY C R0,F2 LENGTH GREATER THAN 2 ?? 01065000 BH MSG003E YES ---INVALID OPTION 01066000 TM SAVEWRK1,X'40' COPY OPTION PRESENT ?? 01067000 BO MSG013E YES -- CONFLICTING OPTION 01068000 CALL DMKCVTDB CONVERT NUMBER OF REPEATS 01069000 BNZ MSG030E NUMBER OF COPIES MISSING 01070000 LR R2,R1 GET NUMBER OF TIMES TO REPAET 01071000 C R2,=F'99' MORE THAN 99 COPIES REQUESTED ?? 01072000 BH MSG030E YES -- NUMBER OF COPIES INVALID 01073000 LTR R1,R1 COPIES EQUAL ZERO ?? 01074000 BZ MSG030E YES - 01075000 OI SAVEWRK1,X'40' INDICATE COPY OPTION PRESENT 01076000 B REPSCAN LOCATE NEXT OPTION 01077000 SPACE 01078000 USING SFBLOK,R7 01079000 USING RSPLCTL,R9 01080000 SETRPEAT L R1,SAVEWRK2 GET DEVICE ADDRESS @VA00716 01081000 ICM R9,B'1111',RDEVSPL FILE POINTER PRESENT ?? @VA00716 01082000 BZ MSG141E NO - CANNOT REPEAT 01083000 TM RDEVFLAG,RDEVACNT PUNCHING ACCOUNTING CARDS ?? 01084000 BO MSG141E YES -- GIVE INACTIVE MSG 01085000 LR R7,R9 SET UP SFBLOK ADDRESS 01086000 CLI 0(R9),X'FF' IF FILE IS ACTIVE ON WARM START 01087000 BE *+8 YES -- 01088000 L R7,RSPSFBLK GET ADDRESS OF SFBLOK 01089000 LTR R7,R7 SPOOL FILE PRESENT ?? 01090000 BZ MSG141E NO - 01091000 SPACE 01092000 TM SAVEWRK1,X'80' HOLD INDICATED ?? 01093000 BZ ADDCOPY NO - 01094000 OI SFBFLAG,SFBSHOLD+SFBRECOK SET SYSTEM HOLD AND RECORD 01095000 * ALLOCATION OK 01096000 SPACE 01097000 ADDCOPY TM SAVEWRK1,X'80' HOLD PRESENT ?? 01098000 BZ SETCOPY NO -- 01099000 TM SAVEWRK1,X'40' COPY PRESENT ?? 01100000 BZ CSOEXIT NO - 01101000 SETCOPY AH R2,SFBCOPY ADD REPEAT TO NUMBER OF COPIES 01102000 C R2,=F'99' TOTAL COPIES LARGER THAN 99 ? @VW01227 01103000 BNH *+8 NO -- 01104000 LA R2,99 SET TO 99 COPIES 01105000 STH R2,SFBCOPY AND STORE IN SFBLOK 01106000 B CSOEXIT EXIT 01107000 SPACE 01108000 EJECT 01109000 *. 01110000 * SUBROUTINE NAME - 01111000 * 01112000 * DMKCSOBS 01113000 * 01114000 * FUNCTION - 01115000 * 01116000 * TO BACKSPACE THE OUTPUT OF A REAL SPOOL PRINTER A SPECIFIED 01117000 * NUMBER OF FORMS PAGES, OR TO BACK UP THE OUTPUT OF A PRINTER 01118000 * OR PUNCH TO THE BEGINNING OF THE CURRENT FILE 01119000 * 01120000 * COMMAND LINE FORMAT - 01121000 * 01122000 * PUNCHES 01123000 * 01124000 * +-----------+----------------+ 01125000 * | BACKSPACE | RADDR | 01126000 * | BA | ---- | 01127000 * +-----------+----------------+ 01128000 * 01129000 * PRINTERS 01130000 * 01131000 * +-----------+---------------------------+ 01132000 * | BACKSPACE | RADDR | 01133000 * | BA | | 01134000 * | | 1 | 01135000 * | | - | 01136000 * +-----------+---------------------------+ 01137000 * 01138000 * FILE EOF 01139000 * F EOF 01140000 * 01141000 * OPERATION - 01142000 * 01143000 * 1. BAL TO GETDEVIC TO LOCATE THE RDEVBLOK FOR THE DEVICE 01144000 * TO BE BACKSPACED 01145000 * 2. IF DEVICE NOT PRINTER OR PUNCH: EXIT GIVING MSG021E. 01146000 * IF DEVICE DEDICATE: EXIT GIVING MSG140E. 01147000 * IF DEVICE NOT ACTIVE: EXIT GIVING MSG141E. 01148000 * IF DEVICE OFFLINE: EXIT GIVING MSG046E. 01149000 * 3. CALL DMKSCNFD TO LOCATE BACKSPACE OPTION 01150000 * 4. IF NO OPTION IS GIVEN, ASSUME 1 PAGE 01151000 * 5. IF THE 'FILE' OPTION IS SPECIFIED, SET THE RDEVRSTR FLAG 01152000 * AND EXIT 01153000 * 6. IF A NUMERIC OPTION IS SPECIFIED, CONVERT IT TO BINARY. 01154000 * IF THE EOF OPTION IS ALSO GIVEN, OBTAIN THE 01155000 * NEGATIVE OF THE BACKUP COUNT AND 01156000 * SAVE IT IN THE RSPLCTL CONTROL BLOK; THEN SET THE RDEVBACK 01157000 * FLAG AND EXIT 01158000 * 01159000 * RESPONSE - 01160000 * 01161000 * TYPE XXX BACKSPACE USERID FILE= NNNN RECDS=NNNNNN COPY= NN C TYP 01162000 * 01163000 * ERROR MESSAGES - 01164000 * 01165000 * DMKCSO003E INVALID OPTION - (OPTION) 01166000 * DMKCSO006E INVALID DEVICE TYPE - (ADDR) 01167000 * DMKCSO021E RADDR MISSING OR INVALID 01168000 * DMKCSO040E DEV (ADDR) DOES NOT EXIST 01169000 * DMKCSO046E (TYPE) (RADDR) OFFLINE 01170000 * DMKCSO140E (TYPE) (RADDR) ATTACHED TO (USERID) 01171000 * DMKCSO141E (TYPE) (RADDR) NOT ACTIVE 01172000 * DMKCSO441E NOT ACCEPTED. PREVIOUS BACKSPACE STILL BEING 01172010 * PROCESSED. @VA13377 01172020 *. 01173000 SPACE 01174000 DMKCSOBS RELOC 01175000 BAL R4,CLEAR CLEAR SAVEWRK1,2-9 01176000 BAL R4,GETDEVIC LOCATE RDEVBLOK FOR FILE TO BE 01177000 * BACKSPACED 01178000 USING RDEVBLOK,R8 01179000 ICM R4,B'1111',RDEVSPL ACTIVE FILE POINTER PRESENT ?@VA00716 01180000 BZ MSG141E NO - CANNOT BACKSPACE 01181000 TM RDEVFLAG,RDEVBACK SEE IF ALREADY BACKSPACING @VA13377 01181300 BO MSG441E YES, CAN'T DO IT AGAIN YET @VA13377 01181600 TM RDEVFLAG,RDEVACNT PUNCHING ACCOUNTING CARDS ?? 01182000 BO MSG141E YES -- GIVE INACTIVE MSG 01183000 LA R2,1 DEFAULT OF 1 FOR BACKSPACE NUMBER 01184000 SWITCH @VA08060 01185000 CALL DMKSCNFD DID USER SPECIFY NUMBER OF PAGES ?? 01186000 BNZ SETBACK NO -- USE ONE 01187000 C R0,F8 LENGTH GREATER THAN 8 ? 01188000 BH MSG003E YES -- ERROR MSG DMKCSO003E 01189000 LR R14,R0 COUNT 01190000 BCTR R14,0 -1 01191000 EX R14,CLCFILE IS IT BACKSPACE FILE ?? 01192000 BE SETFILE YES - 01193000 STM R0,R1,SAVEWRK8 SAVE LENGTH AND ADDRESS OF OPTION 01194000 TM RDEVTYPE,TYPPUN PUNCH ?? 01195000 BO MSG003E INVALID OPTION 01196000 CALL DMKCVTDB CONVERT USER REQUEST 01197000 BZ CNTGOOD PAGE COUNT GOOD 01198000 BSERR LM R0,R1,SAVEWRK8 GET LENGTH AND ADDRESS 01199000 B MSG003E ERROR MSG INVALID OPTION 01200000 * 'FILE' 01201000 CNTGOOD EQU * 01202000 LTR R1,R1 COUNT ZERO ?? 01203000 BZ BSERR YES - INVALID OPTION 01204000 LR R2,R1 GET NUMBER TO BACKSPACE 01205000 SETBACK TM RDEVTYPE,TYPPUN IS IT PUNCH 01206000 BO SETFILE YES - HAS TO BE FILE 01207000 CALL DMKSCNFD ANY MORE OPTIONS ?? 01208000 BNZ NOTEOF NO, IT'S A NORMAL BACKSPAC @V60B9BA 01209000 C R0,F3 SEE IF IT IS EOF OPTION @V60B9BA 01210000 BNE MSG003E NOPE, IT MUST BE INVALID @V60B9BA 01211000 CLC 0(3,R1),=C'EOF' IS IT REALLY EOF ? @V60B9BA 01212000 BNE MSG003E NOPE, IT IS INVALID @V60B9BA 01213000 LNR R2,R2 LOAD NEGATIVE BACKSP CNT @V60B9BA 01214000 * TO INDICATE EOF OPTION 01215000 NOTEOF ST R2,RSPMISC-RSPLCTL(R4) SAVE BACKSPACE NUMBER IN @V60B9BA 01216000 * RSPLCTL 01217000 OI RDEVFLAG,RDEVBACK SET BACKSPACE 01218000 B CSOEXIT AND EXIT 01219000 SPACE 01220000 SETFILE EQU * 01221000 CALL DMKSCNFD ANY MORE OPTIONS ?? 01222000 BZ MSG003E YES -- INVALID OPTION 01223000 OI RDEVFLAG,RDEVRSTR YES - SET RESTART FLAG IN RDEVBLOK 01224000 B CSOEXIT AND LEAVE 01225000 EJECT 01226000 *. 01227000 * OPERATION OF GETDEVIC SUBROUTINE - 01228000 * 01229000 * 1. CALL DMKSCNFD TO LOCATE THE DEVICE ADDRESS FIELD 01230000 * 2. IF NO OPTION IS FOUND: EXIT GIVING MSG021E. 01231000 * 3. CONVERT THE ADDRESS TO BINARY 01232000 * 4. IF THE CONVERSION FAILS, EXIT GIVING MSG021E. 01233000 * 5. CALL DMKSCNRU TO LOCATE THE DEVICE BLOK FOR THE SPECIFIED 01234000 * UNIT; IF NOT FOUND, EXIT GIVING MSG040E. 01235000 * 6. OTHERWISE, RETURN TO CALLER WITH GPR8 = RDEVBLOK 01236000 *. 01237000 SPACE 01238000 USING RDEVBLOK,R8 01239000 GETDEVIC EQU * HERE TO LOCATE THE DEVICE SPECIFIED IN THE COMMAND 01240000 CALL DMKSCNFD LOCATE NEXT OPTION 01241000 BNZ MSG021E DEVICE ADDRESS IS MISSING 01242000 SPACE 01243000 GETDVIC2 C R0,F3 LENGTH GREATER THAN 3 ?? 01244000 BH MSG021E YES -- INVALID RADDRESS 01245000 LR R14,R0 GET LENGTH 01246000 BCTR R14,0 -1 01247000 EX R14,MVCADDR MOVE ADDRESS TO SAVEWRK7 01248000 CALL DMKCVTHB CONVERT TO BINARY 01249000 BNZ MSG021E INVALID HEX CHARACTERS IN ADDRESS 01250000 CALL DMKSCNRU 01251000 BNZ MSG040E COULDN'T FIND A DEVICE AT THAT 01252000 * ADDRESS 01253000 L R14,ARIORD POINT TO LIST OF SYSTEM READERS 01254000 MVC SAVEWRK6(3),=C'RDR' SET FOR ERROR MSG 01255000 TM RDEVTYPC,CLASURI READER TYPE ?? 01256000 BO VALDEV VALIDATE DEVICE FOR SPOOLING 01257000 L R14,ARIOPR POINT TO LIST OF SYSTEM PRINTERS 01258000 MVC SAVEWRK6(3),=C'PRT' PRINTER TYPE ?? 01259000 TM RDEVTYPE,TYPPRT PRINTER ?? 01260000 BO VALDEV VALIDATE DEVICE FOR SPOOLING 01261000 L R14,ARIOPU POINT TO LIST OF SYSTEM PUNCHES 01262000 MVC SAVEWRK6(3),=C'PUN' SET FOR PUNCH 01263000 SPACE 01264000 VALDEV ICM R15,B'1111',0(R14) GET NUMBER OF DEVICES 01265000 BZ MSG006E NO DEVICES - INVALID TYPE 01266000 GETDEVLP LA R14,4(R14) UPDATE TO NEXT ENTRY 01267000 CH R1,2(R14) IS THIS DEVICE ON LIST ?? 01268000 BE DEVAVAIL YES -- CHECK FOR DEVICE @VA00716 01269000 * AVAILABILITY 01270000 BCT R15,GETDEVLP TRY NEXT ENTRY 01271000 B MSG006E -- INVALID DEVICE TYPE 01272000 SPACE 01273000 DEVAVAIL TM SAVEWRK1+2,X'02' START OR DRAIN COMMAND ? @VA00716 01274000 BCR 1,R4 YES - BRANCH (RETURN) @VA00716 01275000 TM RDEVTYPC,CLASURO UNIT RECORD OUTPUT TYPE ? @VA00716 01276000 BZ MSG006E NO - INVALID ADDRESS @VA00716 01277000 TSTSTAT TM RDEVSTAT,RDEVDED IS THE DEVICE DEDICATED ? @VA00716 01278000 BO MSG140E YES -- ERROR @VA00716 01279000 TM RDEVSTAT,RDEVDISA IS THE DEVICE OFFLINE ? @VA00716 01280000 BO MSG046E YES -- ERROR @VA00716 01281000 BR R4 RETURN TO CALLER @VA00716 01282000 SPACE 01283000 MVCADDR MVC SAVEWRK7(0),0(R1) MOVE NAME TO SAVEWRK7 01284000 SPACE 3 01285000 CLEAR XC SAVEWRK2(32),SAVEWRK2 CLEAR WORK AREA 01286000 XC SAVEWRK1(4),SAVEWRK1 01287000 BR R4 RETURN 01288000 SPACE 3 01289000 EJECT 01290000 ****************************************************** 01291000 * 01292000 * ERROR EXITS FROM DMKCSO 01293000 * 01294000 ****************************************************** 01295000 SPACE 3 01296000 MSG003E EQU * HERE IF OPTION IS INVALID 01297000 LA R2,003 ERROR MSG DMKCSO003E 01298000 B EXIT8 01299000 SPACE 01300000 MSG006E EQU * HERE IF INVALID DEVICE TYPE 01301000 LA R2,006 ERROR MSG DMKCSO006E 01302000 B EXIT1 01303000 SPACE 01304000 MSG013E EQU * HERE IF CONFLICTING OPTIONS 01305000 LA R2,013 ERROR MSG DMKCSO013E 01306000 B EXIT8 .. 01307000 SPACE 01308000 MSG021E EQU * HERE IF RADDR MISSING OR INVALID 01309000 LA R2,021 ERROR MSG DMKCSO021E 01310000 B EXIT8R1 01311000 SPACE 01312000 SPACE 01313000 MSG028E EQU * HERE IF CLASS IS MISSING OR INVALID 01314000 LA R2,028 ERROR MSG DMKCSO028E 01315000 B EXIT8R1 EXIT 01316000 SPACE 01317000 MSG030E EQU * HERE IF COPIES MISSING OR INVALID 01318000 LA R2,030 ERROR MSG DMKCSO030E 01319000 B EXIT8R1 EXIT 01320000 SPACE 01321000 SPACE 2 01322000 MSG040E EQU * HERE IF DEVICE ADDRESS DOES NOT EXIST 01323000 LA R2,040 ERROR MSG DMKCSO040E 01324000 B EXIT1 SET UP MESSAGE 01325000 SPACE 01326000 SPACE 01327000 MSG046E EQU * HERE IF DEVICE IS OFFLINE 01328000 LA R2,046 ERROR MSG DMKCSO046E 01329000 B EXIT2 SET GPR0 AND GPR1 01330000 SPACE 01331000 MSG140E EQU * HERE IF DEVICE IS ATTACHED TO USER 01332000 L R14,RDEVUSER ADDRESS OF USER VMBLOK 01333000 MVC SAVEWRK8(8),VMUSER-VMBLOK(R14) GET USER ID 01334000 LA R0,16 LENGTH OF DATA FOR ERROR MSG 01335000 LA R1,SAVEWRK6 ADDRESS OF DATA 01336000 LA R2,140 ERROR MSG DMKCSO140E 01337000 B EXIT8 EXIT 01338000 SPACE 01339000 MSG141E EQU * HERE IF DEVICE NOT ACTIVE 01340000 LA R2,141 ERROR MSG DMKCSO141E 01341000 B EXIT2 SET UP GPR0 AND GPR1 01342000 SPACE 01343000 MSG243E EQU * HERE IF FLASH MISSING OR INVALID @V60B9BA 01344000 LA R2,243 ERR MSG DMKCSO243E @V60B9BA 01345000 B EXIT8R1 EXIT @V60B9BA 01346000 SPACE 01347000 MSG244E EQU * HERE IF IMAGE LIBRARY MISSING OR INVALID @V60B9BA 01348000 TM SAVEWRK1,X'01' CALLED FROM DMKCPI?? @V60B9BA 01349000 BO DONEXT IGNORE ERROR IF SO @V60B9BA 01350000 LA R2,244 ERR MSG DMKCSO244E @V60B9BA 01351000 B EXIT8R1 EXIT @V60B9BA 01352000 SPACE 01353000 MSG245E EQU * HERE IF CHARS MISSING OR INVALID @V60B9BA 01354000 LA R2,245 ERR MSG DMKCSO245E @V60B9BA 01355000 B EXIT8R1 EXIT @V60B9BA 01356000 SPACE 01357000 MSG246E EQU * HERE IF FCB MISSING OR INVALID @V60B9BA 01358000 LA R2,246 ERR MSG DMKCSO246E @V60B9BA 01359000 B EXIT8R1 EXIT @V60B9BA 01360000 SPACE 01361000 MSG441E EQU * HERE ON BACKSPACE WHEN ALREADY BACKSPACING @VA13377 01361100 LA R2,441 ERR MSG DMKCSO441E @VA13377 01361200 LA R1,BACKSPAC VARIABLE FOR SUBSTITUTION @VA13377 01361300 LA R0,L'BACKSPAC LENGTH TO SUBSTITUTE @VA13377 01361400 B EXIT8 GO PROCESS THE MSG @VA13377 01361500 SPACE 1 01361600 EXIT1 LA R0,3 LENGTH OF REAL ADDRESS 01362000 LA R1,SAVEWRK7 ADDRESS OF REAL ADDRESS 01363000 B EXIT8 EXIT 01364000 SPACE 01365000 EXIT2 LA R0,8 LENGTH OF TYPE AND REAL ADDRESS 01366000 LA R1,SAVEWRK6 ADDRESS OF DATA 01367000 B EXIT8 EXIT 01368000 SPACE 3 01369000 CLCALL CLC 0(0,R1),=C'ALL ' 01370000 CLCHOLD CLC 0(0,R1),=C'HOLD ' 01371000 CLCPRINT CLC 0(0,R1),=C'PRINTER ' 01372000 CLCREAD CLC 0(0,R1),=C'READER ' 01373000 CLCPUN CLC 0(0,R1),=C'PUNCH ' 01374000 CLCFILE CLC 0(0,R1),=C'FILE ' 01375000 CLCNOS CLC 0(0,R1),=C'NOSEP ' 01376000 CLCCLASS CLC 0(0,R1),=C'CLASS ' 01377000 CLCFLASH CLC 0(0,R1),=C'FLASH ' @V60B9BA 01378000 CLCCHARS CLC 0(0,R1),=C'CHARS ' @V60B9BA 01379000 CLCFCB CLC 0(0,R1),=C'FCB ' @V60B9BA 01380000 CLCIMAGE CLC 0(0,R1),=C'IMAGE ' @V60B9BA 01381000 CLCPURGE CLC 0(0,R1),=C'PURGE ' @V60B9BA 01382000 MVCFLASH MVC HLDFLASH-HLDAREA(0,R3),0(R1) @V60B9BA 01383000 MVCCHARS MVC HLDCHARS-HLDAREA(0,R3),0(R1) @V60B9BA 01384000 MVCIMAGE MVC HLDIMAGE-HLDAREA(0,R3),0(R1) @V60B9BA 01385000 EJECT 01386000 *********************************** 01388000 * 01389000 * FINAL EXIT BACK TO DMKCFM OR DMKERM 01390000 * 01391000 *********************************** 01392000 SPACE 3 01393000 DS 0H 01394000 SPACE 2 01395000 EXIT8R1 SR R1,R1 NO DATA IN R0 AND R1 01396000 SR R0,R0 NO DATA IN RO BUT DATA IN R1 01397000 EXIT8 ICM R0,B'1110',ID+3 LOAD MODULE ID (CSO) 01398000 STM R0,R1,SAVEWRK4 SAVE REGS NOW @VMI0010 01399000 L R1,SAVEWRK3 GIVE BACK THE WORK AREA @V60B9BA 01400000 LTR R1,R1 IS THERE ONE ? @V60B9BA 01401000 BZ EXIT8A XFER IF NOT @V60B9BA 01402000 LA R0,HLDSIZE SIZE IN DBL WDS @V60B9BA 01403000 CALL DMKFRET GIVE IT BACK @V60B9BA 01404000 EXIT8A LM R0,R1,SAVEWRK4 RESTORE THE REGS @VMI0010 01405000 CALL DMKERMSG GO TO ERROR MSG MODULE 01406000 * 01407000 * DMKERMSG WILL EXIT TO DMKCFM VIA SVC 16 01408000 * 01409000 SPACE 2 01410000 CSOMSG EQU * HERE TO PRINT COMMAND COMPLETED MESSAGE 01411000 LA R0,16 MSG LENGTH 01412000 LA R1,CMDMSG ADDRESS OF MSG 01413000 CALL DMKQCNWT,PARM=NORET 01414000 SPACE 2 01415000 CSOEXIT EQU * HERE TO EXIT 01416000 EXIT 01417000 EJECT 01418000 CMDMSG DC C'COMMAND COMPLETE' 01420000 BACKSPAC DC C'BACKSPACE' @VA13377 01421000 LTORG 01422000 EJECT 01423000 HLDAREA DSECT , WORK AREA FOR START COMMAND @V60B9BA 01424000 HLDFLASH DS CL4 FLASH OVERLAY NAME @V60B9BA 01425000 HLDCHARS DS CL4 CHAR ARR TBL FOR SEP PAGE @V60B9BA 01426000 HLDIMAGE DS CL8 IMAGE LIBRARY FOR LOADS @V60B9BA 01427000 HLDPTRO DS A PTR TO NPRTBL FOR RDEVIMAG @V60B9BA 01428000 HLDPTRN DS A PTR TO NPRTBL FOR HLDIMAGE @V60B9BA 01429000 HLDFCB DS 1X FCB FOR SEP PAGE (6|8|12) @V60B9BA 01430000 HLDFLAG1 DS 1X FLAG BYTE @V60B9BA 01431000 HLDPURGE EQU X'80' PURGE SPECIFIED FLAG @V60B9BA 01432000 DS 6X RESERVED @V60B9BA 01433000 HLDSIZE EQU (*-HLDAREA)/8 WORK AREA SIZE (DBL WDS) @V60B9BA 01434000 SPACE 01435000 PSA , @V306638 01436000 COPY CONBUF @V306638 01437000 COPY DEVTYPES @V306638 01438000 COPY EQU @V306638 01439000 COPY IOBLOKS @V306638 01440000 COPY IOER @V306638 01441000 COPY RBLOKS @V306638 01442000 COPY SAVE @V306638 01443000 COPY SPOOL @V306638 01444000 COPY NPRTBL @V60B9BA 01445000 COPY UDIRECT @V306638 01446000 COPY VBLOKS @V306638 01447000 COPY VMBLOK @V306638 01448000 SPACE 4 01449000 END 01450000