MNI TITLE 'DMKMNI (CP) VM/370 - RELEASE 6' 00001000 ISEQ 73,80 VALIDATE SEQUENCING OF INPUT @V2B2638 00002000 COPY OPTIONS @V2B2638 00003000 COPY LOCAL @V2B2638 00004000 SPACE 4 00005000 DMKMNI CSECT @V2B2638 00006000 MODID DC CL8'DMKMNI' IDENTIFICATION FOR DUMPS @V2B2638 00007000 USING SAVEAREA,R13 @V2B2638 00008000 USING PSA,R0 @V2B2638 00009000 USING MONCOM,R9 @V4075A4 00010000 EJECT 00011000 *. 00012000 * 00013000 * MODULE NAME - 00014000 * 00015000 * DMKMNI 00016000 * 00017000 * FUNCTION - 00018000 * 00019000 * PAGEABLE MONITOR FUNCTIONS 00020000 * 00021000 * ATTRIBUTES - 00022000 * 00023000 * REENTRANT, PAGABLE, 00024000 * 00025000 * CALLED VIA: 00026000 * SVC FROM DMKMCC 00027000 * SVC FROM DMKMON 00028000 * SVC FROM DMKCPS 00029000 * 00030000 * ENTRY POINTS - 00031000 * 00032000 * DMKMNISH - TO INITIATE MONITOR SHUTDOWN 00033000 * DMKMNITR - TO WRITE MONITOR TRAILER RECORD 00034000 * DMKMNIFI - TO COMPLETE MONITOR SHUTDOWN 00035000 * 00036000 * ENTRY CONDITIONS - 00037000 * 00038000 * REFER TO THE PROLOG ASSOCIATED WITH EACH ENTRY POINT 00039000 * 00040000 * EXIT CONDITIONS - 00041000 * 00042000 * REFER TO THE PROLOG ASSOCIATED WITH EACH ENTRY POINT 00043000 * 00044000 * EXTERNAL REFERENCES / CALLS TO OTHER ROUTINES - 00045000 * 00046000 * THE FOLLOWING ARE FUNCTIONAL EXTERNAL REFERENCES 00047000 * OR ROUTINES WHICH ARE CALLED BY THE MONITOR. 00048000 * REFER TO THE DATA COLLECTION TABLE FOR ALL DATA 00049000 * EXTERNAL REFERENCES PERTAINING TO COUNTERS, ETC. 00050000 * 00051000 EXTRN DMKIOSQR REQUEST CP I/O TO A DEVICE @V2B2638 00052000 EXTRN DMKMONPR ALLOC SPACE IN BUFF FOR RECORD @V4075A4 00053000 EXTRN DMKMON00 COLLECT CODE 0 CLASS 0 INFO @V4075A4 00054000 EXTRN DMKMON40 COLLECT CODE 4 CLASS 0 INFO @V4075A4 00055000 EXTRN DMKSCHRT UNCHAIN TRB @V4075A4 00056000 EXTRN DMKDSPCH FIND SOME OTHER WORK TO BE DONE @V2B2638 00057000 EXTRN DMKFREE OBTAIN A BLOCK OF FREE STORAGE @V2B2638 00058000 EXTRN DMKFRET RETURN A BLOCK OF FREE STORAGE @V2B2638 00059000 EXTRN DMKSTKCP STACK A CPEXBLOK @V2B2638 00060000 EXTRN DMKPRGC8 ENABLED CLASSES OF MONITOR EVENTS@V2B2638 00061000 EXTRN DMKPRGMI ADDRESS OF MONITOR INT HANDLER @V2B2638 00062000 EXTRN DMKPRGMC ADDRESS OF COMMUNICATIONS AREA @V2B2638 00063000 EXTRN DMKPRGTI TIMER INTERVAL @V4075A4 00064000 EXTRN DMKERMSG SEND AN ERROR MESSAGE @V2B2638 00065000 EXTRN DMKPTRUL UNLOCK A PAGE @V2B2638 00066000 EXTRN DMKPTRFT OBTAIN A PAGE OF FREE STORAGE @V2B2638 00067000 EXTRN DMKCVTDT OBTAIN DATE AND TIME IN EBCDIC @V2B2638 00068000 EXTRN DMKCPEID RELEASE/VERSION/LEVEL INFO @V4075A4 00069000 EXTRN DMKDSPNP COUNT OF SYSTEM PAGEABLE PAGES @VA07357 00070000 EXTRN DMKPGTVR,DMKMIACC,DMKUDRFU,DMKSCNFD,DMKSYSUR @V50A2B5 00071000 EXTRN DMKSYSTS,DMKSYSTE,DMKSYSCL,DMKSYSMX @V50A2B5 00072000 EXTRN DMKCVTBD,DMKSYSAT @V50A2B5 00073000 EXTRN DMKSLC NUC START AFTER V=R AREA @V60BEBC 00073100 EXTRN DMKFRELO LOW FREE STORAGE BASE @V60BEBC 00073200 EXTRN DMKFREHI HIGH FREE STORAGE BASE @V60BEBC 00073300 EXTRN DMKENTTI UTILIZATION (I/O) RTN @V60BEBC 00073400 EXTRN DMKCPEND RESIDENT NUCLEUS END @V60BEBC 00073500 EXTRN DMKSYSRM AVAILABLE MEMORY @V60BEBC 00073600 EXTRN DMKSYSRV SYSGEN MEMORY @V60BEBC 00073700 EXTRN DMKENTUT UTILIZATION INTERVAL @V60BEBC 00073800 * 00074000 * REGISTER USAGE IN THIS MODULE - 00075000 * 00076000 * R0 - WORK REG 00077000 * R1 - WORK REG 00078000 * R2 - WORK REG 00079000 * R3 - WORK REG 00080000 * R4 - WORK REG 00081000 * R6 - RCHBLOK / RETURN ADDRESS FOR TIMER COLLECTION ROUTINES 00082000 * R7 - RCUBLOK / WORKREG 00083000 * R8 - RDEVBLOK / WORKREG 00084000 * R9 - MONCOM ADDRESS 00085000 * R10 - IOB ADDRESS WITHIN I/O ROUTINES AND I/O DATA COLLECTION 00086000 * R11 - VMBLOK ADDRESS 00087000 * R12 - BASE ADDRESS 00088000 * R13 - FOR MI ENTRY, R13 OF ISSUER 00089000 * R14 - BALR LINKAGE 00090000 * R15 - BALR LINKAGE 00091000 * 00092000 *. 00093000 EJECT 00094000 *. 00095000 * 00096000 * 00097000 * ENTRY POINT - 00098000 * 00099000 * DMKMNITH - COLLECT TAPE HEADER INFORMATION 00100000 * 00101000 * ENTRY CONDITIONS - 00102000 * 00103000 * GPR9 - ADDRESS OF MONCOM 00104000 * GPR12 - ADDRESS OF ENTRY POINT 00105000 * GPR13 - ADDRESS OF STANDARD SAVE AREA 00106000 * 00107000 * EXIT CONDITIONS - 00108000 * 00109000 * NONE 00110000 * 00111000 * CALLS TO OTHER ROUTINES - 00112000 * 00113000 * DMKCVTDT - TO GET THE CURRENT DATE AND TIME 00114000 * 00115000 * OPERATION - 00116000 *  00117000 * MONITOR TAPE HEADER PROCESSING 00118000 * 00119000 * DMKMNITH: 00120000 * 00121000 * INITIALIZE THE IOBLOK WHICH IS HUNG FROM THE 00122000 * MONCOM. 00123000 * 00124000 * CALL DMKIOSQR TO ISSUE THE REWIND / SET-MODECCW 00125000 * SEQUENCE. 00126000 * 00127000 * EXIT BACK TO DMKMCC TO ISSUE THE COMMAND COMPLETE 00128000 * MESSAGE, THUS FREEING THE CONSOLE WHILE A POSSIBLE 00129000 * REWIND OPERATION IS IN PROGRESS. 00130000 * 00131000 * ON I/O COMPLETION, STOP THE MONITOR IF THERE WAS AN 00132000 * I/O ERROR OR A MONITOR STOP COMMAND HAS BEEN 00133000 * ISSUED. OTHERWISE, REINITIALIZE THE IOB FOR NORMAL 00134000 * PROCESSING. 00135000 * 00136000 * SET CONTROL REGISTER 8 TO THE VALUE STORED IN 00137000 * DMKPRGC8, THUS ENABLING THE DESIRED CLASSES OF 00138000 * MONITOR CALL INTERRUPTS. 00139000 * 00140000 * INDICATE A CLASS 0 CODE 97 MONITOR CALL IN PSA. 00141000 * 00142000 * OBTAIN BUFFER SPACE AND INITIALIZE THE BASIC HEADER 00143000 * RECORD. 00144000 * 00145000 * IF THE DASTAP CLASS IS ENABLED THEN COLLECT THE 00146000 * DASTAP HEADER AS DESCRIBED BELOW; OTHERWISE GO TO 00147000 * PERFORM. 00148000 * 00149000 * SCAN ALL DEVICES DEFINED IN DMKRIO AND COUNT THE 00150000 * NUMBER OF DEVICES THAT ARE EITHER TAPE OR DASD. 00151000 * 00152000 * OBTAIN ENOUGH STORAGE TO CONTAIN A POINTER TO EACH 00153000 * DASD AND TAPE DEVICE BLOCK. OBTAIN MONITOR BUFFER 00154000 * SPACE FOR THE DASTAP RECORD. 00155000 * 00156000 * MAKE ANOTHER SCAN OF THE DEVICES DEFINED IN DMKRIO. 00157000 * THIS TIME INITIALIZE THE DEVICE LIST AND CREATE THE 00158000 * DASTAP HEADER RECORD. 00159000 * 00160000 * PERFORM: 00161000 * 00162000 * IF THE PERFORM CLASS IS NOT ENABLED THEN GO TO 00163000 * USER. OTHERWISE INDICATE A CLASS 0 CODE 0 MONITOR 00164000 * CALL IN PSA AND COLLECT THE FIRST PERFORM DATA. 00165000 * 00166000 * USER: 00167000 * 00168000 * IF THE USER CLASS IS ENABLED THEN INDICATE A CLASS 00169000 * 4 CODE 0 MONITOR CALL IN PSA AND COLLECT THE FIRST 00170000 * USER RECORD. 00171000 * 00172000 * EXIT. 00173000 * 00174000 *. 00175000 DMKMNITH RELOC @V2B2638 00176000 USING VMBLOK,R11 @V2B2638 00177000 USING MONCOM,R9 @V2B2638 00178000 L R10,MONAIOB GET THE IOB ADDRESS @V2B2638 00179000 USING IOBLOK,R10 ADDRESS IT @V2B2638 00180000 L R8,MONARDB GET THE RDEVBLOK ADDRESS @V2B2638 00181000 LA R1,MODRETN ADDRESS OF THE RETURN POINT @V2B2638 00182000 ST R1,IOBIRA SAVE THAT IN THE IRA @V2B2638 00183000 CALL DMKIOSQR REQUEST THE REW + SET MODE @V2B2638 00184000 LR R2,R12 ADDR OF THIS MODULE FOR DMKPTRLK 00185000 CALL DMKPTRLK LOCK DMKMNI FOR IOB RETURN 00186000 EXIT => MCC FOR 'COMMAND COMPLETE' 00187000 SPACE 2 00188000 * 00189000 * ENTRY POINT - DMKMNIDK 00190000 * 00191000 ENTRY DMKMNIDK @V50A2B5 00192000 DROP R12 @V50A2B5 00193000 USING *,R15 @V50A2B5 00194000 DMKMNIDK DS 0H MONITOR OUTPUT TO SPOOL FILES @V50A2B5 00195000 LR R12,R15 COMPUTE ADDRESS @V50A2B5 00196000 SL R12,=A(DMKMNIDK-DMKMNI) OF MNI @V50A2B5 00197000 DROP R15 @V50A2B5 00198000 USING DMKMNI,R12 @V50A2B5 00199000 B NOTTAPE CONTINUE ON @V50A2B5 00200000 SPACE 3 @V50A2B5 00201000 USING *,R12 TEMPORARY ADDRESSABILITY @V2B2638 00202000 MODRETN SL R12,=A(MODRETN-DMKMNI) REGAIN ADDRESSABILITY @V2B2638 00203000 USING DMKMNI,R12 NORMAL ADDRESSABILITY @V2B2638 00204000 L R9,=A(DMKPRGMC) GET ADDR OF MONCOM @V2B2638 00205000 L R9,0(R9) ... @V2B2638 00206000 L R1,MONAIOB ADDRESS OF THE REAL IOB @V2B2638 00207000 CR R1,R10 IS THIS THE REAL ONE? @V2B2638 00208000 LA R5,GOTODSP IN CASE IT ISN'T @V2B2638 00209000 BNE FRETIOB NOPE, THROW AWAY & WAIT FOR FINAL@V2B2638 00210000 BAL R5,FRETIOER IN ANY CASE, THROW OUT ANY IOER @V2B2638 00211000 TM IOBSTAT,IOBFATAL DID THE REW/SET MODE WORK? @V2B2638 00212000 BO ERRONERR NOPE, SHUT THE MONITOR DOWN NOW. @V2B2638 00213000 TM MONFLAG1,CFSTOP DID SOMEBODY SAY STOP WHILE @V2B2638 00214000 * WE WERE DOING REW/SET MODE? 00215000 BO UNLOKMON YUP, THEN STOP THIS INSTANT. @V2B2638 00216000 SR R1,R1 CLEAR A REG @V4075A4 00217000 ST R1,MONIOBF INDICATE TAPE NO LONGER BUSY @V4075A4 00218000 MVI IOBSIZE*8+16(R10),X'1F' RESET REW TO WTM @V2B2638 00219000 MVI IOBSIZE*8+24(R10),X'0F' AND SET MODE TO RUN @V2B2638 00220000 NOTTAPE DS 0H @V50A2B5 00221000 LA R0,MNCOTH SET UP TAPE HEADER CLASS/CODE @VM01017 00222000 ST R0,MONCODE ... @V2B2638 00223000 LA R0,MNCLPERF @VM01017 00224000 STH R0,MONCLASS @VM01017 00225000 LA R0,MN097LEN LENGTH OF TAPE HEADER RECORD @V2B2638 00226000 CALL DMKMONPR GET SPACE FOR TAPE HEADER RECORD @V4075A4 00227000 LTR R1,R1 TEST BUFFER SPACE @VA10215 00227300 BZ NOMORE NO SPACE-LEAVE @VA10215 00227600 TM MONFLAG3,SPOOLED ARE WE SPOOLING @V50A2B5 00228000 BO NOSETX DO NOT SET IOBIRA @V50A2B5 00229000 ST R0,IOBIRA NO SPOOLING, SET IT @V50A2B5 00230000 NOSETX EQU * @V50A2B5 00231000 SWITCH @VA12214 00231100 USING MN097,R3 ADDRESS THE RECORD @V2B2638 00232000 LR R3,R1 MOVE DATA POINTER TO R3 @V2B2638 00233000 MVC MN097CPU,CPUID MOVE CPUID DATA INTO TAPE HEADER @V2B2638 00234000 L R2,=A(DMKCPEID) RELEASE/VERSION/LEVEL INFO. @V2B2638 00235000 MVC MN097LEV,0(R2) MOVE INTO DATA RECORD @V2B2638 00236000 LA R1,MN097DAT FIELD FOR DATE @V2B2638 00237000 LA R2,MN097TIM AND ONE FOR TIME @V2B2638 00238000 CALL DMKCVTDT SET DATE & TIME INTO TAPE HEADER @V2B2638 00239000 L R2,=A(DMKPRGC8) ADDR OF ALMOST CURRENT MASK @V2B2638 00240000 MVC MN097CR8,0(R2) MOVE MASK INTO RECORD @V2B2638 00241000 MVC MN097UID,MONUSER USERID STARTING THE TAPE @V2B2638 00242000 L R2,=A(DMKCPEND) GET NUCLEUS END @V60BEBC 00242020 ICM R1,B'1111',=A(DMKSLC) SUBTRACT OFF V=R @V60BEBC 00242040 BZ NOVR AREA (IF ANY), EXCEPT FOR @V60BEBC 00242060 USING PSA,R0 ABSOLUTE PAGE 0 @V60BEBC 00242080 S R1,F4095 .... @V60BEBC 00242100 SR R2,R1 .... @V60BEBC 00242120 NOVR ST R1,MN097VR SAVE V=R BYTES @V60BEBC 00242140 ST R2,MN097NUC SAVE NUCLEUS BYTES @V60BEBC 00242160 L R1,PREFIXA TRACE TABLE END @V60BEBC 00242180 L R2,16(R1) MINUS TRACE TABLE START @V60BEBC 00242200 S R2,12(R1) EQUALS TRACE TABLE SIZE @V60BEBC 00242220 ST R2,MN097TTS SAVE TRACE TABLE SIZE @V60BEBC 00242240 L R1,=A(DMKFREHI) DMKFREHI... @V60BEBC 00242260 L R1,0(R1) MINUS @V60BEBC 00242280 L R4,=A(DMKFRELO) DMKFRELO @V60BEBC 00242300 L R4,0(R4) MINUS @V60BEBC 00242320 SR R1,R4 TRACE TABLE SIZE @V60BEBC 00242340 SR R1,R2 EQUALS D.P.A. SIZE @V60BEBC 00242360 ST R1,MN097DPA SAVE DYNAMIC PAGING AREA SIZE @V60BEBC 00242380 L R2,=A(DMKCPEND) GET SIZE OF @V60BEBC 00242400 SR R4,R2 LOW FREE STORAGE @V60BEBC 00242420 L R1,=A(DMKSYSRV) GET SYSGEN SPECIFIED @V60BEBC 00242440 L R1,0(R1) MEMORY SIZE @V60BEBC 00242460 L R2,=A(DMKSYSRM) GET REAL MEMORY SIZE @V60BEBC 00242480 L R2,0(R2) ... @V60BEBC 00242500 CR R2,R1 REAL CORE GGREATER GEN CORE? @V60BEBC 00242520 BL CALCFREE NO, USE REAL CORE SIZE @V60BEBC 00242540 LR R2,R1 YES, USE GEN SIZE @V60BEBC 00242560 CALCFREE L R1,=A(DMKFREHI) DIFFERENCE OF USABLE CORE @V60BEBC 00242580 L R1,0(R1) AND DMKFREHI @V60BEBC 00242600 SR R2,R1 PLUS LOW FREE SIZE @V60BEBC 00242620 AR R2,R4 EQUALS FREE STORE SIZE @V60BEBC 00242640 TM APSTAT1,APUOPER ALSO DECREMENT FROM FREE @V60BEBC 00242660 BNO NOPREFIX 2 PREFIXED PAGEFRAMES @V60BEBC 00242680 S R2,=F'8192' IF APU IS RUNNING @V60BEBC 00242700 NOPREFIX ST R2,MN097FSS SAVE FREE STORAGE SIZE @V60BEBC 00242720 TM APSTAT1,PROCIO SAVE PROCESSOR LOGICAL ADDRS @V60BEBC 00242740 BNO NOTMAIN DEPENDENT UPON CURRENT EXECUTIO@V60BEBC 00242760 MVC MN097CPL,LPUADDR MAIN PROCESSOR ADDR @V60BEBC 00242780 MVC MN097APL,LPUADDRX AP ADDR @V60BEBC 00242800 B SKIPOUT FINISHED @V60BEBC 00242820 NOTMAIN MVC MN097CPL,LPUADDRX MAIN PROCESSOR ADDR @V60BEBC 00242840 MVC MN097APL,LPUADDR AP ADDRESS @V60BEBC 00242860 SKIPOUT EQU * @V60BEBC 00242880 L R2,=A(DMKPRGC8) V60BEBC 00242900 DROP R3 NO MORE USE OF HEADER RECORD @V2B2638 00243000 OI MONFLAG1,MONTIINT TIME COLLECT IN CASE SUSPEND @VM01095 00244000 TM 2(R2),DASDCL WAS DASTAP SPECIFIED? @V2B2638 00245000 BO MONCOD60 YES, GO GENERATE SECOND HEADER @V2B2638 00246000 TSTPERF SLR R2,R2 CLEAR THE MONSUSCT FIELD USED... @V2B2638 00247000 ST R2,MONSUSCT ... BY CLASS 6 HEADER. @V2B2638 00248000 TM MONFLAG2,SUSPEND HAVE WE SUSPENDED? @VM01095 00249000 BO NOMORE YES, BEATIT, QUICK. @VM01095 00250000 L R2,=A(DMKPRGC8) READDRESS MASK FIELD @V2B2638 00251000 TM 2(R2),PERFCL IS PERFORM CLASS ACTIVE @V2B2638 00252000 BZ TSTUSER NO, BUT MAYBE USER CLASS IS @V2B2638 00253000 LA R0,MNCLPERF YES, SIMULATE PERFORM CLASS @VM01017 00254000 STH R0,MONCLASS @VM01017 00255000 LA R0,MNCOSYS @VM01017 00256000 ST R0,MONCODE @VM01017 00257000 CALL DMKMON00 AND GO COLLECT THE FIRST SHOT @V4075A4 00258000 TM MONFLAG2,SUSPEND HAVE WE SUSPENDED? @VM01095 00259000 BO NOMORE YES, GET OUT NOW. @VM01095 00260000 TSTUSER L R2,=A(DMKPRGC8) READDRESS MASK FIELD @V2B2638 00261000 TM 2(R2),USERCL IS USER CLASS ACTIVE @V2B2638 00262000 BZ SETCR8 NO, DONE @V2B2638 00263000 LA R0,MNCLUSER YES, SIMULATE USER CLASS @VM01017 00264000 STH R0,MONCLASS @VM01017 00265000 LA R0,MNCOUSER @VM01017 00266000 ST R0,MONCODE @VM01017 00267000 CALL DMKMON40 GO COLLECT FIRST USER RECORDS 00268000 TM MONFLAG2,SUSPEND HAVE WE SUSPENDED? @VM01095 00269000 BO NOMORE YES, DON'T ENABLE NOW. @VM01095 00270000 SETCR8 L R2,=A(DMKPRGC8) READDRESS THE MASK @V2B2638 00271000 L R2,0(R2) PICK UP SAID MASK @V2B2638 00272000 ST R2,CPCREG8 PUT IT IN PSA @V2B2638 00273000 L R8,PREFIXB GET ADDRESS OF OTHER PSA @V4075A4 00274000 ST R2,CPCREG8(R8) PROPAGATE MC MASK TO OTHER PSA @V4075A4 00275000 LCTL C8,C8,CPCREG8 SET THE SYSTEM MASK TO THAT @V2B2638 00276000 NI MONFLAG3,X'FF'-CLSUS TURN OFF CLOSE SUSPEND @V50A2B5 00277000 NOMORE NI MONFLAG1,255-MONTIINT SIMUL TIMER PROCESS DONE @V4075A4 00278000 B GOTO EXIT TO DISPATCHER 00279000 SPACE 00280000 ERRONERR LA R2,220 MSG220, TAPE ERR, MON SHUTDOWN @V4075A4 00281000 O R2,=X'B0C90000' RETURN HERE + ALARM + @V4075A4 00282000 I SLR R1,R1 ZIP R1 = NO SUBSTITUTABLES @V4075A4 00283000 ICM R0,B'1110',MODID+3 ISSUEING MODULE ID @V4075A4 00284000 CALL DMKERMSG GO PUT OUT THE MESSAGE @V4075A4 00285000 B UNLOKMON DONE ALL WE CAN, SHUTDOWN MON @V4075A4 00286000 EJECT 00287000 ******* 00288000 * 00289000 * CLASS 6 CODE 0, DASTAP, COLLECT DEVICE STATISTICS HEADER 00290000 * 00291000 * REGISTER USAGE IN THIS ROUTINE: 00292000 * 00293000 * R0 - DEVICE COUNT 00294000 * R1 - CHANNEL INDEX 00295000 * R2 - CONTROL UNIT INDEX 00296000 * R3 - DEVICE INDEX 00297000 * R4 - BXLE INCREMENT CONSTANT 00298000 * R5 - BXLE COMPARAND VALUE 00299000 * R6 - CHANNEL BLOCK ADDRESS / DEVICE TYPE BYTE 00300000 * R7 - CONTROL UNIT BLOCK ADDRESS 00301000 * R8 - DEVICE BLOCK ADDRESS 00302000 * R9 - MONCOM ADDRESS 00303000 * R10 - POINTER WITHIN DEVICE LIST FOR PASS 2 00304000 * R11 - VMBLOCK ADDRESS 00305000 * R12 - BASE REGISTER 00306000 * R13 - NOT USED 00307000 * R14 - DEVICE TYPE CHECK BYTE / BALR TO DMKFREE 00308000 * R15 - POINTER WITHIN MN600 RECORD FOR PASS 2 00309000 * 00310000 ******* 00311000 USING RCHBLOK,R6 @V2B2638 00312000 USING RCUBLOK,R7 @V2B2638 00313000 USING RDEVBLOK,R8 @V2B2638 00314000 MONCOD60 TM MONFLAG3,CLSUS ARE WE CLOSE SUSPENDED? @V60BEBC 00315000 BNO INIT60 NO,NORMAL MONITOR STARTUP @V60BEBC 00315150 LH R0,MONDVNUM YES,RESET DEVICE LIST @V60BEBC 00315300 L R1,MONDVLST TO NULL @V60BEBC 00315450 CALL DMKFRET FREE DEVICE LIST @V60BEBC 00315600 INIT60 MVI MONSUSCT,X'01' REMEMBER AS PASS 1 @V60BEBC 00315750 MVI MONSUSCT+1,CLASDASD+CLASTAPE SET FOR DAS + TAPE @V2B2638 00316000 RESCAN SLR R0,R0 DEVICE COUNT @V2B2638 00317000 SECPASS LA R4,2 LOAD INCREMENT FOR BXLE LOOP @V2B2638 00318000 SLR R1,R1 ZERO CHANNEL INDEX @V2B2638 00319000 LA R5,30 GPR5 POINTS TO END OF INDEX TABLE@V2B2638 00320000 EXAMNCH L R6,ARIOCT ADDRESS OF CHANNEL INDICES @V2B2638 00321000 LH R6,0(R1,R6) LOAD INDEX OF NEXT CHANNEL @V2B2638 00322000 LTR R6,R6 IS CHANNEL ALIVE ? @V2B2638 00323000 BM EXAMCHI NO, TRY NEXT CHANNEL @V2B2638 00324000 A R6,ARIOCH ADDRESS OF RCHBLOK IN GPR6 @V2B2638 00325000 USING RCHBLOK,R6 @V2B2638 00326000 SLR R2,R2 ZERO CONTROL UNIT INDEX COUNT @V2B2638 00327000 LA R5,62 END OF CONTROL UNIT INDEX TABLE @V2B2638 00328000 EXAMNCU LH R7,RCHCUTBL(R2) PICK UP INDEX @V2B2638 00329000 LTR R7,R7 IS CONTROL UNIT THERE ? @V2B2638 00330000 BM EXAMCUI NO TRY NEXT CU @V2B2638 00331000 A R7,ARIOCU ADDRESS OF RCUBLOK TO GPR7 @V2B2638 00332000 USING RCUBLOK,R7 @V2B2638 00333000 SLR R3,R3 ZERO INDEX FOR DEV INDEX @V2B2638 00334000 LA R5,30 R5 = END OF DEVICE INDEX TABLE @V2B2638 00335000 EXAMNDEV LH R8,RCUDVTBL(R3) PICK UP INDEX @V2B2638 00336000 LTR R8,R8 IS DEVICE THERE ? @V2B2638 00337000 BM EXAMDVI NO TRY NEXT DEVICE @V2B2638 00338000 SLL R8,3(0) CONVERT TO BYTE INDEX @V2B2638 00339000 A R8,ARIODV ADDRESS OF RDEVBLOK TO GPR8 @V2B2638 00340000 USING RDEVBLOK,R8 @V2B2638 00341000 IC R14,MONSUSCT+1 GET DEVICE TYPE TO LOOK FOR @V2B2638 00342000 EX R14,TESTTYPE IS THIS DEVICE OF THE RIGHT TYPE?@V2B2638 00343000 BZ EXAMDVI NOPE, SKIP TO NEXT DEVICE @V2B2638 00344000 TM RDEVSTAT,RDEVDISA YES, IS THE DEVICE ONLINE? @V2B2638 00345000 BO EXAMDVI NOPE, THEN SKIP IT. @V2B2638 00346000 LR R14,R7 PUT CU ADDRESS IN R14 @VA08777 00346100 TM RCUTYPE,RCUSUB IS THIS SUBORDINATE CU ? @VA08398 00346200 BNO HAVPRIM NO, R5 CONTAINS PRIME CU @VA08398 00346300 L R14,RCUPRIME PUT PRIME CU ADDR IN R14 @VA08777 00346400 HAVPRIM EQU * @VA08398 00346500 C R6,16(R14) PRIMARY CHANNEL INTERFACE ? @VA08777 00346600 BNE EXAMDVI NO, AVOID DUPLICATE ENTRY @VA08102 00346700 CL R7,RDEVCUA PRIMARY CONTROL UNIT INTERFACE ??@VA08102 00346800 BNE EXAMDVI NO, SKIP TO NEXT DEVICE @VA08102 00346900 CLI MONSUSCT,X'01' IS THIS PASS 1 OR 2 @VM01054 00347000 BNE PASS2 PASS 2 @V2B2638 00348000 A R0,F1 PASS1, INCR DEVICE COUNT @V2B2638 00349000 B EXAMDVI AND GO TO NEXT DEVICE @V2B2638 00350000 SPACE 3 00351000 PASS2 ST R8,0(R10) SAVE THIS DEVICE ADDR IN TABLE @V2B2638 00352000 LA R10,MNDEVLEN(,R10) INCREMENT TO NEXT POSITION @V60BEBC 00353000 LTR R15,R15 DO WE HAVE A BUFFER? @VA13063 00353400 BZ GOLOOP NO-DON'T TRY TO LOAD IT @VA13063 00353800 USING MN600DEV,R15 ADDRESS THE BLOCK @V2B2638 00354000 MVC MN600ADD,RDEVADD GET THE RDEVICE ADDR @V2B2638 00355000 OC MN600ADD+1(1),RCUADD+1 ADD CONTROL UNIT ADDR @V2B2638 00356000 OC MN600ADD(1),RCHADD AND THE CHANNEL ADDRESS @V2B2638 00357000 MVC MN600TY,RDEVTYPC GET THE DEV CLAS AND TYPE @V2B2638 00358000 MVC MN600SER,RDEVSER GET THE SERIAL NUMBER @V2B2638 00359000 MVC MN600CNT,RDEVIOCT AND THE CURRENT IO COUNT @V2B2638 00360000 LA R15,MN600DLN(,R15) BUMP TO NEXT ENTRY @V2B2638 00361000 GOLOOP BCT R0,EXAMDVI BEWARE OF MAX NO. OF DEVICES @VA13063 00362000 DROP R15 @V60BEBC 00362030 L R5,=A(DMKENTUT) GET I/O UTILIZATION INTERVAL @V60BEBC 00362060 LH R5,0(R5) .... @V60BEBC 00362090 LTR R5,R5 HAS IT BEEN SPECIFIED? @V60BEBC 00362120 BZ TSTPERF NO, DON'T COLLECT DATA @V60BEBC 00362150 TM MONFLAG3,CLSUS CLOSE SUSPENSION? @V60BEBC 00362180 BO TSTPERF YES, ALREADY HAVE TRB, CHANNEL @V60BEBC 00362210 LA R0,MNCHSIZE OBTAIN STORAGE FOR @V60BEBC 00362240 CALL DMKFREE CHANNEL SAMPLE FIELDS @V60BEBC 00362270 ST R1,MONCHPTR SAVE PTR IN MONCOMM AREA @V60BEBC 00362300 XC 0(MNCHSIZE*8,R1),0(R1) INITIALIZE TO 0 @V60BEBC 00362330 LA R0,TRQBSIZE DOUBLE WORDS FOR TRB @V60BEBC 00362360 CALL DMKFREE GET SPACE FOR TRB @V60BEBC 00362390 USING TRQBLOK,R1 ADDR VIA R1 @V60BEBC 00362420 ST R1,MONUTRB SAVE ADDRESS IN MONCOM @V60BEBC 00362450 L R2,ASYSVM CHARGE HANDLING TO @V60BEBC 00362480 ST R2,TRQBUSER THE SYSTEM @V60BEBC 00362510 STCK TRQBTOD TIME OF DAY FOR REQUEST @V60BEBC 00362540 BC 12,CLOCKOK CLOCK FUNCTIONING?? @V60BEBC 00362570 GOTO DMKCVTAB NO, ABEND CVT001 @V60BEBC 00362600 CLOCKOK SLR R4,R4 CLEAR FOR MULTIPLY @V60BEBC 00362630 M R4,=F'1000000' CHANGE TO MICROSECS. @V60BEBC 00362660 SLDL R4,12 ALIGN WITH TOD FORMAT @V60BEBC 00362690 AL R5,TRQBTOD+4 ADD IN LOW ORDER TOD @V60BEBC 00362720 BC 12,NOVFLW SKIP ADD IF NO OVERFLOW @V60BEBC 00362750 AL R4,F1 ADD 1 SEC TO HIGH ORDER TOD @V60BEBC 00362780 NOVFLW AL R4,TRQBTOD ADD IN HIGH ORDER TOD @V60BEBC 00362810 STM R4,R5,TRQBVAL FIRST INTERRUPT DUE AT THIS TIM@V60BEBC 00362840 L R4,=A(DMKENTTI) GET ADDR TIMER INTERRUPT RTN @V60BEBC 00362870 ST R4,TRQBIRA SAVE IT IN INTERRUPT ROUTINE AD@V60BEBC 00362900 CALL DMKSCHST INSERT TRB IN CHAIN @V60BEBC 00362930 DROP R1 @V60BEBC 00362960 B TSTPERF GOT THE MAX, NOW BEATIT. @V2B2638 00363000 SPACE 00364000 EXAMDVI BXLE R3,R4,EXAMNDEV AND CONT. W/ NEXT DEV ON THIS CU @V2B2638 00366000 LA R5,62 LOAD END OF CU TABLE @V2B2638 00367000 EXAMCUI BXLE R2,R4,EXAMNCU AND CONT. W/ NEXT CU ON THIS CH @V2B2638 00368000 LA R5,30 LOAD END OF CH INDEX TABLE @V2B2638 00369000 EXAMCHI BXLE R1,R4,EXAMNCH AND CONT. W/ NEXT CH ON THIS MACH@V2B2638 00370000 CLI MONSUSCT,X'01' FINISH WITH PASS 1? @V2B2638 00371000 BNE TSTPERF NO, PASS 2 DONE. @V2B2638 00372000 LA R1,MN600MAX GET THE MAX POSSIBLE NO. OF DEV. @V2B2638 00373000 TM MONFLAG3,SPOOLED ARE WE SPOOLING @VA09588 00373100 BZ NOTSPOOL NO, USING MAX 291 DEVICES @VA09588 00373200 LA R1,MN600MXS GET SPOOLED MAX DEVICES 289 @VA09588 00373300 NOTSPOOL EQU * @VA09588 00373400 CR R0,R1 HAVE WE EXCEEDED IT? @V2B2638 00374000 BNH CONTAIN NOPE, WHEW. @V2B2638 00375000 TM MONSUSCT+1,CLASTAPE WERE WE CHECKING FOR TAPE? @V2B2638 00376000 BZ NOTAPE NOPE, BEEN HERE BEFORE @V2B2638 00377000 NI MONSUSCT+1,255-CLASTAPE YES, THEN TRY WITHOUT @V2B2638 00378000 B RESCAN ... @V2B2638 00379000 SPACE 00380000 NOTAPE LR R0,R1 GIVE UP AND TAPE MAX DASD+ONLINE @VM01054 00381000 CONTAIN MVI MONSUSCT,X'02' INDICATE PASS 2 IN PROGRESS @V2B2638 00382000 STH R0,MONDVNUM SAVE THE NUMBER OF DEVICES @V2B2638 00383000 CALL DMKFREE GO GET THE STORAGE @V2B2638 00386000 ST R1,MONDVLST SAVE FOR LATER @V2B2638 00387000 LR R10,R1 SET FOR PASS 2 @V2B2638 00388000 LR R4,R1 ADDR OF DEV LIST IN EVEN REG @V60BEBC 00388150 LR R5,R0 LENGTH TIMES 8 FOR CLEAR @V60BEBC 00388300 SLL R5,3 NUMBER OF BYTES FOR MVCL @V60BEBC 00388450 SLR R1,R1 PAD AND COUNT IS 0 @V60BEBC 00388600 MVCL R4,R0 CLEAR DEVICE LIST @V60BEBC 00388750 LA R0,MNCLDAST SIMULATE DASTAPE CLASS @VM01017 00389000 STH R0,MONCLASS @VM01017 00390000 LA R0,MNCODASH @VM01017 00391000 ST R0,MONCODE @VM01017 00392000 LH R1,MONDVNUM GET THE NUMBER OF DEVICES @V2B2638 00393000 MH R1,=AL2(MN600DLN) TIMES NO OF BYTES FOR EACH @V2B2638 00394000 LA R0,MN600HLN(R1) PLUS CNT FLD LENGTH, -> R0 @V2B2638 00395000 CALL DMKMONPR GO GET THE BUFFER SPACE @V4075A4 00396000 LR R15,R1 GIVE R15 THE CURRENT POINTER @VA13063 00396300 LH R0,MONDVNUM GET THE NUMBER OF DEVICES @VA13063 00396600 LTR R1,R1 DO WE HAVE A BUFFER? @VA13063 00396900 BZ SECPASS NO - GO WITHOUT IT @VA13063 00397200 USING MN600HDR,R1 @VA13063 00397500 STH R0,MN600NUM INTO 6.00 REC AND KEEP FOR SCAN @V2B2638 00399000 LA R15,MN600HLN(R1) ADJUST CURRENT POINTER @V2B2638 00400000 B SECPASS AND GO DO PASS 2 STUFF @V2B2638 00401000 DROP R6,R7 @V2B2638 00402000 SPACE 5 00403000 TESTTYPE TM RDEVTYPC,X'00' CHK FOR DASD + TAPE OR DASD ONLY @V2B2638 00404000 EJECT 00405000 *. 00436000 * 00437000 * ENTRY POINT - 00438000 * 00439000 * DMKMNISH - SHUTDOWN THE MONITOR 00440000 * 00441000 * ENTRY CONDITIONS - 00442000 * 00443000 * THE MONITOR TAPE MUST NOT BE BUSY. 00444000 * 00445000 * GPR1 - ADDRESS OF A CPEXBLOK WHOSE ADDRESS IS IN MONCOM 00446000 * GPR9 - ADDRESS OF COMMUNICATIONS AREA 00447000 * GPR12 - ADDRESS OF ENTRY POINT 00448000 * GPR13 - ADDRESS OF STANDARD SAVE AREA 00449000 * 00450000 * EXIT CONDITIONS - 00451000 * 00452000 * NONE 00453000 * 00454000 * OPERATION - 00455000 *  00456000 * MONITOR SHUTDOWN (STOP) PROCESSING 00457000 * 00458000 * DMKMNISH: 00459000 * 00460000 * OBTAIN A CPEXBLOK AND SAVE ALL REGS IN IT. 00461000 * 00462000 * SET THE CPEXADD VALUE IN THE CPEXBLOK TO THE RETURN 00463000 * ADDRESS IN THIS ROUTINE. THEN EXIT BACK TO DMKMCC 00464000 * FOR THE 'COMMAND COMPLETE' MESSAGE. 00465000 * 00466000 * WHEN CONTROL IS RETURNED VIA THE STACKED CPEXBLOK, 00467000 * IF THE TAPE IS STILL NOT IN ERROR RECOVERY OR BUSY, 00468000 * THEN GO TO THE TRAILER RECORD ROUTINE DMKMNISH. 00469000 * (OTHERWISE, RETURN TO THE DISPATCHER.) 00470000 * 00471000 * FROM THERE THE TRAILER RECORDS WILL BE CREATED AND 00472000 * WRITTEN TO TAPE, THE TAPE WILL BE REWOUND UNLOADED 00473000 * AND RELEASED, AND FINAL CLEANUP OF THE MONITOR WILL 00474000 * BE PERFORMED. 00475000 * 00476000 *. 00477000 DMKMNISH RELOC THE USUAL STARTER @V2B2638 00478000 USING CPEXBLOK,R1 CPEXBLOK PASSED IN R1 @V2B2638 00479000 LA R0,CPEXSIZE SIZE OF CPEXBLOK @VM01004 00480000 CALL DMKFREE GO GET ONE... @VM01004 00481000 LA R2,SHRETN RETURN VIA CPEXBLOK IN A MOMENT @VM01004 00482000 ST R2,CPEXADD SET UP ACCORDINGLY @V2B2638 00483000 L R10,MONAIOB IOB ADDR -> R10 FOR TRAILER RTN. @V2B2638 00484000 USING IOBLOK,R10 ESTABLISH ADDRESSABILITY @V4075A4 00485000 STM R0,R15,CPEXR0 SAVE REGS FOR LATER RETURN @VM01004 00486000 CALL DMKSTKCP GO STACK THIS CPEXBLOK @VM01004 00487000 LR R2,R12 ADDR OF DMKMNI IN R2 FOR LOCK 00488000 CALL DMKPTRLK LOCK THIS MODULE FOR CPEX RETURN 00489000 EXIT AND RETURN TO MCC FOR CMD COMP. @V4075A4 00490000 SPACE 2 00491000 SHRETN TM MONFLAG1,ERROR+TRUN OK TO CONTINUE? 00492000 BNZ GOTO NOPE, SYSTEM WILL DO THE REST @VM01004 00493000 L R0,MONIOBF IS TAPE BUSY? @V4075A4 00494000 LTR R0,R0 NON-ZERO VALUE MEANS IT IS @V4075A4 00495000 BNZ GOTO BUSY, SYSTEM WILL DO THE REST @V4075A4 00496000 BAL R7,TRAILER WRITE MONITOR TRAILER RECORD 00497000 B GOTO EXIT TO DISPATCHER 00498000 DROP R1 @V2B2638 00499000 EJECT 00500000 *. 00501000 * 00502000 * 00503000 * ENTRY POINT - 00504000 * 00505000 * DMKMNITR - WRITE MONITOR TRAILER RECORD 00506000 * 00507000 * ENTRY CONDITIONS - 00508000 * 00509000 * GPR9 - ADDRESS OF MONCOM 00510000 * GPR12 - ADDRESS OF ENTRY POINT 00511000 * GPR13 - ADDRESS OF STANDARD SAVE AREA 00512000 * 00513000 * EXIT CONDITIONS - 00514000 * 00515000 * NONE 00516000 * 00517000 * OPERATION - 00518000 * 00519000 * MONITOR TAPE TRAILER PROCESSING 00520000 * TRAILER: 00521000 * INDICATE A CLASS 0 CODE 98 MONITOR CALL (TRAILER 00522000 * RECORD) IN PSA. OBTAIN AND INITIALIZE STORAGE FOR 00523000 * THE RECORD; INITIALIZE THE IOB FOR REUSE. SET UP 00524000 * THE CCW'S FOR A WRITE, WTM AND RUN SEQUENCE; SET 00525000 * THE 'TRUN' FLAG. CALCULATE THE LAST BUFFER SIZE 00526000 * AND LINK TO THE TAPE I/O MANAGER TO INITIATE THE 00527000 * FINAL TAPE I/O SEQUENCE. RETURN TO THE CALLER. 00528000 * ON RECEIVING THE FINAL I/O INTERRUPT FROM THE TAPE, 00529000 * DMKMNI WILL BE RE-ENTERED AT DMKMNIFI TO CLEAN UP THE 00530000 * MONITOR'S RESOURCES. 00531000 * 00532000 * FRETIOB: 00533000 * IF THERE IS AN IOERBLOK, THEN FRET IT. FRET THE 00534000 * IOB. (IF THE IOB IS THE ONE USED FOR THE MONITOR 00535000 * THEN ADJUST THE SIZE ACCORDINGLY). RETURN TO THE 00536000 * CALLER. 00537000 * 00538000 *. 00539000 DMKMNITR RELOC @V4075A4 00540000 LA R7,EXITT SET RETURN ADDRESS 00541000 SPACE 00542000 TRAILER LA R0,MNCLPERF DUMMY UP A TRAILER CALL, CL 0 @VM01017 00543000 STH R0,MONCLASS ... @VM01017 00544000 LA R0,MNCOTT TRAILER CODE @VM01017 00545000 ST R0,MONCODE ... @V2B2638 00546000 LA R0,MN098LEN LENGTH OF TRAILER RECORD @V2B2638 00547000 TM MONFLAG3,SPOOLED ARE WE SPOOLED @V50A2B5 00548000 BNO CONTIN1 NO @V50A2B5 00549000 TM MONFLAG3,CLSUS AND CLOSE SUSPENDED? @V50A2B5 00550000 BO RETN YES, GET OUT @V50A2B5 00551000 CONTIN1 EQU * @V50A2B5 00552000 CALL DMKMONPR CALL PREPREC ROUT IN DMKMON V2B2638 00553000 LTR R1,R1 @VA10215 00553300 BZR R7 @VA10215 00553600 L R15,MONIOBF MONITOR I/O BUFFER NONZERO WHEN @V4M0238 00554000 * I/O IS IN PROGRESS. @V4M0238 00555000 LTR R15,R15 WAS CURRENT BUFFER FULL ? @V4M0238 00556000 BNZR R7 YES - DMKMONIO WILL FORCE RENTRY @V4M0238 00557000 * TO DMKMNITR AFTER I/O COMPLETES. @V4M0238 00558000 USING MN098,R1 ADDRESS THE TRAILER RECORD @V2B2638 00559000 MVC MN098UID,MONUSER TRACK WHO SAID IT @V2B2638 00560000 TM MONFLAG3,SPOOLED ARE WE SPOOLED @V50A2B5 00561000 BNO RESMTR NO, RESUME TRAILER @V50A2B5 00562000 CALL DMKMIACC CLOSE UP THE SPOOL FILE @V50A2B5 00563000 * MNIFI WILL BE CALLED FROM MIACC @V50A2B5 00564000 RETN BR R7 @V50A2B5 00565000 RESMTR EQU * @V50A2B5 00566000 LA R1,IOBSIZE*8(R10) GET THE WRITE CCW @V2B2638 00567000 OI 4(R1),CC COMMAND CHAIN IT TO WTM, RUN @V2B2638 00568000 ST R1,IOBCAW MAKE SURE WE HAVE THE RIGHT CCW @V2B2638 00569000 L R4,MONCURBF GET THE SIZE OF THE CURRENT PAGE @V2B2638 00570000 * IN BYTES. 00571000 L R8,PREFIXA SETUP FOR ABSOLUTE 0 REFERENCE @V4M0163 00572000 L R2,MONNEXT(R8) NXT SLOT IN BUFFER. @V4M0163 00573000 SR R2,R4 ... @V2B2638 00574000 SLL R2,16 PUT IN UPPER HALF @V2B2638 00575000 ST R2,0(R4) PUT IN PAGE HEADER (V FORMAT) @V2B2638 00576000 SRL R2,16 SHUFFLE BACK DOWN FOR STH @V2B2638 00577000 STH R2,IOBSIZE*8+6(R10) PUT BYTE COUNT INTO CCW @V2B2638 00578000 ST R4,IOBSIZE*8(R10) SET UP THE CCW DATA ADDRESS @V2B2638 00579000 MVI IOBSIZE*8(R10),X'01' REPLACE THE OP CODE @V2B2638 00580000 OI MONFLAG1,TRUN WTM-RUN DONE+ TAPE NOW BUSY @V2B2638 00581000 ST R4,MONIOBF INDICATE TAPE NOW BUSY @V4075A4 00582000 CALLIOS XC IOBFLAG(2),IOBFLAG CLEAR THE IOB FOR REUSE @V4075A4 00583000 L R8,MONARDB ADDRESS OF THE RDEVBLOK @V4075A4 00584000 CALL DMKIOSQR QUEUE THE I/O REQUEST @V4075A4 00585000 BR R7 RETURN TO CALLER 00586000 SPACE 00587000 EXITT EXIT RETURN TO EXTERNAL CALLER 00588000 SPACE 5 00589000 FRETIOB ST R5,IOBMISC2 SAVE THE RETURN ADDRESS @V2B2638 00590000 BAL R5,FRETIOER DROP THE IOERBLOK IF ONE EXISTS @V2B2638 00591000 L R5,IOBMISC2 RELOAD THE RETURN ADDRESS @V2B2638 00592000 LA R1,0(R10) CLEAR HI BYTE AND MOVE TO R1 @V2B2638 00593000 LA R0,IOBSIZE GET SIZE OF STANDARD IOB @V2B2638 00594000 C R1,MONAIOB IS THIS THE MONITOR BASE IOB? @V2B2638 00595000 BNE STDIOB NO, STANDARD IOB SIZE @V2B2638 00596000 LA R0,IOBSIZE+4 SET FOR IOB + CCW'S @V2B2638 00597000 STDIOB CALL DMKFRET RETURN THE STORAGE @V2B2638 00598000 BR R5 RETURN TO CALLER @V2B2638 00599000 SPACE 3 00600000 FRETIOER L R1,IOBIOER GET THE IOER ADDRESS @V2B2638 00601000 LTR R1,R1 IS THERE ONE? @V2B2638 00602000 BZR R5 NOPE, RETURN @V2B2638 00603000 LA R0,IOERSIZE GET THE CORRECT SIZE @V2B2638 00604000 CALL DMKFRET FRET THE IOERBLOK @V2B2638 00605000 SLR R1,R1 CLEAR THE IOB POINTER @V2B2638 00606000 ST R1,IOBIOER ... @V2B2638 00607000 BR R5 RETURN TO CALLER @V2B2638 00608000 EJECT 00609000 *. 00610000 * 00611000 * ENTRY POINT - 00612000 * 00613000 * DMKMNIFI - CLEAN UP MONITOR RESOURCES 00614000 * 00615000 * ENTRY CONDITIONS - 00616000 * 00617000 * GPR9 - ADDRESS OF MONCOM 00618000 * GPR12 - ADDRESS OF ENTRY POINT 00619000 * GPR13 - ADDRESS OF STANDARD SAVE AREA 00620000 * 00621000 * EXIT CONDITIONS - 00622000 * 00623000 * NONE 00624000 * 00625000 * OPERATION - 00626000 * 00627000 * MONITOR CLEANUP PROCESSING 00628000 * 00629000 * FINISHUP: 00630000 * 00631000 * FRET THE BACK POCKET CPEXBLOK. 00632000 * 00633000 * FRET THE IOB VIA A LINK TO STEP FRETIOB. 00634000 * 00635000 * RELEASE THE TAPE DRIVE. 00636000 * 00637000 * IF THERE IS AN ACTIVE TRB, DEQUEUE AND FRET IT. 00638000 * 00639000 * IF THERE IS A DEVICE LIST, THEN FRET IT. 00640000 * 00641000 * CALL DMKPTRFT TO RETURN THE BUFFER PAGES. 00642000 * 00643000 * SET THE MONITOR BUFFER POINTERS IN PSA TO ZERO. 00644000 * 00645000 * FRET THE MONCOM BLOCK. 00646000 * 00647000 * SET THE MONITOR VALUES AND POINTERS IN DMKPRG TO ZERO. 00648000 * 00649000 * CALL DMKPTRUL TO UNLOCK THIS PAGE. 00650000 * 00651000 * IF THERE WAS A STACKED CPEXBLOK ON MONCOM, THE 00652000 * STACK IT ON THE DISPATCHERS CPEXBLOK QUEUE. GO 00653000 * TO THE DISPATCHER. 00654000 * 00655000 *. 00656000 DMKMNIFI RELOC @V4075A4 00657000 TM MONFLAG3,SPOOLED ARE WE SPOOLED @V50A2B5 00658000 BO UNLOKMON YES, THEN UNLOCK MONITOR @V50A2B5 00659000 SVC 16 RETURN CALLER'S SAVE AREA AND @V4075A4 00660000 * UNLOCK DMKMON 00661000 B FINISHUP SKIP EXPLICIT DMKMON UNLOCK 00662000 SPACE 00663000 UNLOKMON L R2,=A(DMKPRGMI) GET POINTER TO ADDR OF DMKMON 00664000 L R2,0(R2) GET ADDR OF DMKMON 00665000 CALL DMKPTRUL UNLOCK IT @V4075A4 00666000 FINISHUP EQU * @VA07357 00667000 L R14,=A(DMKDSPNP) ADDR OF SYSTEM PAGEABLE PGE CNT@VA07357 00668000 L R15,0(R14) TOTAL PAGEABLE PAGES @VA07357 00669000 LA R15,1(R15) PLUS 1 FOR UNLOCK OF DMKMON @VA07357 00670000 ST R15,0(R14) SAVE NEW TOTAL @VA07357 00671000 SPACE 00672000 SLR R3,R3 ZILCH R3 FOR QUICK STORES @VA07357 00673000 TM MONFLAG3,SPOOLED ARE WE SPOOLED @V50A2B5 00674000 BO CONFRET CONTINUE WITH THE FRET @V50A2B5 00675000 LTR R10,R10 MAKE SURE R10 IS OK @V50A2B5 00676000 BZ CONTFI @V50A2B5 00677000 CONFRET EQU * @V50A2B5 00678000 L R1,IOBMISC ADDR OF THE BACK POCKET CPEXBLOK @V2B2638 00679000 LA R0,CPEXSIZE SIZE TO RELEASE @V2B2638 00680000 CALL DMKFRET AND RETURN IT. @V2B2638 00681000 L R6,IOBMISC2 GET DEFERRED RETN ADDR FOR SHUT @VM01004 00682000 BAL R5,FRETIOB RETURN THE IOB @V2B2638 00683000 CONTFI EQU * @V50A2B5 00684000 ST R3,MONAIOB NO MORE IOB @V2B2638 00685000 TM MONFLAG3,SPOOLED ARE WE SPOOLED @V50A2B5 00686000 BNO DODEV NO, WORK WITH DEVICE @V50A2B5 00687000 L R6,FFS SET R6 SPECIAL @V50A2B5 00688000 B NODEV @V50A2B5 00689000 DODEV EQU * @V50A2B5 00690000 L R8,MONARDB ADDRESS OF THE TAPE RDEVBLOK @V2B2638 00691000 USING RDEVBLOK,R8 @V2B2638 00692000 NI RDEVFLAG,255-RDEVSYS NOMORE IN USE BY SYS @V2B2638 00693000 DROP R8 @V2B2638 00694000 NODEV EQU * @V50A2B5 00695000 L R1,MONATRB GET THE TRB ADDRESS @V2B2638 00696000 LTR R1,R1 IS THERE ONE? @V2B2638 00697000 BZ CKDAS NOPE, GO CHECK DASTAP @V2B2638 00698000 CALL DMKSCHRT REMOVE IT FROM THE CHAIN @V2B2638 00699000 LA R0,TRQBSIZE AND THROW IT AWAY @V2B2638 00700000 CALL DMKFRET ... @V2B2638 00701000 ST R3,MONATRB ZILCH THE OLD POINTER @V2B2638 00702000 CKDAS L R1,MONUTRB GET ADDR OF UTILIZATION TRB @V60BEBC 00703000 LTR R1,R1 IS THERE ONE? @V60BEBC 00703080 BZ FREEDLST NO UTILIZATION, CHECK DEV LIST @V60BEBC 00703160 CALL DMKSCHRT REMOVE TRB FROM CHAIN @V60BEBC 00703240 LA R0,TRQBSIZE ..... @V60BEBC 00703320 CALL DMKFRET AND THROW IT AWAY @V60BEBC 00703400 ST R3,MONUTRB ZILCH THE POINTER TO UTILIZATIO@V60BEBC 00703480 L R1,MONCHPTR POINT TO CHANNEL SAMPLE FIELDS @V60BEBC 00703560 LA R0,MNCHSIZE SIZE IN DOUBLE WORDS @V60BEBC 00703640 CALL DMKFRET FREE SAMPLE FIELDS @V60BEBC 00703720 ST R3,MONCHPTR ZILCH THE POINTER TO SAMPLE FIE@V60BEBC 00703800 FREEDLST L R1,MONDVLST IS THERE A DEVICE LIST? @V60BEBC 00703880 LTR R1,R1 ... @V2B2638 00704000 BZ FRETBUFS NOPE, GO DUMP CORE BUFFERS @V2B2638 00705000 LH R0,MONDVNUM NUMBER OF DEVICES @V2B2638 00706000 CALL DMKFRET THROW IT AWAY @V2B2638 00709000 ST R3,MONDVLST NO MORE DEVICE LIST @V2B2638 00710000 FRETBUFS EQU * @VA07357 00711000 L R15,ASYSVM GET SYSTEM VMBLOK @V50A2B5 00712000 LCTL C1,C1,VMSEG-VMBLOK(R15) FOR CORRECT SEG TABLE @V50A2B5 00713000 SR R4,R4 CLEAR INDEX REGISTER @VA07357 00714000 L R5,ACORETBL ADDRESS OF SYSTEM CORE TABLE @VA07357 00715000 FREPAGE EQU * @VA07357 00716000 L R7,MONBUF1(R4) ADDRESS OF BUFFER TO RELEASE @VA07357 00717000 LTR R7,R7 LAST ENTRY ? @VA07357 00718000 BM PSACLEAN YES - CLEAR PSA MONITOR DATA @VA07357 00719000 SRL R7,8 INDEX TO CORETABLE ENTRY @VA07357 00720000 AR R7,R5 LOCATE ENTRY TO BE FREED @VA07357 00721000 USING CORTABLE,R7 @V2B2638 00722000 NI CORFLAG,255-CORCP NOT A CP PAGE ANYMORE @V2B2638 00723000 L R2,MONBUF1(R4) LOAD IN REAL BUFFER ADDRESS @V50A2B5 00724000 L R1,MONBUF1V(R4) LOAD IN VIRTUAL BUFFER ADDRESS @V50A2B5 00725000 CALL DMKPTRUL UNLOCK THE PAGE @V50A2B5 00726000 CALL DMKPGTVR RELEASE THE PAGE @V50A2B5 00727000 LA R4,8(R4) BUMP TO NEXT SLOT @V50A2B5 00728000 L R14,=A(DMKDSPNP) GET PAGEABLE SLOT @V50A2B5 00729000 L R15,0(R14) LOAD IT IN @V50A2B5 00730000 LA R15,1(R15) BUMP IT UP @V50A2B5 00731000 ST R15,0(R14) AND STORE IT @V50A2B5 00732000 B FREPAGE GO DO IT AGAIN @V2B2638 00733000 PSACLEAN EQU * @V4M0163 00734000 L R1,PREFIXA CURRENT PREFIX TO REFERENCE ABS 0@V4M0163 00735000 ST R3,PAGEND(R1) CLEAR PAGEND IN ABSOLUTE 0 @V4M0163 00736000 ST R3,PAGECUR(R1) CLEAR PAGECUR IN ABSOLUTE 0 @V4M0163 00737000 ST R3,PAGENXT(R1) CLEAR PAGENXT IN ABSOLUTE 0 @V4M0163 00738000 ST R3,MONNEXT(R1) CLEAR MONNEXT IN ABSOLUTE 0 @V4M0163 00739000 LR R1,R9 ADDR OF THE MONCOM @V2B2638 00740000 LA R0,MONSIZE SIZE OF THE COMMUNICTION AREA @V2B2638 00741000 LA R4,7(R4) ENSURE DOUBLEWORD IS RELEASED @VA07357 00742000 AR R0,R4 MONSIZE + MONBUF1 AREA @VA07357 00743000 SRL R0,3 CONVERT TO NO. DOUBLEWORDS @VA07357 00744000 CALL DMKFRET DUMP THAT TOO. @V2B2638 00745000 DROP R7,R10 @VA08888 00746500 L R1,=A(DMKPRGMC) ADDR OF MONCOM @V2B2638 00747000 ST R3,0(,R1) NO MORE @V2B2638 00748000 L R1,=A(DMKPRGTI) ADDR OF INTERVAL @V2B2638 00749000 STH R3,0(,R1) NO MORE @V2B2638 00750000 ST R3,CPCREG8 ZERO PSA VALUE @VA11128 00750200 L R2,PREFIXB GET OTHER PSA @VA11128 00750400 ST R3,CPCREG8(R2) ZERO IT AS WELL @VA11128 00750600 L R1,=A(DMKPRGC8) ENABLED VALUE @V2B2638 00751000 STCTL C8,C8,0(R1) STORE CR8 @VA09647 00752000 CLC 0(4,R1),ZEROES IS CR8 ZERO? @VA09647 00752100 BE FINCLEAN YES - CONTINUE @VA09647 00752200 LCTL C8,C8,ZEROES ZERO CR8 @VA09647 00752300 ST R3,0(,R1) NO MORE @VA09647 00752400 LA R0,NOENABLN SET MSG LENGTH @VA09647 00752500 LA R1,NOENAB POINT TO MSG @VA09647 00752600 CALL DMKQCNWT,PARM=NORET @VA09647 00752700 FINCLEAN EQU * @VA09647 00752800 L R1,=A(DMKPRGMI) ADDR OF THIS ROUTINE @V2B2638 00753000 ST R3,0(R1) NO MORE @V2B2638 00754000 LA R3,DEFINTVL N SECOND DEFAULT FOR I/O UTILIZ@V60BEBC 00754250 L R1,=A(DMKENTUT) ADDR OF DEV UTILIZATION INTERVA@V60BEBC 00754500 STH R3,0(R1) SAVE DEFAULT @V60BEBC 00754750 LTR R6,R6 ARE WE HERE FROM SHUTDOWN CMD? @VM01004 00755000 BZ GOTO NOPE, NORMAL MONITOR STOP @VM01066 00756000 C R6,FFS CHECK IF THIS IS MONITOR @V50A2B5 00757000 BE STDEXIT YES, EXIT @V50A2B5 00758000 USING CPEXBLOK,R6 ADDRESS THE BLOCK @VM01066 00759000 LM R0,R15,CPEXR0 LOAD UP FOR RETURN TO SHUTDOWN @VM01066 00760000 BR R14 AND RETURN THERE NOW. @VM01066 00761000 DROP R6 DEADDRESS THE BLOCK @VM01066 00762000 SPACE 1 00763000 STDEXIT EXIT @V50A2B5 00764000 SPACE 00765000 GOTO LR R2,R12 ADDR OF DMKMNI IN R2 FOR UNLOCK 00766000 CALL DMKPTRUL UNLOCK THIS MODULE 00767000 TM MONEX,CLCMD SHUTDOWN OR MONITOR STOP? @VA08888 00767100 BO GOTODSP YES, LEAVE PAGE COUNT ALONE @VA08888 00767150 TM MONFLAG3,SPOOLED ARE WE SPOOLED? @VA08888 00767200 BNO GOTODSP I SAID LEAVE IT ALONE @VA08888 00767250 N R2,XPAGNUM GET PAGE NUMBER @VA08888 00767300 SRL R2,8 DIVIDED BY 256 @VA08888 00767350 A R2,ACORETBL POINT TO CORETABLE ENTRY @VA08888 00767400 USING CORTABLE,R2 @VA08888 00767450 L R0,CORLCNT IF LOCKCOUNT NONZERO LEAVE AND.. @VA08888 00767500 LTR R0,R0 DONT INCREMENT AVAILABLE.. @VA08888 00767550 BP GOTODSP PAGE COUNT THIS TIME @VA08888 00767600 L R14,=A(DMKDSPNP) GET AVAILABLE PAGE COUNT @VA08888 00767650 L R15,0(R14) LOAD IT IN @VA08888 00767700 LA R15,1(R15) BUMP IT UP @VA08888 00767750 ST R15,0(R14) AND STORE IT @VA08888 00767800 DROP R2,R9 @VA08888 00767850 GOTODSP GOTO DMKDSPCH LET DISPATCHER FIND SOMTIN' TODO @V2B2638 00768000 EJECT 00769000 *. 00770000 * 00771000 * ENTRY POINT - 00772000 * 00773000 * DMKMNISP 00774000 * 00775000 * ENTRY CONDITIONS - 00776000 * 00777000 * NONE 00778000 * 00779000 * EXIT CONDITIONS - 00780000 * 00781000 * REGISTER 2 CONTAINS RETURN CODE 00782000 * 0 - NORMAL RETURN 00783000 * 5 - BUFFS PARSED OUT OF COMMAND BUFFER 00784000 * OTHER - ERROR 00785000 * 00786000 * EXTERNAL REFERENCES - 00787000 * 00788000 * DMKSYSUR - SPOOL MONITOR DEFAULT USER 00789000 * 00790000 * DMKUDRFU - VM ID IDENTIFIER 00791000 * 00792000 * REGISTER USAGE 00793000 * 00794000 * R9 - ADDRESS OF COMMAND BUFFER AREA 00795000 * R11 - ADDRESS OF VMBLOK OF USER 00796000 * R12 - ADDRESSABILITY 00797000 * R13 - SAVEAREA 00798000 * 00799000 * FUNCTION - 00800000 * TO VERIFY THAT THE USER IN THE DMKSYS AREA IS VALID FOR 00801000 * USAGE OF SPOOL MONITOR 00802000 * 00803000 *. 00804000 SPACE 1 00805000 USING VMBLOK,R11 00806000 USING SAVEAREA,R13 00807000 * @V50A2B5 00808000 DMKMNISP RELOC @V50A2B5 00809000 SR R2,R2 FIRST SET @V50A2B5 00810000 ST R2,SAVER2 SAVER2 TO NO ERROR @V50A2B5 00811000 CALL DMKSCNFD GET THE NEXT FIELD @V50A2B5 00812000 BNZ USEDFLT USE DEFAULT USER @V50A2B5 00813000 CL R0,F2 LEGAL LENGTH @V50A2B5 00814000 BNE CHKBFS NOT AT ALL @V50A2B5 00815000 CLC 0(2,R1),=C'TO' SHOULD BE TO @V50A2B5 00816000 BNE MSG002 NOT AT ALL @V50A2B5 00817000 CALL DMKSCNFD GET THE SUPPOSED USERID @V50A2B5 00818000 BNZ MSG002 MUST BE THERE @V50A2B5 00819000 CHKUSR EQU * @V50A2B5 00820000 LR R5,R1 REGISTER 5 USED IN MOVE @V50A2B5 00821000 CL R0,F1 SEE IF * SPECIFIED @V50A2B5 00822000 BNE SYNCHK NO CONTINUE @V50A2B5 00823000 CLI 0(R1),C'*' IS IT * @V50A2B5 00824000 BNE SYNCHK NO CONTINUE @V50A2B5 00825000 LA R5,VMUSER USER THIS USER @V50A2B5 00826000 LA R0,8(R0) INIT COUNTER @V50A2B5 00827000 B STORUSR WORK WITH USER @V50A2B5 00828000 SYNCHK EQU * @V50A2B5 00829000 CL R0,F8 LEGAL LENGTH @V50A2B5 00830000 BH MSG002 NO, SEND MESSAGE @V50A2B5 00831000 SR R2,R2 PREPARE TO VERIFY USER @V50A2B5 00832000 CALL DMKUDRFU VERIFY THE USER @V50A2B5 00833000 BNZ MSG225 NO SUCH PERSON EXISTS @V50A2B5 00834000 STORUSR L R2,=A(DMKSYSUR) STORE FOR THE USERID @V50A2B5 00835000 LR R3,R0 GET LENGTH @V50A2B5 00836000 BCTR R3,R0 DOWN FOR EXECUTE @V50A2B5 00837000 MVC 0(8,R2),BLANKS FILL IN BLANKS @V50A2B5 00838000 EX R3,STORUID STORE IN USERID @V50A2B5 00839000 SR R8,R8 BLANK OUT VDEV FIELD @V50A2B5 00840000 SAFEXIT EQU * @V50A2B5 00841000 B EXITS EXIT @V50A2B5 00842000 USEDFLT EQU * @V50A2B5 00843000 L R1,=A(DMKSYSUR) GET LENGTH OF USER AREA @V50A2B5 00844000 LR R2,R1 KEEP IN REGISTER 2 @V50A2B5 00845000 LA R3,8 SET COUNTER AT 8 @V50A2B5 00846000 LP CLI 0(R2),C' ' CHECK FOR BLANK @V50A2B5 00847000 BE ENDLP YES, CONTINUE @V50A2B5 00848000 LA R2,1(R2) BUMP UP ADDRESS @V50A2B5 00849000 BCT R3,LP KEEP LOOPING IF NECESSARY @V50A2B5 00850000 ENDLP SR R2,R1 COMPUTE LENGTH @V50A2B5 00851000 LR R0,R2 GET READY TO @V50A2B5 00852000 SR R2,R2 VERIFY @V50A2B5 00853000 CALL DMKUDRFU THE USER @V50A2B5 00854000 BNZ MSG225 HE DOES NOT EXIST @V50A2B5 00855000 B SAFEXIT EXIT @V50A2B5 00856000 STORUID MVC 0(0,R2),0(R5) MOVE OF INFORMATION @V50A2B5 00857000 SPACE 1 00858000 MSG002 LA R2,2 ILLEGAL OPERAND @V50A2B5 00859000 B CALLERM CALL ERROR MESSAGE @V50A2B5 00860000 SPACE 1 00861000 MSG225 LA R2,225 ILLEGAL MONITOR USERID @V50A2B5 00862000 SR R1,R1 ZIP OUT REGISTER ONE @V50A2B5 00863000 B CALLERM CALL ERROR MESSAGE ROUTINE @V50A2B5 00864000 SPACE 1 00865000 CALLERM ICM R0,B'1110',MODID+3 MONITOR ID FOR MESSAGE @V50A2B5 00866000 ST R2,WORK2 SET UP REGISTER 2 @V50A2B5 00867000 ST R2,SAVER2 DO SO MONITOR DOES NOT START@V50A2B5 00868000 MVI WORK2,X'80' INDICATE RETURN HERE @VA08679 00869000 L R2,WORK2 REG 2 COMPLETE @V50A2B5 00870000 CALL DMKERMSG CALL MESSAGE ROUTINE @VA08679 00871000 EXITS EXIT EXIT @V50A2B5 00872000 SPACE 1 00873000 CHKBFS CL R0,F5 MIGHT BE BUFFS @V50A2B5 00874000 BNE MSG002 NOPE @V50A2B5 00875000 CLC 0(5,R1),=C'BUFFS' IS IT BUFFS @V50A2B5 00876000 BNE MSG002 NO @V50A2B5 00877000 MVC SAVER2(4),F5 IT IS, SET PROPER RETURN @V50A2B5 00878000 B USEDFLT CONTINUE @V50A2B5 00879000 EJECT 00880000 *. 00881000 * 00882000 * ENTRY POINT - 00883000 * 00884000 * DMKMNIDS 00885000 * 00886000 * ENTRY CONDITIONS - 00887000 * 00888000 * NONE 00889000 * 00890000 * EXIT CONDITIONS - 00891000 * 00892000 * NONE 00893000 * 00894000 * EXTERNAL REFERENCES - 00895000 * 00896000 * DMKQCNWT - MESSAGE ROUTINE 00897000 * DMKSYSAT - SPOOL MONITOR ENVIRONMENT DEFAULTS 00898000 * DMKSYSUR - SPOOL MONITOR DEFAULT USER 00899000 * DMKSYSMX - SPOOL MONITOR SPOOL FILE MAXIMUM 00900000 * DMKSYSTS - SPOOL MONITOR AUTO START TIME 00901000 * DMKSYSTE - SPOOL MONITOR AUTO STOP TIME 00902000 * DMKCVTBD - CONVERT TO BINARY ROUTINE 00903000 * DMKPRGMC - MONITOR COMMUNICATIONS AREA 00904000 * 00905000 * REGISTER USAGE - 00906000 * 00907000 * R10 - MONITOR COMMUNICATIONS AREA 00908000 * R11 - ADDRESS OF VMBLOK OF USER 00909000 * R12 - ADDRESSABILITY 00910000 * R13 - SAVE AREA 00911000 * 00912000 * FUNCTION - 00913000 * 00914000 * TO DISPLAY SPOOL MONITOR INFORMATION 00915000 * 00916000 *. 00917000 SPACE 1 00918000 DMKMNIDS RELOC @V50A2B5 00919000 LA R1,SPLMSG PUT OUT THE SPOOL MESSAGE @V50A2B5 00920000 LA R0,SPLMSGLN GET THE LENGTH @V50A2B5 00921000 CALL DMKQCNWT,PARM=NORET PUT OUT MESSAGE @V50A2B5 00922000 L R5,=A(DMKSYSAT) READ THE BITS HERE @V50A2B5 00923000 MVC AUTDMSG+11(8),ENAB SET TO ENABLE @V50A2B5 00924000 TM 0(R5),AUTGO BUT IF AUTODISK @V50A2B5 00925000 BO *+10 IS NOT ON, @V50A2B5 00926000 MVC AUTDMSG+11(8),DISAB SAY SO @V50A2B5 00927000 MVC AUTXMSG+13(6),NOSTOP SET TO NOSTOP @V50A2B5 00928000 TM 0(R5),AUTOSPL BUT IF AUTOSPOOL @V50A2B5 00929000 BO *+10 IS NOT ON, @V50A2B5 00930000 MVC AUTXMSG+13(6),STOP SAY NO @V50A2B5 00931000 L R5,=A(DMKSYSUR) GET THE USERID MESSAGE @V50A2B5 00932000 MVC AUTUMSG+11(8),0(R5) PUT IN THE USERID @V50A2B5 00933000 L R5,=A(DMKSYSCL) GET INFORMATION FOR THE CLASS @V50A2B5 00934000 MVC AUTCMSG+11(1),0(R5) PUT THIS IN THE MESSAGE @V50A2B5 00935000 L R5,=A(DMKSYSMX) OBTAIN THE SPOOL MAX @V50A2B5 00936000 L R1,0(R5) INTO REGISTER ONE @V50A2B5 00937000 CALL DMKCVTBD CONVERT TO DECIMAL CHARACTERS @V50A2B5 00938000 STM R0,R1,TIMVAL NEED GOOD BOUNDARY FOR INSERT @V50A2B5 00939000 MVC AUTXMSG+6(6),TIMVAL+2 FILL IN THE MESSAGE @V50A2B5 00940000 L R5,=A(DMKSYSTS) GET THE START TIME @V50A2B5 00941000 LM R6,R7,0(R5) @V50A2B5 00942000 LA R5,AUTT1MSG FILL IN THE START TIME @V50A2B5 00943000 BAL R8,SETTIME CALL THE ROUTINE TO DO IT @V50A2B5 00944000 L R5,=A(DMKSYSTE) GET THE END TIME @V50A2B5 00945000 LM R6,R7,0(R5) @V50A2B5 00946000 LA R5,AUTT2MSG FILL IN THE END TIME @V50A2B5 00947000 BAL R8,SETTIME CALL THE ROUTINE TO DO IT @V50A2B5 00948000 LA R8,NOSPLMSG NOW PUT OUT THE MESSAGES @V50A2B5 00949000 LA R0,19 EACH IS 19 BYTES LONG @V50A2B5 00950000 LA R1,MSGSPL GET TO THE BEGINNING @V50A2B5 00951000 OUTMSG CALL DMKQCNWT,PARM=NORET PUT OUT THE MESSAGE @V50A2B5 00952000 LA R1,19(R1) POINT TO NEXT MESSAGE @V50A2B5 00953000 BCT R8,OUTMSG KEEP PUTTING OUT MESSAGES @V50A2B5 00954000 L R10,=A(DMKPRGMC) SEE IF MONITOR IS ON @V50A2B5 00955000 ICM R10,B'1111',0(R10) LOAD IN THE ADDRESS @V50A2B5 00956000 BZ NOBUFMSG NO BUFFER MESSAGE REQUIRED @V50A2B5 00957000 USING MONCOM,R10 @V50A2B5 00958000 L R1,MONSFB SEE IF A SPOOL FILE AROUND @V50A2B5 00959000 LTR R1,R1 TEST IF THERE IS ONE @V50A2B5 00960000 BZ NOBUFMSG NO, NO NEED FOR MESSAGE @V50A2B5 00961000 USING SFBLOK,R1 @V50A2B5 00962000 LH R1,SFBFILID GET THE FILE ID @V50A2B5 00963000 CALL DMKCVTBD CONVERT TO DECIMAL @V50A2B5 00964000 STCM R1,B'1111',FILID KEEP THE FILID @V50A2B5 00965000 DROP R1 @V50A2B5 00966000 L R1,MONSPLCT GET THE NUMBER OF BUFFERS @V50A2B5 00967000 CALL DMKCVTBD CONVERT TO DECIMAL @V50A2B5 00969000 STCM R0,B'1111',BUFFLD @V50A2B5 00970000 STCM R1,B'1111',BUFFLD+4 @V50A2B5 00971000 LA R1,BUFMSG WRITE OUT THE MESSAGE @V50A2B5 00972000 LA R0,BUFMSGSZ @V50A2B5 00973000 CALL DMKQCNWT,PARM=NORET DO THE WRITE @V50A2B5 00974000 LA R2,MONBUF1 COUNT BUFFERS @V50A2B5 00975000 LA R1,1(R0) BUMP BY ONE @V50A2B5 00976000 COMPCONT CLI 8(R2),X'FF' ANY MORE @V50A2B5 00977000 BE NICHTO NO @V50A2B5 00978000 LA R2,8(R2) KEEP COUNTING @V50A2B5 00979000 LA R1,1(R1) BUMP BY ONE @V50A2B5 00980000 B COMPCONT @V50A2B5 00981000 NICHTO CALL DMKCVTBD CONVERT TO BINARY @V50A2B5 00982000 STCM R1,B'0011',AUTBMSG+11 STORE THIS @V50A2B5 00983000 LA R0,L'AUTBMSG GET LENGTH OF MESSAGE @V50A2B5 00984000 LA R1,AUTBMSG GET ADDRESS OF MESSAGE @V50A2B5 00985000 CALL DMKQCNWT,PARM=NORET WRITE OUT THE MESSAGE @V50A2B5 00986000 DROP R10 @V50A2B5 00987000 NOBUFMSG EQU * @V50A2B5 00988000 EXIT @V50A2B5 00989000 SPACE 2 00990000 SETTIME EQU * @V50A2B5 00991000 SRDL R6,12 CONVERT TO SECONDS @V50A2B5 00992000 D R6,=F'1000000' DIVIDE FROM MICRO TO SECS. @V50A2B5 00993000 SR R6,R6 DIVIDE NO OF SECONDS TO HOURS @V50A2B5 00994000 D R6,=F'3600' @V50A2B5 00995000 LR R1,R7 WORK WITH THE HOURS RESULT @V50A2B5 00996000 CALL DMKCVTBD CONVERT TO DECIMAL CHARACTERS @V50A2B5 00997000 STM R0,R1,TIMVAL USE THE GOOD BOUNDARY @V50A2B5 00998000 MVC 11(2,R5),TIMVAL+6 PUT THIS IN THE MESSAGE @V50A2B5 00999000 LR R7,R6 NOW WORK WITH THE REMAINDER @V50A2B5 01000000 SR R6,R6 FIND NUMBER OF MINUTES @V50A2B5 01001000 D R6,=F'60' BY DIVIDING BY 60 @V50A2B5 01002000 LR R1,R7 DO THE CONVERSION AGAIN @V50A2B5 01003000 MVI 13(R5),C':' PUT IN A COLON @V50A2B5 01004000 CALL DMKCVTBD CONVERT TO DECIMAL CHARACTERS @V50A2B5 01005000 STM R0,R1,TIMVAL USE THE GOOD BOUNDARY @V50A2B5 01006000 MVC 14(2,R5),TIMVAL+6 LOAD IN THE MESSAGE @V50A2B5 01007000 BR R8 @V50A2B5 01008000 EJECT 01009000 *. 01010000 * 01011000 * ENTRY POINT - 01012000 * 01013000 * DMKMNIST 01014000 * 01015000 * ENTRY CONDITIONS - 01016000 * 01017000 * GPR11 - ADDRESS OF VMBLOK OF USER 01018000 * GPR13 - SAVE AREA 01019000 * 01020000 * EXIT CONDITIONS - 01021000 * 01022000 * NONE 01023000 * 01024000 * EXTERNAL REFERENCES - 01025000 * 01026000 * DMKCVTAB - DAMAGED CLOCK ROUTINE 01027000 * DMKENTBS - AUTO START TRQ STATUS 01028000 * DMKENTEC - TRQ ENTRY POINT TO END 01029000 * DMKENTES - AUTO END TRQ STATUS 01030000 * DMKENTSC - TRQ ENTRY POINT TO START 01031000 * DMKENTTB - ADDRESS OF TRQ TO AUTO START 01032000 * DMKENTTE - ADDRESS OF TRQ TO AUTO END 01033000 * DMKPRGMC - ADDRESS OF MONCOM AREA 01034000 * DMKSCHRT - ROUTINE TO UNSTACK TRQ 01035000 * DMKSCHST - ROUTINE TO STACK TRQ 01036000 * DMKSTKCP - ROUTINE TO STACK CPEXBLOK 01037000 * DMKSYSAT - MONITOR ENVIRONMENT FLAG 01038000 * DMKSYSTE - MONITOR AUTO END TIME 01039000 * DMKSYSTS - MONITOR AUTO START TIME 01040000 * 01041000 * REGISTER USAGE - 01042000 * 01043000 * GPR6 - ROUTINE LINKAGE 01044000 * GPR10 - ADDRESS OF MONITOR COMMUNICATIONS AREA 01045000 * GPR11 - ADDRESS OF VMBLOK OF USER 01046000 * GPR12 - ADDRESSABILITY 01047000 * GPR13 - SAVE AREA 01048000 * 01049000 * OPERATION - 01050000 * 01051000 * FIRST ALL TRQ FOR MONITOR ARE UNSTACKED IF MONITOR AUTODISK IS 01052000 * NOT ON. BY COMPARING THE MONITOR START TO MONITOR STOP AUTO 01053000 * TIMES, IT IS DETERMINED WHICH TRQS ARE TO UNSTACKED AND STACKE 01054000 * 01055000 *. 01056000 EXTRN DMKCVTAB @VMD0138 01057000 EXTRN DMKENTTB @VMD0138 01058000 EXTRN DMKENTBS @VMD0138 01059000 EXTRN DMKENTTE @VMD0138 01060000 EXTRN DMKENTES @VMD0138 01061000 EXTRN DMKENTST @VMD0138 01062000 EXTRN DMKENTET @VMD0138 01063000 EXTRN DMKSCHST @VMD0138 01064000 EXTRN DMKENTSC @VMD0138 01065000 EXTRN DMKENTEC @VMD0138 01066000 DMKMNIST RELOC @V50A2B5 01067000 L R10,=A(DMKPRGMC) GET THE ADDRESS OF THE @V50A2B5 01068000 L R10,0(R10) MONCOM AREA @V50A2B5 01069000 USING MONCOM,R10 @V50A2B5 01070000 L R3,=A(DMKSYSAT) GET THE AUTO FLAGS @V50A2B5 01071000 TM 0(R3),AUTGO SEE IF AUTO IS ON @V50A2B5 01072000 BO STKBLKS CONTINUE TRQ STACKING LOGIC @V50A2B5 01073000 BAL R6,USTKST UNSTACK ANY START TRQ @V50A2B5 01074000 BAL R6,USTKEN UNSTACK ANY END TRQ @V50A2B5 01075000 B EXITS LEAVE THIS CODE NOW @V50A2B5 01076000 STKBLKS EQU * @V50A2B5 01077000 STCK TIMVL GET CURRENT TIME OF DAY @V50A2B5 01078000 BC 12,CLOCKRT BE SURE CLOCK IS OK @V50A2B5 01079000 GOTO DMKCVTAB CLOCK DAMAGED ABEND CVT001 @V50A2B5 01080000 CLOCKRT EQU * HERE IF CLOCK IS OK @V50A2B5 01081000 L R4,=A(DMKSYSTS) ADDRESS OF TIME START @V50A2B5 01082000 L R5,=A(DMKSYSTE) ADDRESS OF TIME END @V50A2B5 01083000 CLC 0(8,R4),0(R5) SEE IF NONE SPECIFIED @V50A2B5 01084000 BE USTKALL1 YES UNSTACK EVERYTHING @V50A2B5 01085000 CLC 0(8,R4),ZEROES SEE IF FULL DAY ALSO @V50A2B5 01086000 BNE NOTFULL NO, NOT TIME 0 @V50A2B5 01087000 CLC 0(8,R5),SET24 SEE IF END MATCHES @V50A2B5 01088000 BZ USTKALL2 YES, ALSO UNSTACK ALL @V50A2B5 01089000 NOTFULL EQU * @V50A2B5 01090000 LM R2,R3,0(R4) MUST ADD TOD @V50A2B5 01091000 AL R3,TODATE+4 TO START TIME @V50A2B5 01092000 BC 12,*+8 SEE IF A CARRY @V50A2B5 01093000 AL R2,F1 THIS IS A CARRY VALUE @V50A2B5 01094000 AL R2,TODATE FINISH ADDITION @V50A2B5 01095000 STM R2,R3,TIMESTRT STORE THE TIME START @V50A2B5 01096000 LM R2,R3,0(R5) GET THE END TIME @V50A2B5 01097000 AL R3,TODATE+4 ALSO ADD TOD @V50A2B5 01098000 BC 12,*+8 SEE IF A CARRY @V50A2B5 01099000 AL R2,F1 THIS IS A CARRY VALUE @V50A2B5 01100000 AL R2,TODATE FINISH ADDITION @V50A2B5 01101000 STM R2,R3,TIMEEND STORE THE END TIME @V50A2B5 01102000 CLC TIMVL(8),TIMESTRT C.T. > S.T. @V50A2B5 01103000 BH CHECKEND YES @V50A2B5 01104000 BAL R6,USTKST UNSTACK ANY START CONTASK @V50A2B5 01105000 BAL R6,STACKSTR STACK A START @V50A2B5 01106000 B STKEND STACK AN END @V50A2B5 01107000 CHECKEND EQU * CHECK ON THE END TIME @V50A2B5 01108000 CLC TIMVL(8),TIMEEND C.T. < E.T. @V50A2B5 01109000 BL DOSTRT YES @V50A2B5 01110000 LTR R9,R10 DO A SHUTDOWN @V50A2B5 01111000 BZ EXITS ONLY IF ON @V50A2B5 01112000 BAL R6,CPEXEND END MONITOR VIA CPEX @V50A2B5 01113000 B EXITS LEAVE THE CODE @V50A2B5 01114000 DOSTRT EQU * @V50A2B5 01115000 BAL R6,USTKST UNSTACK ANY START TRQ @V50A2B5 01116000 BAL R6,CPEXSTRT DO A CPEXSTART @V50A2B5 01117000 STKEND EQU * @V50A2B5 01118000 BAL R6,USTKEN UNSTACK THE END TRQ @V50A2B5 01119000 BAL R6,STACKEND STACK THE END TRQ @V50A2B5 01120000 B EXITS GO TO EXIT @V50A2B5 01121000 SPACE 1 01122000 USTKST EQU * @V50A2B5 01123000 L R1,=A(DMKENTTB) ADDRESS OF BEGIN BLOCK @V50A2B5 01124000 L R2,=A(DMKENTBS) ADDRESS OF BEGIN STATUS @V50A2B5 01125000 B FLOWRTN BRANCH TO ROUTINE FLOW @V50A2B5 01126000 USTKEN EQU * @V50A2B5 01127000 L R1,=A(DMKENTTE) ADDRESS OF END TRQ @V50A2B5 01128000 L R2,=A(DMKENTES) ADDRESS OF END STATUS @V50A2B5 01129000 FLOWRTN CLI 0(R2),C'S' SEE IF STACKED @V50A2B5 01130000 BNE NOUSTK NO @V50A2B5 01131000 CALL DMKSCHRT UNSTACK IT @V50A2B5 01132000 MVI 0(R2),C'U' SET IN UNSET CONDITION @V50A2B5 01133000 NOUSTK EQU * HERE IS NOT UNSTACKED @V50A2B5 01134000 BR R6 RETURN @V50A2B5 01135000 SPACE 1 01136000 STACKSTR L R1,=A(DMKENTTB) GET A BEGIN TRQ @V50A2B5 01137000 L R2,=A(DMKENTBS) GET THE STATUS BYTE @V50A2B5 01138000 L R7,=A(DMKENTST) THE ENTRY POINT @V50A2B5 01139000 LA R8,TIMESTRT ADDRESS OF TIME START @V50A2B5 01140000 B NOSTACK BRANCH TO THE REAL LOGIC @V50A2B5 01141000 STACKEND L R1,=A(DMKENTTE) GET AN END TRQ @V50A2B5 01142000 L R2,=A(DMKENTES) GET THE END STATUS @V50A2B5 01143000 L R7,=A(DMKENTET) THE ENTRY POINT @V50A2B5 01144000 LA R8,TIMEEND ADDRESS OF THE END TIME @V50A2B5 01145000 NOSTACK EQU * @V50A2B5 01146000 MVI 0(R2),C'S' SAY IT WILL BE STACKED @V50A2B5 01147000 USING TRQBLOK,R1 @V50A2B5 01148000 L R2,ASYSVM OPERATOR DOES OPERATION @V50A2B5 01149000 ST R2,TRQBUSER PUT IN THE USER @V50A2B5 01150000 MVC TRQBVAL(8),0(R8) LOAD IN THE TIME @V50A2B5 01151000 ST R7,TRQBIRA STORE THE ENTRY POINT @V50A2B5 01152000 CALL DMKSCHST SCHEDULE THE TASK @V50A2B5 01153000 DROP R1 @V50A2B5 01154000 BR R6 RETURN @V50A2B5 01155000 SPACE 1 01156000 CPEXSTRT EQU * STACK A CPEX BLOCK TO START @V50A2B5 01157000 L R5,=A(DMKENTSC) GET THE ENTRY POINT @V50A2B5 01158000 B *+8 GET INTO THE REAL LOGIC @V50A2B5 01159000 CPEXEND EQU * @V50A2B5 01160000 L R5,=A(DMKENTEC) END VIA CPEX BLOCK @V50A2B5 01161000 LA R0,CPEXSIZE LOAD SIZE OF CPEXBLOK @V50A2B5 01162000 CALL DMKFREE GET THE STORAGE FOR IT @V50A2B5 01163000 USING CPEXBLOK,R1 @V50A2B5 01164000 STM R0,R15,CPEXR0 STORE THE REGISTERS @V50A2B5 01165000 ST R5,CPEXADD ADDRESS AT WHICH TO START @V50A2B5 01166000 ST R5,CPEXR12 TAKE IN ALSO REGISTER 12 @V50A2B5 01167000 CALL DMKSTKCP STACK THE CPEXBLOCK @V50A2B5 01168000 DROP R1 @V50A2B5 01169000 BR R6 RETURN @V50A2B5 01170000 SPACE 1 01171000 USTKALL1 EQU * @V50A2B5 01172000 BAL R6,USTKST UNSTACK START TRQ @V50A2B5 01173000 BAL R6,USTKEN UNSTACK END TRQ @V50A2B5 01174000 B EXITS AND EXIT @V50A2B5 01175000 SPACE 1 01176000 USTKALL2 EQU * @V50A2B5 01177000 BAL R6,USTKST UNSTACK START TRQ @V50A2B5 01178000 BAL R6,USTKEN UNSTACK END TRQ @V50A2B5 01179000 L R6,=A(DMKPRGMC) SEE IF ALREADY ON @V50A2B5 01180000 ICM R6,B'1111',0(R6) THROUGH THIS LOAD @V50A2B5 01181000 BNZ EXITS YES, SO EXIT @V50A2B5 01182000 BAL R6,CPEXSTRT START IT VIA CPEXBLOK @V50A2B5 01183000 B EXITS AND EXIT @V50A2B5 01184000 DROP R10 @V50A2B5 01185000 EJECT 01186000 TIMVL DS 0D @VMD0138 01187000 DC CL8' ' @VMD0138 01188000 TIMESTRT DC CL8' ' @VMD0138 01189000 TIMEEND DC CL8' ' @VMD0138 01190000 SET24 DC X'000141DD76000000' @VMD0138 01191000 *********************************************************************** 01192000 * 01193000 * CONSTANTS AND WORK AREAS 01194000 * 01195000 *********************************************************************** 01196000 DS 0F @V2B2638 01197000 SPACE 1 01198000 Q1DROP EQU X'40' QUEUE DROP INDICATOR @V2B2638 01199000 WORK2 DS F @V50A2B5 01200000 MSGSPL EQU * @V50A2B5 01201000 AUTDMSG DC CL19'AUTODISK ' @V50A2B5 01202000 AUTT1MSG DC CL19'START TIME ' @V50A2B5 01203000 AUTT2MSG DC CL19'STOP TIME ' @V50A2B5 01204000 AUTXMSG DC CL19'LIMIT ' @V50A2B5 01205000 AUTUMSG DC CL19'USERID ' @V50A2B5 01206000 AUTCMSG DC CL19'FILE CLASS ' @V50A2B5 01207000 NOSPLMSG EQU (*-MSGSPL)/19 @V50A2B5 01208000 AUTBMSG DC CL19'BUFFERS ' @V50A2B5 01209000 SPLMSG DC C'AUTOMATIC MONITORING INFORMATION FOLLOWS' @V50A2B5 01210000 SPLMSGLN EQU *-SPLMSG @V50A2B5 01211000 ENAB DC CL8'ENABLED ' @V50A2B5 01212000 DISAB DC CL8'DISABLED' @V50A2B5 01213000 TIMVAL DS 0D @V50A2B5 01214000 DC CL8' ' @V50A2B5 01215000 BUFMSG EQU * @V50A2B5 01216000 BUFFLD DS XL8 BUFFERS @V50A2B5 01217000 DC C' RECORDS WRITTEN TO SPOOL FILE ' @V50A2B5 01218000 FILID DS XL4 @V50A2B5 01219000 BUFMSGSZ EQU *-BUFMSG @V50A2B5 01220000 STOP DC C'STOP ' @V50A2B5 01221000 NOSTOP DC C'NOSTOP' @V50A2B5 01222000 NOENAB DC C'CANNOT ENABLE - MONITOR IN SHUTDOWN - REENTER ENABLE' 01222300 NOENABLN EQU *-NOENAB @VA09647 01222600 LTORG @V2B2638 01223000 EJECT 01224000 COPY EQU @V2B2638 01225000 COPY ALLOC @V2B2638 01226000 PSA @V2B2638 01227000 COPY MONBLOKS @V2B2638 01228000 COPY VMBLOK @V2B2638 01229000 COPY SAVE @V2B2638 01230000 COPY IOBLOKS @V2B2638 01231000 COPY IOER @V2B2638 01232000 COPY CORE @V2B2638 01233000 COPY DEVTYPES @V2B2638 01234000 COPY RBLOKS @V2B2638 01235000 COPY TIMER @V2B2638 01236000 COPY SPOOL @V50A2B5 01237000 END 01238000