MIA TITLE 'DMKMIA (CP) VM/370 - RELEASE 6' 00001000 ISEQ 73,80 @VA08412 00001500 COPY OPTIONS 00002000 COPY LOCAL 00003000 DMKMIA CSECT 00004000 MODID DC CL8'DMKMIA' I.D. 00005000 USING PSA,R0 00006000 USING VMBLOK,R11 00007000 USING SAVEAREA,R13 00008000 EJECT 00009000 *. 00010000 * 00011000 * MODULE NAME - 00012000 * 00013000 * DMKMIA 00014000 * 00015000 * FUNCTION - 00016000 * 00017000 * TO AUTOMATICALLY START AND STOP MONITOR AND TO PROVIDE 00018000 * ROUTINES FOR WRITING AND CLOSING MONITOR SPOOL FILES. ALSO 00019000 * TO PROVIDE A UTILITY TO START NEW MONITOR SPOOL FILES. 00020000 * 00021000 * ATTRIBUTES - 00022000 * 00023000 * REENTRANT, PAGEABLE, CALLED VIA SVC 00024000 * 00025000 * ENTRY POINTS - 00026000 * DMKMIAIN - TO AUTOMATICALLY START MONITOR 00027000 * DMKMIAMU - TO SEND OUT MESSAGES TO MONITOR USERS 00028000 * DMKMIAKC - ROUTINE TO INITIATE A MONITOR CLOSE 00029000 * DMKMIADL - MONITOR DISPLAY ROUTINE 00030000 * DMKMIAWO - ROUTINE TO WRITE OUT MONITOR SPOOL BUFFS 00031000 * DMKMIARO - ROUTINE TO INITIATE MONITOR SPOOL FILES 00032000 * DMKMIACC - ROUTINE TO CLOSE A MONITOR SPOOL FILE 00033000 * DMKMIAEN - TO AUTOMATICALLY STOP MONITOR 00034000 * DMKMIAST - TO SCHEDULE TRQ'S FOR AUTODISK OPTION 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 - 00045000 * 00046000 * THE FOLLOWING ARE FUNCTIONAL EXTERNAL REFERENCES 00047000 * OR ROUTINES WHICH ARE CALLED BY THIS ROUTINE. 00048000 * 00049000 EXTRN DMKMCCCL 00050000 EXTRN DMKPRGMC 00051000 EXTRN DMKCVTDT 00052000 EXTRN DMKSYSAT 00053000 EXTRN DMKSYSUR 00054000 EXTRN DMKSYSTE 00055000 EXTRN DMKSYSTS 00056000 EXTRN DMKSYSEN 00057000 EXTRN DMKRSPID 00058000 EXTRN DMKSYSCL 00059000 EXTRN DMKSYSMX 00060000 EXTRN DMKRPAPT 00061000 EXTRN DMKRPAGT,DMKPGTVG,DMKPGTVR 00061100 EXTRN DMKCVTAB 00062000 EXTRN DMKPGTSG 00063000 EXTRN DMKMNISH 00064000 EXTRN DMKCKSPL 00065000 EXTRN DMKPRGC8 00066000 EXTRN DMKCVTBD 00067000 EXTRN DMKSTKCP 00068000 EXTRN DMKSCNFD 00069000 EXTRN DMKUDRFU 00070000 EXTRN DMKMNIDK 00071000 EXTRN DMKERMSG 00072000 EXTRN DMKSCHRT 00073000 EXTRN DMKSCHST 00074000 EXTRN DMKENTST 00075000 EXTRN DMKENTET 00076000 EXTRN DMKENTBS 00077000 EXTRN DMKENTES 00078000 EXTRN DMKENTTE 00079000 EXTRN DMKENTTB 00080000 EXTRN DMKENTSC 00081000 EXTRN DMKENTEC 00082000 EXTRN DMKSCNAU 00083000 EXTRN DMKSYSBF 00084000 EXTRN DMKDSPNP 00085000 EXTRN DMKENTFI 00086000 EXTRN DMKMNIDS 00087000 EXTRN DMKRSPMN 00088000 AIF (NOT &AP).LOKSY5 00088900 EXTRN DMKLOKSY 00089000 EXTRN DMKLOKFR 00090000 EXTRN DMKLOKRL 00091000 EXTRN DMKLOKTR 00092000 EXTRN DMKLOKDS 00093000 EXTRN DMKLOKCT 00094000 .LOKSY5 ANOP 00094100 EXTRN DMKFRENP 00095000 EXTRN DMKSPLSP @VA07887 00095100 EXTRN DMKSPLDL @VA07979 00095150 * 00096000 * REGISTER USAGE IN THIS MODULE - 00097000 * R1 - R10 WORK REGISTERS 00098000 * R11 - VMBLOK 00099000 * R12 - ADDRESSABILITY 00100000 * R13 - SAVE AREA 00101000 * R14 - BALR LINKAGE 00102000 * R15 - BALR LINKAGE 00103000 * 00104000 *. 00105000 EJECT 00106000 *. 00107000 * ENTRY POINT - 00108000 * 00109000 * DMKMIAIN - ENTRY POINT TO START MONITOR AUTOMATICALLY 00110000 * 00111000 * ENTRY CONDITIONS - 00112000 * 00113000 * GPR11 - VMBLOK OF USER 00114000 * GPR13 - SAVE AREA 00115000 * 00116000 * EXIT CONDITIONS - 00117000 * 00118000 * NONE 00119000 * 00120000 * CALLS TO OTHER ROUTINES - 00121000 * 00122000 * DMKFREE - TO ACQUIRE STORAGE FOR A COMMAND BUFFER 00123000 * DMKFRET - TO RELEASE STORAGE CONTAINING A COMMAND 00124000 * DMKMCCCL - TO EXECUTE THE COMMAND IN THE COMMAND BUFFER 00125000 * DMKQCNWT - TO WRITE OUT A WARNING MESSAGE TO THE USER 00126000 * 00127000 * REGISTER USAGE - 00128000 * 00129000 * R6 - LINKAGE TO MESSAGE ROUTINE 00130000 * R11 - VMBLOK 00131000 * R12 - ENTRY POINT 00132000 * R13 - SAVE AREA 00133000 * 00134000 * OPERATION - 00135000 * 00136000 * A BUFFER IS BUILT AND A COMMAND IS INSERTED REFLECTING 00137000 * THE DEFAULT OF THE MONITOR SPOOL ENVIRONMENT. THE 00138000 * COMMAND IS SHIPPED TO DMKMCCCL FOR EXECUTION. 00139000 * 00140000 *. 00141000 SPACE 1 00142000 DMKMIAIN RELOC @V50A2B5 00143000 L R1,=A(DMKSYSBF) SEE HOW MANY @V50A2B5 00144000 LH R1,0(R1) BUFFERS WE NEED @V50A2B5 00145000 C R1,F1 SEE IF EXACTLY ONE @V50A2B5 00146000 BNE CONTIN1 NO, CONTINUE NORMALLY @V50A2B5 00147000 L R1,=A(DMKPRGC8) ONLY PERFORM ALLOWED FOR 1 BUFF@V50A2B5 00148000 L R2,0(R1) SEE IF ANY THERE @V50A2B5 00149000 LTR R2,R2 @V50A2B5 00150000 BZ CHKDFLT NO, CHECK DEFAULT @V50A2B5 00151000 TM 2(R1),X'FF'-PERFCL IS OTHER THAN PERFORM ON? @V50A2B5 00152000 BNE INVBUFFZ SHOULDN'T BE @V50A2B5 00153000 TM 3(R1),X'FF' ANYTHING ELSE ON @V50A2B5 00154000 BNE INVBUFFZ SHOULDN'T BE @V50A2B5 00155000 B CONTIN1 JUST CONTINUE NOW @V50A2B5 00156000 CHKDFLT EQU * @V50A2B5 00157000 L R1,=A(DMKSYSEN) LOOK AT THE ENABLE CLASSES @V50A2B5 00158000 TM 0(R1),X'FF'-PERFCL IS OTHER THAN PERFORM ON? @V50A2B5 00159000 BNE INVBUFFZ SHOULDN'T BE @V50A2B5 00160000 TM 1(R1),X'FF' ANYTHING ELSE ON? @V50A2B5 00161000 BNE INVBUFFZ SHOULDN'T BE @V50A2B5 00162000 CONTIN1 EQU * @V50A2B5 00163000 LA R0,L'STARTMSG GET LENGTH OF START MESSAGE @V50A2B5 00164000 LA R1,STARTMSG GET ADDRESS OF START MESSAGE @V50A2B5 00165000 CALL DMKQCNWT,PARM=NORET+OPERATOR SEND IT OUT @V50A2B5 00166000 LA R0,18 ACQUIRE A MESSAGE WORK AREA @V50A2B5 00167000 CALL DMKFREE FOR A COMMAND BUFFER @V50A2B5 00168000 L R4,=A(DMKSYSUR) GET DEFAULT USER ID @V50A2B5 00169000 MVC STUID(8),0(R4) MOVE IT INTO WORK AREA @V50A2B5 00170000 LR R3,R0 SAVE THESE NUMBERS WHILE @V50A2B5 00171000 LR R4,R1 WE WORK WITH REG(S) @V50A2B5 00172000 MVC BUFFS(5),BLANKS BLANK OUT THE BUFFS FIELD @V50A2B5 00173000 MVC BUFFNO(2),BLANKS HERE BLANK OUT THE BUFFS NUMBER@V50A2B5 00174000 L R1,=A(DMKSYSBF) GET THE BUFFERS @V50A2B5 00175000 LH R1,0(R1) LOAD FROM HALF WORD @V50A2B5 00176000 LTR R1,R1 CHECK OF ZERO @V50A2B5 00177000 BZ SENDASIS IF ZERO, USE MONITOR DEFAULTS @V50A2B5 00178000 MVC BUFFS(5),=C'BUFFS' THEN SAY BUFFS @V50A2B5 00179000 CALL DMKCVTBD CONVERT @V50A2B5 00180000 STCM R1,B'0011',BUFFNO STORE RESULT IN COMMAND @V50A2B5 00181000 SENDASIS LR R0,R3 NOW, RESTORE THE REGISTERS @V50A2B5 00182000 LR R1,R4 AS WE CAN WORK AS BEFORE @V50A2B5 00183000 MVC 0(STMSGSZ,R1),STMSG FILL IN THE MESSAGE @V50A2B5 00184000 LR R9,R1 R9 BECOMES THE WORK AREA @V50A2B5 00185000 ST R1,X'88'(R9) PUT IN THE POINTER @V50A2B5 00186000 LA R5,STMSGSZ PUT IN THE SIZE ALSO @V50A2B5 00187000 BCTR R5,R0 MINUS ONE @V50A2B5 00188000 ST R5,X'8C'(R9) PUT IN THIS COMMAND INDICATOR @V50A2B5 00189000 CALL DMKMCCCL CALL DMKMCCCL TO EXECUTE IT @V50A2B5 00190000 LA R0,18 FREE UP THE WORK MSG AREA @V50A2B5 00191000 CALL DMKFRET AS COMMAND IS EXECUTED @V50A2B5 00192000 LA R0,L'STARTMSG LOAD IN LENGTH OF START MSG @V50A2B5 00193000 LA R1,STARTMSG ALSO THE ADDRESS OF IT @V50A2B5 00194000 BAL R6,MONUMSG LET USER KNOW @V50A2B5 00195000 BAL R6,MONOMSG LET RECEIVER KNOW FOR THE HECK @V50A2B5 00196000 B EXITS FINISHED @V50A2B5 00197000 SPACE 1 00198000 INVBUFFZ EQU * @V50A2B5 00199000 LA R0,L'BADEN SEND OUT BAD ENABLE CLASS MSG @V50A2B5 00200000 LA R1,BADEN FOR ONE BUFFER MONITORING @V50A2B5 00201000 CALL DMKQCNWT,PARM=OPERATOR+NORET GIVE IT TO OPERATOR@V50A2B5 00202000 B EXITS LEAVE @V50A2B5 00203000 SPACE 5 00204000 EJECT 00205000 MONOMSG LR R3,R0 SAVE REGISTER 0 @V50A2B5 00206000 LR R4,R1 AND REGISTER 1 @V50A2B5 00207000 L R1,=A(DMKSYSUR) GET MONITOR USER NAME @V50A2B5 00208000 USING MONCOM,R2 @VA08954 00208100 L R2,=A(DMKPRGMC) GET MONCOM ADDRESS @VA08954 00208200 ICM R2,B'1111',0(R2) IS IT THERE ? @VA08954 00208300 BZ NMONUMSG DOES NOT EXIST - EXIT @VA08954 00208400 CLC MONUSER(8),0(R1) IS RECEIVER EQUAL TO USER? @VA08954 00208500 BE NMONUMSG YES - BYPASS MSG WRITE @VA08954 00208600 DROP R2 @VA08954 00208700 B SCANLEN AND DETERMINE ITS LENGTH @V50A2B5 00209000 MONUMSG EQU * @V50A2B5 00210000 LR R3,R0 SAVE INFORMATION @V50A2B5 00211000 LR R4,R1 NAMELY REGISTERS 0 AND 1 @V50A2B5 00212000 L R1,=A(DMKPRGMC) GET MONCOM ADDRESS @V50A2B5 00213000 ICM R1,B'1111',0(R1) TEST FOR EXISTENCE @V50A2B5 00214000 BZ NMONUMSG DOES NOT EXIST, EXIT @V50A2B5 00215000 USING MONCOM,R1 @V50A2B5 00216000 LA R1,MONUSER GET USER IN MONCOM @V50A2B5 00217000 DROP R1 @V50A2B5 00218000 SCANLEN LR R2,R1 REG 1 WILL BE USED LATER @V50A2B5 00219000 LA R5,8 ACQUIRE LENGTH @V50A2B5 00220000 XBLK CLI 0(R2),C' ' SEE IF BLANK @V50A2B5 00221000 BE YEND YES, THE END @V50A2B5 00222000 LA R2,1(R2) BUMP TO THE NEXT CHARACTER @V50A2B5 00223000 BCT R5,XBLK DECREMENT COUNTER @V50A2B5 00224000 YEND SR R2,R1 COMPUTE LENGTH @V50A2B5 00225000 LR R0,R2 GIVE TO SCNAU CORRECTLY @V50A2B5 00226000 CALL DMKSCNAU SEE IF FELLOW IS LOGGED ON @V50A2B5 00227000 BNZ NMONUMSG NO, HE IS NOT @V50A2B5 00228000 C R1,ASYSVM SEE IF THIS IS THE SYSTEM @V50A2B5 00229000 BE NMONUMSG YES, NOT GOOD ENOUGH @V50A2B5 00230000 C R1,ASYSOP SEE IF THIS IS THE OPERATOR @V50A2B5 00231000 BE NMONUMSG YES, NOT GOOD ENOUGH @V50A2B5 00232000 LR R5,R11 SAVE VMBLOK OF CURRENT USER @V50A2B5 00233000 SWTCHVM STAY SWITCH USERS @VA07887 00234000 LR R0,R3 NOW WE CAN RESTORE REGISTER 0 @V50A2B5 00237000 LR R1,R4 AND REGISTER ONE @V50A2B5 00238000 CALL DMKQCNWT,PARM=NORET PUT OUT A MESSAGE @V50A2B5 00239000 LR R1,R5 SETUP R1 FOR SWITCH @VA07887 00240000 SWTCHVM SWITCH BACK USERS @VA07887 00241000 NMONUMSG EQU * @V50A2B5 00243000 LR R0,R3 RESTORE REGISTER 0 @V50A2B5 00244000 LR R1,R4 AND REGISTER 1 @V50A2B5 00245000 BR R6 RETURN TO CALLER @V50A2B5 00246000 EJECT 00247000 *. 00248000 * 00249000 * ENTRY POINT - 00250000 * 00251000 * DMKMIAMU - ENTRY POINT TO SEND OUT MESSAGE TO USER IN 00252000 * MONCOM AREA. 00253000 * 00254000 * ENTRY CONDITIONS - 00255000 * 00256000 * GPR11 - ADDRESS OF VMBLOK OF USER 00257000 * GPR13 - ENTRY POINT ADDRESS 00258000 * 00259000 * EXIT CONDITIONS - 00260000 * 00261000 * NONE 00262000 * 00263000 * EXTERNAL REFERENCES/EXTERNAL ROUTINES - 00264000 * 00265000 * DMKSYSUR - NAME OF DEFAULT USER OF MONITOR 00266000 * DMKQCNWT - ROUTINE TO WRITE OUT MESSAGE 00267000 * 00268000 * REGISTER USAGE - 00269000 * 00270000 * GPR6 - LINKAGE TO MESSAGE ROUTINE 00271000 * GPR11 - ADDRESS OF VMBLOK OF USER 00272000 * GPR12 - ADDRESSABILITY 00273000 * GPR13 - SAVE AREA 00274000 * 00275000 * OPERATION - 00276000 * 00277000 * THIS ROUTINE SIMPLY SENDS OUT A MESSAGE TO THE 00278000 * MONITOR DEFAULT USER WHOSE NAME IS FOUND IN DMKSYS. 00279000 * A GENERAL ROUTINE DOES THIS, THE IS AN ENTRY POINT 00280000 * FOR OTHER ROUTINES. 00281000 * 00282000 *. 00283000 SPACE 1 00284000 DMKMIAMU RELOC @V50A2B5 00285000 BAL R6,MONOMSG PUT OUT THE MESSAGE @V50A2B5 00286000 L R6,=A(DMKSYSUR) IF HE IS IN FACT THE OPERATOR @V50A2B5 00287000 L R7,ASYSOP BY COMPARING TO THE OPERATOR'S @V50A2B5 00288000 LA R7,VMUSER-VMBLOK(R7) REAL NAME @V50A2B5 00289000 CLC 0(8,R6),0(R7) ROUTINE WOULD SKIP IT @V50A2B5 00290000 BNE EXITS ELSE WE ARE DONE @V50A2B5 00291000 CALL DMKQCNWT,PARM=NORET+OPERATOR SO SEND OUT MSG @V50A2B5 00292000 B EXITS AND EXIT @V50A2B5 00293000 EJECT 00294000 *. 00295000 * 00296000 * ENTRY POINT - 00297000 * 00298000 * DMKMIAKC - ROUTINE TO ISSUE 'MONITOR CLOSE' COMMAND 00299000 * INTERNALLY. 00300000 * 00301000 * ENTRY CONDITIONS - 00302000 * 00303000 * GPR11 - ADDRESS OF VMBLOK OF USER 00304000 * GPR13 - SAVE AREA 00305000 * 00306000 * EXIT CONDITIONS - 00307000 * 00308000 * NONE 00309000 * 00310000 * EXTERNAL REFERENCES - 00311000 * 00312000 * DMKFREE - TO ACQUIRE STORAGE FOR A COMMAND BUFFER 00313000 * DMKFRET - TO RELEASE THE COMMAND BUFFER 00314000 * DMKMCCCL - TO EXECUTE THE COMMAND 00315000 * 00316000 * REGISTER USAGE - 00317000 * 00318000 * GPR11 - ADDRESS OF VMBLOK OF USER 00319000 * GPR12 - ADDRESSABILITY 00320000 * GPR13 - SAVE AREA 00321000 * 00322000 * OPERATION - 00323000 * THIS ROUTINE IS BUILDS A COMMAND BUFFER FOR DMKMCCCL 00324000 * WHICH EXECUTES THE 'MONITOR CLOSE' COMMAND. 00325000 * 00326000 *. 00327000 SPACE 1 00328000 DMKMIAKC RELOC @V50A2B5 00329000 LA R0,18 ACQUIRE 18 DOUBLE WORDS @V50A2B5 00330000 CALL DMKFREE TO BUILD A COMMAND BUFFER @V50A2B5 00331000 MVC 0(CLSMSGSZ,R1),CLSMSG PUT IN THE COMMAND @V50A2B5 00332000 LR R9,R1 IT WILL BE PASSED IN REGISTER 9 @V50A2B5 00333000 ST R1,X'88'(R9) PUT IN BUFFER FIELDS @V50A2B5 00334000 LA R5,CLSMSGSZ SUCH AS THE LENGTH @V50A2B5 00335000 BCTR R5,R0 MINUS ONE @V50A2B5 00336000 ST R5,X'8C'(R9) STORE THAT @V50A2B5 00337000 CALL DMKMCCCL NOW, DO THE EXECUTION @V50A2B5 00338000 LA R0,18 TAKE THOSE 18 DOUBLE WORDS @V50A2B5 00339000 CALL DMKFRET AND FRET THEM @V50A2B5 00340000 B EXITS THEN EXIT @V50A2B5 00341000 EJECT 00342000 *. 00343000 * 00344000 * ENTRY POINT - DMKMIADL 00345000 * 00346000 * ENTRY CONDITIONS - 00347000 * 00348000 * GPR11 - ADDRESS OF VMBLOK OF USER 00349000 * GPR13 - SAVE AREA 00350000 * 00351000 * EXIT CONDITIONS - 00352000 * 00353000 * NONE 00354000 * 00355000 * EXTERNAL REFERENCES - 00356000 * 00357000 * DMKFREE - TO ACQUIRE STORAGE FOR MESSAGES 00358000 * DMKFRET - TO FREE UP THE MESSAGE AREA 00359000 * DMKMNIDS - TO DISPLAY THE MONITOR INFORMATION 00360000 * DMKPRGC8 - ENABLE CLASSES 00361000 * DMKPRGMC - ADDRESS OF MONCOM AREA 00362000 * DMKQCNWT - ROUTINE TO SEND OUT MESSAGES 00363000 * DMKSYSEN - MONITOR DEFAULT ENABLE CLASSES 00364000 * 00365000 * REGISTER USAGE - 00366000 * 00367000 * GPR8 - ROUTINE LINKAGE 00368000 * GPR11 - ADDRESS OF VMBLOK OF USER 00369000 * GPR12 - ADDRESSABILITY 00370000 * GPR13 - SAVE AREA 00371000 * 00372000 * OPERATION - 00373000 * 00374000 * THIS CODE IS ESSENTIALLY THAT FOUND IN DMKMCC FOR MONITOR 00375000 * DISPLAY FUNCTION WITH SOME VARIATIONS. IT WAS MOVED TO SAVE 00376000 * SPACE FOR OTHER CODE. ESSENTIALLY, A BUFFER FIOR THE 00377000 * DISPLAY OUTPUT IS OBTAINED. A LINE IS WRITTEN OUT FOR THE 00378000 * STATUS FO THE INTERNAL TRACE TABLE, AND A LINE FOR EACH 00379000 * ENABLE CLASS SPECIFYING ITS STATUS. A MESSAGE IS ALSO PUT OUT 00380000 * INDICATING WHETHER SPOOL OR TAPE MONITORING IS ACTIVE. 00381000 * OTHER SPOOL MONITOR INFORMATION IS GIVEN BY DMKMNIDS. 00382000 * 00383000 *. 00384000 SPACE 1 00385000 USING SAVEAREA,R13 @V50A2B5 00386000 DMKMIADL RELOC @V50A2B5 00387000 MVC SAVEWRK1(4),F5 KEEP THE DEFAULT (SPOOL) HERE @V50A2B5 00388000 CALL DMKSCNFD ACQUIRE THE LAST PARAMETER @V50A2B5 00389000 BNZ PROCALL NOTHING, GO TO DEFAULT @V50A2B5 00390000 ST R0,SAVEWRK1 THIS VALUE WILL INDICATE @V50A2B5 00391000 CL R0,F3 IF IT IS IN FACT @V50A2B5 00392000 BNE TEST4 MON ALL THAT IS WANTED @V50A2B5 00393000 CLC 0(3,R1),=C'ALL' MAKE SURE IT IS ALL @V50A2B5 00394000 BE PROCALL AND SHIP TO THE PROPER SECTION @V50A2B5 00395000 B MSG002 ELSE WE HAVE AN ERROR @V50A2B5 00396000 TEST4 CL R0,F4 SEE IF THERE ARE FOUR CHARACTERS@V50A2B5 00397000 BNE TEST5 IF FIVE, TRY FIVE @V50A2B5 00398000 CLC 0(4,R1),=C'TAPE' SEE IF TAPE WAS SPECIFIED @V50A2B5 00399000 BE PROCALL AND CONTINUE ON IF SO @V50A2B5 00400000 B MSG002 ELSE WE HAVE AN ERROR @V50A2B5 00401000 TEST5 CL R0,F5 AND IF IN FACT IT IS FIVE @V50A2B5 00402000 BNE MSG002 ELSE WE HAVE AN ERROR @V50A2B5 00403000 CLC 0(5,R1),=C'SPOOL' MAKE SURE IT IS SPOOL @V50A2B5 00404000 BNE MSG002 ELSE WE HAVE AN ERROR @V50A2B5 00405000 PROCALL LA R0,3 3 DOUBLEWORDS FOR DISPLAY REPLY @V2B2638 00406000 CALL DMKFREE GET IT PLEASE @V2B2638 00407000 BAL R8,STATMSG PUT OUT THE STATUS MESSAGE @V50A2B5 00408000 L R3,SAVEWRK1 SEE WHAT KIND OF DISPLAY WANTED @V50A2B5 00409000 C R3,F5 IS THIS SPOOL @V50A2B5 00410000 BE PROCSPL PUT IN NO MESSAGE @V50A2B5 00411000 LR R3,R1 PREPARE TO DO REGULAR CODE @V50A2B5 00412000 LA R0,L'DISPMSG1 LENGTH OF DISPLAY MSG HEADER @V2B2638 00413000 LA R1,DISPMSG1 ADDRESS OF THE MESSAGE @V2B2638 00414000 CALL DMKQCNWT,PARM=NORET WRITE HEADER @V2B2638 00415000 LR R1,R3 RESTORE REGISTER @V50A2B5 00416000 LA R7,MONCLTBL BEGINNING OF CLASS KEYWORD TABLE@V2B2638 00417000 LA R3,MONTBENO GET NO OF ENTRIES TO DO @V2B2638 00418000 LA R4,CLASNOS LIST OF CLASS NUMBERS @V2B2638 00419000 L R6,=A(DMKPRGC8) GET CURRENT CR8 MASK @V2B2638 00420000 L R6,0(R6) FROM DMKPRG FIELD @V2B2638 00421000 SLL R6,15 SHIFT MASK BITS DOWN TO LEFT @V2B2638 00422000 BAL R8,PARSEEN DISPLAY THE ENABLE CLASSES @V50A2B5 00423000 B RESUMETA BRANCH TO RESUME LOGIC @V50A2B5 00424000 SPACE 1 00425000 PARSEEN EQU * @V50A2B5 00426000 IMPTEST MVC 0(2,R1),0(R4) MOVE CLASS NUMBER INTO REPLY @V2B2638 00427000 MVC 2(2,R1),BLANKS 2 BLANKS FOR SEPARATORS @V2B2638 00428000 MVC 4(8,R1),0(R7) MOVE KEYWORD INTO REPLY @V2B2638 00429000 MVI 12(R1),X'40' BLANK SEPARATOR @V2B2638 00430000 SLA R6,1 SHIFT OUT A CLASS ENABLED BIT @V2B2638 00431000 BO OVERFLOW BIT MUST HAVE BEEN SET @V2B2638 00432000 MVC 13(8,R1),DISAB MOVE 'DISABLED' INTO REPLY @V2B2638 00433000 B REPLY @V2B2638 00434000 OVERFLOW MVC 13(8,R1),ENAB MOVE 'ENABLED' INTO REPLY @V2B2638 00435000 REPLY CLI 0(R7),C' ' IS THIS CLASS IMPLEMENTED? @V2B2638 00436000 BE SKIPMSG NOPE, SKIP THE DISPLAY THEN @V2B2638 00437000 LA R0,LENMSG MESSAGE LENGTH @V2B2638 00438000 CALL DMKQCNWT,PARM=NORET OUTPUT REPLY LINE @V2B2638 00439000 SKIPMSG LA R4,2(R4) POINT TO NEXT CLASS NUMBER @V2B2638 00440000 LA R7,9(R7) POINT TO NEXT MONCLTBL ENTRY @V2B2638 00441000 BCT R3,IMPTEST ANY MORE FIELDS TO TEST? @V2B2638 00442000 BR R8 @V50A2B5 00443000 SPACE 1 @V50A2B5 00444000 RESUMETA EQU * @V50A2B5 00445000 MVC 0(13,R1),=C'-- CPTRACE ' INTERNAL TRACE @V2B2638 00446000 L R2,TRACEFLG CHECK THE INTERNAL TRACE FLAGS @V2B2638 00447000 LTR R2,R2 ARE ANY FLAGS ON? @V2B2638 00448000 BZ CPTDISA NOPE, CPTRACE IS DISABLED @V2B2638 00449000 MVC 13(8,R1),ENAB YUP, SOMETHING IS ENABLED @V2B2638 00450000 B WTCPT GO WRITE IT OUT @V2B2638 00451000 SPACE 1 00452000 CPTDISA MVC 13(8,R1),DISAB TRACE IS DISAB, NOTHING ACTIVE @V2B2638 00453000 WTCPT CALL DMKQCNWT,PARM=NORET @V2B2638 00454000 CLC SAVEWRK1(4),F4 SEE IF SPOOL INFO IS ASKED @V50A2B5 00455000 BE EXITDISP NO, SO EXIT DISPLAY @V50A2B5 00456000 PROCSPL CALL DMKMNIDS GATHER THE MONITOR INFORMATION @V50A2B5 00457000 LR R3,R1 KEEP THE VALUE IN REGISTER 3 @V50A2B5 00458000 LA R1,DISPMSG1 ADDRESS OF THE ENABLE HEADER @V50A2B5 00459000 LA R0,L'DISPMSG1 LENGTH OF THE ENABLE HEADER @V50A2B5 00460000 CALL DMKQCNWT,PARM=NORET PUT OUT THE MESSAGE @V50A2B5 00461000 LR R1,R3 RESTORE REGISTER 1 @V50A2B5 00462000 LA R7,MONCLTBL BEGINNING OF CLASS KEYWORD @V50A2B5 00463000 LA R3,MONTBENO GET NUMBER OF ENTRIES TO DO @V50A2B5 00464000 LA R4,CLASNOS LIST OF CLASS NUMBERS @V50A2B5 00465000 L R6,=A(DMKPRGC8) THE ESTABLISHED ENABLE CLASSES @V50A2B5 00466000 L R6,0(R6) GET THEM TO WORK WITH THEM @V50A2B5 00467000 SLL R6,15 SHIFT THEM OVER PROPERLY @V50A2B5 00468000 LTR R6,R6 SEE IF ANY EXIST @V50A2B5 00469000 BNZ DOPARS YES, USE THESE THEN @V50A2B5 00470000 L R6,=A(DMKSYSEN) ELSE USE THE DEFAULTS @V50A2B5 00471000 MVC TIMVAL(4),F0 INITIALIZE A WORK AREA @V50A2B5 00472000 MVC TIMVAL+2(2),0(R6) AND PUT THE DEFAULTS THERE @V50A2B5 00473000 L R6,TIMVAL NOW PUT PLAINLY INTO REG6 @V50A2B5 00474000 SLL R6,15 AND SHIFT ACCORDINGLY @V50A2B5 00475000 DOPARS BAL R8,PARSEEN AND SEND OUT CLASS MESSAGES @V50A2B5 00476000 EXITDISP EQU * @V50A2B5 00477000 LA R0,3 MESSAGE BUFFER SIZE @V2B2638 00478000 CALL DMKFRET GIVE IT BACK @V2B2638 00479000 EXIT ALL DONE @V2B2638 00480000 SPACE 1 00481000 STATMSG EQU * @V50A2B5 00482000 L R6,=A(DMKPRGMC) GET THE MONCOM AREA @V50A2B5 00483000 ICM R6,B'1111',0(R6) AND FIRST SEE IF MONITOR IS ON @V50A2B5 00484000 BNE DETERM YES, DETERMINE IF DISK OR TAPE @V50A2B5 00485000 MVC 0(18,R1),=C'MONITOR NOT ACTIVE' NOT ON MSG @V50A2B5 00486000 LA R0,18 LENGTH OF THIS MESSAGE @V50A2B5 00487000 B SENDMSG GO SEND IT @V50A2B5 00488000 DETERM EQU * @V50A2B5 00489000 USING MONCOM,R6 @V50A2B5 00490000 LA R0,23 LENGTH OF THIS MESSAGE @V50A2B5 00491000 MVC 0(23,R1),=C'TAPE MONITORING ACTIVE' MESSAGE @V50A2B5 00492000 TM MONFLAG3,SPOOLED SEE IF SPOOLING IS ON @V50A2B5 00493000 DROP R6 @V50A2B5 00494000 BNO ASSUMTAP NO, SO USE TAPE @V50A2B5 00495000 MVC 0(5,R1),=C'SPOOL' ELSE DO IT FOR SPOOL @V50A2B5 00496000 ASSUMTAP EQU * @V50A2B5 00497000 SENDMSG CALL DMKQCNWT,PARM=NORET PUT OUT THE MESSAGE @V50A2B5 00498000 BR R8 EXIT OF SUBROUTNE @V50A2B5 00499000 EJECT 00500000 *. 00501000 * 00502000 * ENTRY POINT - DMKMIAWO 00503000 * 00504000 * ENTRY CONDITIONS - 00505000 * 00506000 * GPR1 - REAL ADDRESS OF PAGE TO BE WRITTEN 00507000 * GPR11 - ADDRESS OF VMBLOK OF USER 00508000 * GPR13 - ADDRESS OF SAVE AREA 00509000 * 00510000 * EXIT CONDITIONS - 00511000 * 00512000 * REG1 = 0 NORMAL RETURN 00513000 * = 1 NO MORE DASD 00514000 * = 2 WRITE COMPLETE, AND MONITOR SHUTDOWN EXECUTED 00515000 * = 3 WRITE ERROR 00516000 * 00517000 * EXTERNAL REFERENCES - 00518000 * 00519000 * DMKCKSPL - SPOOL FILE CHECKPOINT ROUTINE 00520000 * DMKMNISH - MONITOR SHUTDOWN ROUTINE 00521000 * DMKPGTSG - ROUTINE TO ACQUIRE DASD SLOTS 00522000 * DMKPRGC8 - MONITOR ENABLE CLASSES 00523000 * DMKPRGMC - ADDRESS OF MONCOM AREA 00524000 * DMKQCNWT - ROUTINE TO WRITE OUT MESSAGES 00525000 * DMKRPAPT - ADDRESS OF WRITE TO DASD ROUTINE 00526000 * 00527000 * REGISTER USAGE - 00528000 * 00529000 * GPR4 - REAL ADDRESS OF PAGE TO BE WRITTEN OUT 00530000 * GPR7 - ADDRESS SFBLOK 00531000 * GPR10 - ADDRESS OF MONCOM AREA 00532000 * GPR11 - ADDRESS OF USER VMBLOK 00533000 * GPR12 - ADDRESSABILITY 00534000 * GPR13 - SAVE AREA 00535000 * 00536000 * OPERATION - 00537000 * 00538000 * A CHECK IF FIRST MADE FOR THE IO TRAP. IF ON, THE FINAL 00539000 * PAGE WRITE OUT TAKES PLACE IN DMKMIACC. OTHERWISE, A NEW 00540000 * DASD SLOT IS OBTAINED AND STORED. THEN THE GIVEN PAGE IS 00541000 * USED TO LOCATE THE CORRESPONDING VIRTUAL PAGE SO THAT IT MAY 00542000 * BE WRITTEN OUT TO DASD. THE SPOOL FILE IS THEN CHECKPOINTED. 00543000 * THEN A CHECK IS MADE TO SEE IF THE NEXT PAGE IS A LAST PAGE OF 00544000 * SPOOL FILE, NOT WRITTEN OUT YET, BUT WHOSE LENGTH FIELD MUST 00545000 * STILL BE FILLED IN. IF SO, THE ROUTINE IN DMKMIACC HANDLES IT 00546000 * IN CASE OF DASD ERROR, THE CURRENT SPOOL FILE IS PUT ON THE 00547000 * READER CHAIN, AND MONITOR IS SUSPENDED AND EVENTUALLY SHUT OFF 00548000 * 00549000 *. 00550000 SPACE 2 00551000 DMKMIAWO RELOC @V50A2B5 00552000 SR R2,R2 CLEAR FLAGS @VA07979 00553300 ST R2,SAVER1 RETURN CODE @VA07979 00553600 ST R2,SAVEWRK3 DASD WRITE INDICATORS @VA07979 00553900 L R10,=A(DMKPRGMC) OBTAIN THE ADDRESS OF @V50A2B5 00554000 L R10,0(R10) THE MONCOM BLOCK @V50A2B5 00555000 USING MONCOM,R10 @V50A2B5 00556000 USING SPLINK,R4 @VA07888 00559200 USING SFBLOK,R7 @VA07888 00559400 L R7,MONSFB SFB ADDR IN MONCOM @VA07888 00559600 LR R4,R1 USE REGISTER 4 FOR PAGE @V50A2B5 00560000 LA R4,0(R4) NULL OUT HIGH BYTE @V50A2B5 00561000 TM 9(R4),TRAP IS THIS THE LAST IO @V50A2B5 00562000 BO CONTCL YES, CLOSE ON THIS @V50A2B5 00563000 L R3,SFBRECNO ADD 1 TO COUNT OF BUFFERS @VA07979 00563050 LA R3,1(R3) IN SPOOL FILE @VA07979 00563100 ST R3,SFBRECNO @VA07979 00563150 MVC 4088(2,R4),SFBFILID IF SYSTEM CRASHES THESE @VA07979 00563200 MVC 4090(6,R4),SFBTIME VALIDATE MONITOR DASD SLOT @VA07979 00563250 MVC SPRECNUM,F1 1 'RECORD' IN MONITOR BUFF @VA07979 00565000 LA R9,10 SET UP ERROR RETRY COUNT IN CASE @VA07979 00566550 WRLOOP EQU * OF PROBLEMS DURING DASD WRITE @VA07979 00566600 MVC MONDAS(4),MONDASA GET PROPER DASD PAGE @V50A2B5 00567000 CALL DMKPGTSG AND OBTAIN ONE FOR NEXT TIME @V50A2B5 00568000 LTR R1,R1 THAT IS, IF DASD EXISTS @V50A2B5 00569000 BNZ LAB1 ONE DOES EXIST @V50A2B5 00570000 MVC SPNXTPAG(4),SFBSTART FWD PTR BACK TO START TO @VA07888 00570200 * INDICATE TO DMKCKS THAT ITS THE LAST SLOT IN FILE 00570400 OI MONFLAG3,EXHAUST TELL USER IT IS EXHAUSTED @V50A2B5 00571000 B LAB2 @VA07888 00572200 LAB1 ST R1,SPNXTPAG FWD PTR TO NXT SLOT @VA07888 00572400 MVC SFBDIST(4),SFBDIST+4 NEW PREVIOUS LAST @VA07979 00572450 ST R1,SFBDIST+4 NEW LAST FOR CLEAN UP IF ERROR @VA07979 00572500 ST R1,SFBLAST NEW LAST FOR SFB @VA07979 00572550 LAB2 ST R1,MONDASA NEW NEXT SLOT IN MONCOM @VA07888 00572600 MVC SPPREPAG,MONDASB BACKWARD POINTER @VA07888 00572800 L R0,MONDAS GET OUR DASD BUFFER @V50A2B5 00586000 LA R5,MONBUF1 AND THE ADDRESS OF 1ST LOCAT. @V50A2B5 00587000 COMPR C R4,0(R5) SEE IF PAGES MATCH @V50A2B5 00588000 BE GETVIRT YES, USE CORRESPONDING VIRT @V50A2B5 00589000 LA R5,8(R5) GO TO NEXT ENTRY @V50A2B5 00590000 B COMPR FOR ONE SHOULD MATCH @V50A2B5 00591000 GETVIRT L R1,4(R5) VIRTUAL PAGE OBTAINED HERE @V50A2B5 00592000 CALL DMKRPAPT,PARM=SYSTEM DO THE ACTUAL WRITE @V50A2B5 00593000 BZ NOERROR @VA07979 00594040 OI SAVEWRK3,MDAER FLAG ERROR FOR LATER SFB CLEANUP @VA07979 00594080 TM MONFLAG3,EXHAUST DID WE RUN OUT OF DASD SLOTS @VA07979 00594120 BO EXHCLOSE YES, STOP MONITOR AS IN CLOSE @VA07979 00594160 BCT R9,WRLOOP TRY WRITE AGAIN @VA07979 00594200 * PERM DASD ERROR WRITING SPOOL FILE BUFFER TO DASD. CLOSE OR PURGE 00594240 CLC SFBPNT,ZEROES DID ERROR OCCUR WITH FIRST WRITE @VA07979 00594280 BE PURGESFB CLEAN UP EASY, JUST PURGE SFB @VA07979 00594320 LA R9,1 SET UP TO JOIN COMMON ERROR @VA07979 00594360 B PERMERR RECOVERY ROUTINE @VA07979 00594400 SPACE 1 00594440 NOERROR OI SAVEWRK3,MNWROK WRITE OK (IN CASE OF ERR RETRY)@VA07979 00594480 TM SAVEWRK3,MDAER ANY ERRORS AT ALL DURING RETRY @VA07979 00594520 BZ NOBUFUP NO CLEAN UP NECESSARY @VA07979 00594560 NI SAVEWRK3,X'FF'-MDAER YES, FIRST CLEAR ERROR FLAG@VA07979 00594600 CLC SFBPNT,ZEROES WAS ERROR DURING FIRST BUFFER @VA07979 00594640 BNE BUFUPDT NO, THE MORE USUAL CASE @VA07979 00594680 MVC SFBSTART,MONDAS YES CORRECT SFB FWD POINTER @VA07979 00594720 B NOBUFUP @VA07979 00594760 BUFUPDT BAL R6,UPDTPAG CORRECT FWD PTR IN PREVIOUS SLOT @VA07979 00594800 NOBUFUP TM MONFLAG3,EXHAUST OUT OF DASD BEFORE WRITE @VA07979 00594840 BO EXHCLOSE YES, STOP MON AS IN CLOSE @VA07979 00594880 XC 4088(8,R4),4088(R4) NULL OUT THIS LINE @V50A2B5 00595000 XC 0(20,R4),0(R4) REPREPARE THIS BUFFER @V50A2B5 00596000 MVC SFBPNT(4),MONDAS INDICATE LAST PAGE WRITTEN @V50A2B5 00597000 OI 8(R4),MONBUFAV TELL THE WORLD IT'S AVAILABLE @V50A2B5 00598000 MVC MONDASB(4),MONDAS KEEP AROUND FOR NEXT BUFFER @V50A2B5 00599000 CLC SFBPNT(4),SFBSTART SEE IF THIS IS THE FIRST PAGE@V50A2B5 00600000 BNE NOTCKS NO, IT IS NOT @V50A2B5 00601000 OI SFBFLAG,SFBINUSE TURN ON INUSE FLAG @VA12826 00601500 CALL DMKCKSPL,PARM=OPNSFB+RDRCHN+ADDSFB CHKPT @V50A2B5 00602000 NI SFBFLAG,X'FF'-SFBINUSE TURN INUSE FLAG OFF @VA12826 00602500 NOTCKS EQU * @V50A2B5 00603000 SPACE 1 00604000 LA R5,8(R5) BUMP TO NEXT ENTRY @V50A2B5 00605000 CLI 0(R5),X'FF' DID IT WRAP HERE @V50A2B5 00606000 BNE *+8 NO, DO THIS SLOT @V50A2B5 00607000 LA R5,MONBUF1 YES, USE THE FIRST PAGE @V50A2B5 00608000 L R5,0(R5) GET THE PAGE ADDRESS @V50A2B5 00609000 TM 9(R5),UNFIN IS THIS UNFINISHED BUSINESS @V50A2B5 00610000 BZ EXITS NO, EXIT NORMALLY @VA07979 00611500 LR R4,R5 USE IT AS REGISTER 4 @V50A2B5 00612000 B CONTCL AND CLOSE ON THIS @V50A2B5 00613000 SPACE 1 00629000 EXHLEAVE EQU * @V50A2B5 00630000 SR R0,R0 USE SOMETHING TO NULL OUT @V50A2B5 00631000 L R1,=A(DMKPRGC8) THE ENABLE CLASSES @V50A2B5 00632000 ST R0,0(R1) NULLING DONE @V50A2B5 00633000 MVC CPCREG8(4),F0 NULL OUT FOR CTRL REG 8 @V50A2B5 00634000 L R8,PREFIXB ALSO IN THE OTHER PREFIX @V50A2B5 00635000 MVC CPCREG8-IPLPSW(4,R8),ZEROES NULL OUT @V50A2B5 00636000 LCTL C8,C8,CPCREG8 AND NULL CTRL REG 8 @V50A2B5 00637000 CLC SAVER1(4),F3 HERE AFTER PERM DASD ERROR? @VA07888 00637100 BNE NODASMS NO, NEED OUT OF DASD MSG @VA07888 00637200 LA R1,WRIDASMG PERM DASD ERROR MSG @VA07888 00637300 LA R0,L'WRIDASMG @VA07888 00637400 B SENDMG @VA07888 00637500 NODASMS EQU * @VA07888 00637600 LA R1,NODASMSG LENGTH OF WARNING MESSAGE @V50A2B5 00638000 LA R0,L'NODASMSG ADDRESS OF WARNING MESSAGE @V50A2B5 00639000 SENDMG CALL DMKQCNWT,PARM=OPERATOR+NORET SEND WARN MESSAGE @V50A2B5 00640000 BAL R6,MONUMSG LET THE USER KNOW @V50A2B5 00641000 BAL R6,MONOMSG ALSO THE RECEIVER @V50A2B5 00642000 CLC SAVER1(4),F0 IF ERROR OR NO SLOTS @VA07979 00642200 BNE ESCAPE NO TRAILER JUST CLEAN UP @VA07979 00642400 LR R9,R10 MNISH NEEDS A(MONCOM) IN R9 @VA07979 00642600 CALL DMKMNISH AND SHUT OFF THE MONITOR @V50A2B5 00643000 B EXITCL AND EXIT AS IF CLOSED @V50A2B5 00644000 SPACE 1 00645000 CLSRETRY CALL DMKPGTSG GET NEW DASD SLOT @VA07979 00658010 LTR R1,R1 DID WE GET A SLOT OK @VA07979 00658020 BNZ CLSWR YES TRY AND WRITE INTO IT @VA07979 00658030 EXHCLOSE MVC SAVER1(4),F1 RETURN CODE AND MSG FLAG @VA07979 00658040 TM SAVEWRK3,MNWROK WAS WRITE SUCCESSFUL @VA07979 00658050 BZ DECRCNT NO, BACK UP COUNT OF SLOTS IN FILE@VA07979 00658060 B IOGOOD YES, NORMAL CLOSE FROM NOW ON @VA07979 00658070 SPACE 1 00658080 PERMERR CLC SFBPNT,ZEROES ANY THING IN FILE AT ALL @VA07979 00658090 BE PURGESFB NO, PURGE FILE @VA07979 00658100 MVC SAVER1(4),F3 RETURN CODE & MSG FLAG FOR ERROR @VA07979 00658110 MVC SFBLAST,SFBPNT THIS INDICATES EOF @VA07979 00658120 DECRCNT L R2,SFBRECNO SUB 1 FROM COUNT OF BUFFERS @VA07979 00658130 SL R2,F1 WRITTEN TO THIS SPOOL FILE 'CAUSE @VA07979 00658140 ST R2,SFBRECNO THE LAST WRITE FAILED @VA07979 00658150 B IOGOOD @VA07979 00658160 SPACE 1 00658170 CLSWR MVC SFBDIST(4),SFBDIST+4 ADJUST SAFETY POINTERS @VA07979 00658180 ST R1,SFBLAST NEW LAST SLOT ON SFB CHAIN @VA07979 00658190 ST R1,SFBDIST+4 NEW LAST SLOT OBTAINED @VA07979 00658200 ST R1,MONDAS SLOT FOR NEXT I/O @VA07979 00658210 CLC SFBPNT,ZEROES ANY BUFFERS WRITTEN YET @VA07979 00658220 BNE SETUPWR NO, NORMAL CASE... MULTI BUFF @VA07979 00658230 ST R1,SFBSTART SPECIAL 1 BUFF FILE @VA07979 00658240 ST R1,SPNXTPAG POINTS TO ITSELF @VA07979 00658250 ST R1,SFBDIST ALSO LAST @VA07979 00658260 SPACE 1 00658270 SETUPWR LR R0,R1 READY FOR WRITE @VA07979 00658280 L R1,4(R5) VIRTUAL ADDR FROM MONCOM @VA07979 00658290 CALL DMKRPAPT,PARM=SYSTEM TRY AND WRITE IT @VA07979 00658300 BNZ CLSERR OUT OF LUCK, JOIN ERROR CODE @VA07979 00658310 CLC SFBSTART,SFBLAST IS IT A 1 PAGE FILE @VA07979 00658320 BE IOGOOD CLEANUP SIMPLIFIED @VA07979 00658330 BAL R6,UPDTPAG MULTI BUFF FILE NEEDS MORE @VA07979 00658340 B IOGOOD CLEAN UP @VA07979 00658350 SPACE 1 00658360 UPDTPAG CALL DMKPGTVG GET SLOT TO READ INTO @VA07979 00658370 L R0,SPPREPAG PREV SUCCESSFULLY WRITTEN SLOT @VA07979 00658380 CALL DMKRPAGT,PARM=SYSTEM+BRING BRING IT BACK IN @VA07979 00658390 LR R4,R2 ADDRESS OF BUFFER @VA07979 00658400 MVC SPNXTPAG,MONDAS ADJUST ITS FWD PTR TO NEW SLOT @VA07979 00658410 CALL DMKRPAPT,PARM=SYSTEM AND WRITE IT BACK @VA07979 00658420 SR R0,R0 @VA07979 00658430 CALL DMKRPAGT,PARM=SYSTEM RELEASE SLOT @VA07979 00658440 CALL DMKPGTVR RELEASE VIRTUAL SLOT @VA07979 00658450 BR R6 @VA07979 00658460 SPACE 1 00658470 EJECT 00659100 EJECT 00826000 *. 00827000 * 00828000 * ENTRY POINT - 00829000 * 00830000 * DMKMIAR0 00831000 * 00832000 * ENTRY CONDITIONS - 00833000 * 00834000 * GPR11 - ADDRESS OF VMBLOK OF USER 00835000 * GPR13 - SAVE AREA 00836000 * 00837000 * EXIT CONDITIONS - 00838000 * 00839000 * REG1 = 0 NORMAL RETURN 00840000 * = 1 NO MORE DASD 00841000 * 00842000 * EXTERNAL REFERENCES - 00843000 * 00844000 * DMKFREE - ROUTINE TO ACQUIRE STORAGE FOR SFBLOK 00845000 * DMKFRET - ROUTINE TO RETURN SFBLOK STORAGE 00846000 * DMKPGTSG - ROUTINE TO OBTAIN A DASD SLOT 00847000 * DMKPRGMC - ADDRESS OF MONITOR COMMUNICATIONS AREA 00848000 * DMKRSPID - USED TO OBTAIN A SPOOL FILE ID 00849000 * DMKSYSCL - DEFAULT CLASS OF MONITOR SPOOL FILES 00850000 * DMKSYSUR - DEFAULT USER OF MONITOR SPOOL FILES 00851000 * 00852000 * REGISTER USAGE - 00853000 * 00854000 * GPR3 - ADDRESS OF MONITOR COMMUNICATIONS AREA 00855000 * GPR7 - ADDRESS OF SPOOL FILE BLOCK 00856400 * GPR10 - ADDRESS OF MONITOR COMMUNICATIONS AREA 00856800 * GPR11 - ADDRESS OF VMBLOK 00857000 * GPR12 - ADDRESSABILITY 00858000 * GPR13 - ADDRESS OF SAVE AREA 00859000 * 00860000 * OPERATION - 00861000 * 00862000 * STORAGE IS OBTAINED FOR AN SFBLOK. APPROPRIATE FIELDS 00863000 * ARE SET. A DASD PAGE IS OBTAINED, AND THIS FILE IS 00864000 * RECOGNIZED AS THE CURRENT OPEN MONITOR FILE 00865000 * 00866000 *. 00867000 SPACE 1 00868000 DMKMIARO RELOC @V50A2B5 00869000 MVC SAVER1(4),F0 INDICATE NO ERROR @V50A2B5 00870000 L R10,=A(DMKPRGMC) ADDRESS OF MONITOR @VA07979 00871000 L R10,0(R10) COMMUNICATIONS AREA @VA07979 00872000 LA R0,SFBSIZE ACQUIRE AN SFBLOCK @V50A2B5 00874000 CALL DMKFREE GET THE STORAGE @V50A2B5 00875000 ST R1,MONSFB KEEP THE ADDRESS AROUND @V50A2B5 00876000 LR R7,R1 ESTABLISH ADDRESSABILITY FOR SFB @VA07979 00877400 USING SFBLOK,R7 @VA07979 00877800 XC SFBLOK(SFBSIZE*8),SFBLOK ZERO IT OUT @V50A2B5 00879000 L R4,=A(DMKSYSUR) GET THE USER @V50A2B5 00880000 MVC SFBUSER(8),0(R4) PUT AS USER @V50A2B5 00881000 MVC SFBORIG(8),0(R4) AND AS ORIGINATOR @V50A2B5 00882000 MVC SFBDIST(8),ZEROES NULL OUT DIST FOR FILE INTEG @V50A2B5 00883000 SPACE 1 00884000 LA R1,SFBDATE GET ADDRESS FOR THE DATE @V50A2B5 00885000 LA R2,SFBTIME AND THE TIME @V50A2B5 00886000 CALL DMKCVTDT AND LET SYSTEM STORE IT THERE @V50A2B5 00887000 MVI SFBTYPE,TYP2540P TELL IT THE TYPE @V50A2B5 00888000 L R4,=A(DMKSYSCL) TELL IT @V50A2B5 00889000 MVC SFBCLAS(1),0(R4) THE CLASS @V50A2B5 00890000 MVI SFBCOPY+1,X'01' ONE COPY @V50A2B5 00891000 MVC SFBFNAME(12),=C'MONDATA ' STD NAME FOR MON @VA09059 00892000 MVC SFBFTYPE(2),SFBDATE PUT IN A COMPOSITE TYPE @V50A2B5 00893000 MVC SFBFTYPE+2(2),SFBDATE+3 OF DATE @V50A2B5 00894000 MVC SFBFTYPE+4(2),SFBTIME AND @V50A2B5 00895000 MVC SFBFTYPE+6(2),SFBTIME+3 TIME @V50A2B5 00896000 MVC SFBFTYPE+8(4),BLANKS ...FILL IN TYPE FLD... @VA09059 00896500 OI SFBFLAG2,SFBMON FLAG THE FILE AS MONITOR'S @V50A2B5 00897000 L R4,=A(DMKRSPID) GET IT A NUMBER @V50A2B5 00898000 LH R15,0(R4) FROM STANDARD PLACE IN SYSTEM @V50A2B5 00899000 STH R15,SFBFILID PUT IT IN PLACE @V50A2B5 00900000 LA R15,1(R15) BUMP THE COUNT @V50A2B5 00901000 CL R15,=F'9900' ARE WE OVER MAX NUM @V50A2B5 00902000 BNH STCOUNT NO @V50A2B5 00903000 LA R15,1 RESET VALUE TO ONE @V50A2B5 00904000 STCOUNT STH R15,0(R4) STORE FOR POSTERITY @V50A2B5 00905000 L R4,MONCURBF GET REAL ADDRESS OF CURRENT BUF@V50A2B5 00906000 XC 0(16,R4),0(R4) NULL OUT BEGINNING @V50A2B5 00907000 OI 8(R4),MONBUFAC INDICATE THAT IT IS ACCEPTING @V50A2B5 00908000 LA R4,X'10'(R4) TELL FOR NEXT RECORD @V50A2B5 00910000 LA R4,MNBHDLEN(R4) BUMP UP FOR THE LENGTH @V50A2B5 00911000 L R5,PREFIXA STORE INTO APPROPRIATE PSA @V50A2B5 00912000 ST R4,MONNEXT(R5) THE VALUE OF MONNEXT @V50A2B5 00913000 O R4,=F'4088' THIS IS A NEW PAGE END @V50A2B5 00914000 ST R4,PAGEND(R5) STORE IN LOW PSA @V50A2B5 00915000 NI MONFLAG2,255-SUSPEND GET RID OF ANY SUSPEND @V50A2B5 00916000 L R1,MONDAS SEE IF DASD LEFT OVER EARLIER @V50A2B5 00917000 LTR R1,R1 TEST IF ZERO @V50A2B5 00918000 BNZ NOPAGE NO, SOMETHING ALREADY THERE @V50A2B5 00919000 CALL DMKPGTSG GET A DASD PAGE @V50A2B5 00920000 LTR R1,R1 SEE IF A PAGE IS AVAILABLE @V50A2B5 00921000 BZ NODASD1 ERROR, OUT OF DASD @V50A2B5 00922000 NOPAGE ST R1,MONDASA USE THIS AS DASD @V50A2B5 00923000 XC MONDASB(4),MONDASB AND NULL OUT BACK @V50A2B5 00924000 XC MONDAS(4),MONDAS AND CURRENT DASD @V50A2B5 00925000 ST R1,SFBLAST USE THIS AS SFBLAST @V50A2B5 00926000 ST R1,SFBSTART AND AS SFBSTART @V50A2B5 00927000 ST R1,SFBDIST PLACE THIS HERE FOR FILE @V50A2B5 00928000 ST R1,SFBDIST+4 INTEGRITY @V50A2B5 00929000 L R15,=A(DMKRSPMN) THIS INDICATES THE CURRENT FILE@V50A2B5 00930000 ST R7,0(R15) IS OPEN AND THIS IS THE ANCHOR @VA07979 00931500 SPACE 1 00932000 EXITS EXIT EXIT HERE @V50A2B5 00933000 SPACE 1 00934000 PURGESFB EQU * @VA07979 00934400 MVC SFBSTART,SFBLAST STANDARD FOR CLOSED SFB @VA07979 00934800 NODASD1 EQU * NO DASD LEFT ROUTINE @V50A2B5 00935000 MVC SAVER1(4),F1 INDICATE EXHAUST @V50A2B5 00936000 OI MONFLAG3,EXHAUST INDICATE EXHAUSTION @V50A2B5 00937000 MVC SAVEWRK1+2(2),SFBFILID FILE ID FOR LATER MSG @VA07888 00937500 CALL DMKSPLDL PURGE SFB AND FRET @VA07979 00938400 SR R7,R7 @VA07888 00940200 ST R7,MONSFB CLEAR MONCOM POINTER @VA07888 00940400 L R15,=A(DMKRSPMN) OPEN MONITOR SFB ANCHOR @VA12761 00940600 ST R7,0(R15) CLEAR THAT TOO @VA07888 00940800 B EXHLEAVE GO TO THE EXIT ROUTINE @V50A2B5 00942000 EJECT 00945000 *. 00946000 * 00947000 * ENTRY POINT - 00948000 * 00949000 * DMKMIACC 00950000 * 00951000 * ENTRY CONDITIONS - 00952000 * 00953000 * GPR11 - ADDRESS OF VMBLOK OF USER 00954000 * GPR13 - ADDRESS OF SAVE AREA 00955000 * 00956000 * EXIT CONDITIONS - 00957000 * 00958000 * REG1 = 0 NORMAL RETURN 00959000 * = 1 NO MORE DASD 00960000 * = 2 MONITOR SHUTDOWN SCHEDULED 00961000 * = 3 WRITE ERROR 00962000 * 00963000 * EXTERNAL REFERENCES - 00964000 * 00965000 * DMKCKSPL - SPOOL FILE CHECKPOINT ROUTINE 00966000 * DMKDSPNP - FREE PAGE INDICATOR 00967000 * DMKMIARO - ROUTINE TO START A NEW MONITOR FILE 00968000 * DMKMNIDK - ENTRY POINT TO WRITE A HEADER RECORD 00969000 * DMKPRGMC - ADDRESS OF MONITOR COMMUNICATIONS AREA 00970000 * DMKRPAPT - ROUTINE TO WRITE OUT TO A DASD SLOT 00971000 * DMKSTKCP - ROUTINE TO STACK A CPEXBLOK 00972000 * DMKSYSAT - MONITOR DEFAULT FLAG FIELD 00973000 * 00974000 * REGISTER USAGE - 00975000 * 00976000 * GPR4 - READ ADDRESS OF MONITOR BUFFER 00977000 * GPR10 - ADDRESS OF MONITOR COMMUNICATIONS AREA 00978000 * GPR11 - ADDRESS OF VMBLOK OF USER 00979000 * GPR12 - ADDRESSABILITY 00980000 * GPR13 - ADDRESS OF SAVE AREA 00981000 * 00982000 * OPERATION - 00983000 * 00984000 * IF A CLOSE IS ALREADY IN EFFECT, THIS CODE IS SKIPPED. 00985000 * MONITOR ACTIVATION REGS ARE TURNED OFF AND THE CURRENT 00986000 * BUFFER IS TRAPPED AS THE LAST IO FOR THE FILE. 00987000 * IF THERE IS OUTSTANDING IO, CLOSING WILL BE HANDLED LATER. 00988000 * THE FINAL SPOOL FILE PAGE IS WRITTEN OUT. THE APPROPRIATE 00989000 * CHECKPOINT ROUTINE IS CALLED, AND THE FILE IS PUT OUT TO THE 00990000 * READER CHAIN. A NEW FILE IS OPENED ACCORDING TO CHECKS 00991000 * IN THE DEFAULT ENVIRONMENT FLAG. 00992000 * A HEADER RECORD IS SCHEDULED FOR THE NEW FILE. 00993000 * 00994000 ********************************************************************** 00995000 SPACE 1 00996000 DMKMIACC RELOC @V50A2B5 00997000 USING SPLINK,R4 @VA07979 00997500 MVC SAVER1(4),F0 INDICATE NO ERROR @V50A2B5 00998000 L R10,=A(DMKPRGMC) GET THE MONITOR @V50A2B5 00999000 L R10,0(R10) COMMUNICATIONS AREA @V50A2B5 01000000 LTR R10,R10 SEE IF IT IS ON @V50A2B5 01001000 BZ EXITS INVALID COMMAND @V50A2B5 01002000 USING MONCOM,R10 @V50A2B5 01003000 TM MONFLAG3,SPOOLED SEE IF WE ARE SPOOLING @V50A2B5 01005000 BNO EXITS INVALID COMMAND @V50A2B5 01006000 TM MONFLAG3,CLSUS ALREADY CLOSING? @V50A2B5 01007000 BO EXITS LEAVE, DO NOT CONFLICT @V50A2B5 01008000 OI MONEX,CLCMD FLAG INDICATING CLOSE CMMD @V50A2B5 01009000 MVC CPCREG8(4),ZEROES NULL OUT CPCREG8 IN PSA @V50A2B5 01010000 L R5,PREFIXB LOCATE OTHER PSA @V50A2B5 01011000 MVC CPCREG8-IPLPSW(4,R5),ZEROES AND NULL OUT THERE @V50A2B5 01012000 LCTL C8,C8,ZEROES ALSO TAKE CARE OF CTL REG8 @V50A2B5 01013000 L R4,MONCURBF LOAD IN CURRENT PAGE @V50A2B5 01014000 OI 9(R4),TRAP TRAP THIS AS LAST IO @V50A2B5 01015000 OI MONFLAG3,CLSUS SUSPEND FOR ALL OUT IO @V50A2B5 01016000 NI 8(R4),MONBUFIO SCHEDULE THIS FOR IO @V50A2B5 01017000 TM MONFLAG2,SUSPEND SEE IF WE ARE SUSPENDED @V50A2B5 01018000 BO CHKIO YES WE ARE @V50A2B5 01019000 TM MONFLAG1,MON1BUF ONE BUFFER MONITORING? @V50A2B5 01020000 BO CONTCLU YES @V50A2B5 01021000 CLC X'10'(2,R4),ZEROES SEE IF BUFFER COMPLETED @V50A2B5 01022000 BE SETUNFIN NO, IT IS NOT @V50A2B5 01023000 B CHKIO YES, SO CHECK IO @V50A2B5 01024000 SETUNFIN OI 9(R4),UNFIN INDICATE WE MUST FILL IN @V50A2B5 01025000 CHKIO L R5,MONIOBF ANY OUTSTANDING IO @V50A2B5 01026000 LTR R5,R5 TEST THIS @V50A2B5 01027000 BNZ EXITS YES, WILL BE TAKEN CARE OF @V50A2B5 01028000 SPACE 2 01029000 CONTCLU EQU * @V50A2B5 01030000 CLC X'10'(2,R4),ZEROES SEE IF THIS IS FILLED IN @V50A2B5 01031000 BNE CONTCL YES, DO NOT FILL IN @V50A2B5 01032000 OI 9(R4),UNFIN INDICATE THIS IS NOT @V50A2B5 01033000 CONTCL EQU * @V50A2B5 01034000 L R3,MONSPLCT BUMP THE SPOOL COUNT @V50A2B5 01035000 LA R3,1(R3) BY ONE @V50A2B5 01036000 ST R3,MONSPLCT AND STORE IT @VA08412 01037000 MVC SPRECNUM,F1 INDICATE 1 RCD BUFF @VA08412 01038000 MVC MONDAS(4),MONDASA GET PROPER DASD PAGE @VA08412 01039000 XC MONDASA(4),MONDASA ZERO OUT AHEAD POINTER @V50A2B5 01040000 USING SFBLOK,R7 @VA07888 01041300 L R7,MONSFB SFB ADDR IN MONCOM @VA07888 01041600 MVC SPPREPAG,MONDASB BACKWARD POINTER @VA07888 01041900 MVC SPNXTPAG(4),SFBSTART FWD PTR TO START FOR CLOSE @VA12761 01042200 TM 9(R4),UNFIN IS THIS PAGE COMPLETE @V50A2B5 01044000 BNO NOFILL YES, IT IS @V50A2B5 01045000 CONTCL1 LA R5,X'10'(R4) ADDRESS OF LENGTH LOCATION @V50A2B5 01046000 L R8,PREFIXA GET CORRECT PSA @V50A2B5 01047000 L R8,MONNEXT-IPLPSW(R8) AND OBTAIN MONNEXT @V50A2B5 01048000 SR R8,R5 COMPUTE LENGTH OF DATA @V50A2B5 01049000 STH R8,0(R5) STORE INTO THE BUFFER @V50A2B5 01050000 NOFILL EQU * @V50A2B5 01051000 NI 9(R4),X'FF'-TRAP-UNFIN TURN OFF THE TRAPS, FLAGS@V50A2B5 01052000 XC MONSPLCT(4),MONSPLCT NULL OUT THE SPOOL COUNT @V50A2B5 01053000 L R5,SFBRECNO GET THE SPOOL FILE REC NO @V50A2B5 01056000 LA R5,1(R5) BUMP UP BY ONE @V50A2B5 01057000 ST R5,SFBRECNO AND STORE IT @V50A2B5 01058000 L R0,MONDAS GET THE DASD FOR THE WRITE @V50A2B5 01059000 MVC 4088(2,R4),SFBFILID SET UP THE FILID @V50A2B5 01060000 MVC 4090(6,R4),SFBTIME PUT IN THE TIME @V50A2B5 01061000 XC 8(4,R4),8(R4) NULL OUT THE FLAGS @V50A2B5 01062000 LA R5,MONBUF1 GET ADDRESS OF FIRST BUFFER@V50A2B5 01063000 COMPR1 C R4,0(R5) SEE IF REALS MATCH @V50A2B5 01064000 BE GETVIRT1 YES, DONE SEARCHING @V50A2B5 01065000 LA R5,8(R5) NO, BUMP TO NEXT ENTRY @V50A2B5 01066000 B COMPR1 AND CONTINUE COMPARING @V50A2B5 01067000 GETVIRT1 L R1,4(R5) LOAD IN THE VIRTUAL ADDRESS@V50A2B5 01068000 LA R9,10 RETRY COUNT IN CASE OF I/O ERROR @VA07979 01068500 CALL DMKRPAPT,PARM=SYSTEM DO THE WRITE @V50A2B5 01069000 BZ IOGOOD NO I/O ERROR PROBLEMS @VA07979 01070500 CLSERR BCT R9,CLSRETRY ERR. TRY AGAIN WITH NEW SLOT @VA07979 01070600 B PERMERR AFTER 10 FAILURES ITS PERMANENT @VA07979 01070700 SPACE 1 01070800 IOGOOD EQU * 01070900 XC 4088(8,R4),4088(R4) NULL OUT THIS INFORMATION @V50A2B5 01071000 MVC SFBPNT(4),MONDAS UPDATE SFBPNT @V50A2B5 01072000 XC 0(20,R4),0(R4) NULL OUT FRONT OF BUFFER @V50A2B5 01073000 OI 8(R4),MONBUFAC FLAG IT AS ACCEPTING @V50A2B5 01074000 SPACE 1 01075000 SR R0,R0 USE R0 TO NULL WITH @V50A2B5 01083000 ST R0,MONDAS BLANK OUT DASD PTRS @V50A2B5 01084000 ST R0,MONDASB CURRENT AND BACKWARD @V50A2B5 01085000 MVC SFBDIST(8),BLANKS BLANK OUT THE DIST FIELD @V50A2B5 01086000 MVC SAVEWRK1+2(2),SFBFILID SAVE FILEID FOR CLOSE MSG@VA07888 01086500 BAL R6,CHAINSFB CHAIN SFBLOK AND CLEAR POINTER @VA07887 01088000 OI SFBFLAG,SFBINUSE TURN ON THE INUSE FLAG @VA13688 01088050 CLC SFBRECNO,F1 IF MORE THAN 1 RECORD @VA07888 01088100 BH CHKCHG UPDATE ORIGINAL CHECKPOINT @VA07888 01088200 CALL DMKCKSPL,PARM=RDRCHN+ADDSFB FIRST, ADD NEW @VA07888 01088300 B DONECKS @VA07888 01088400 CHKCHG CALL DMKCKSPL,PARM=CHGSFB UPDATE EARLIER CHECKPOINT @VA07888 01088500 DONECKS EQU * 01088600 BAL R6,CHNGSFB1 GENERATE DE INTERRUPT @VA14769 01088610 NI SFBFLAG,X'FF'-SFBINUSE TURN INUSE FLAG OFF @VA12826 01088620 CLC SAVER1(4),F0 DASD PERM ERROR OR SPOOL EXHAUSTED@VA07979 01088640 BNE EXHLEAVE YES, SHUTDOWN AND SEND MSGS @VA07979 01088680 SPACE 1 01097000 TM MONFLAG1,CFSTOP ARE WE STOPPING @V50A2B5 01098000 BO ESCAPE YES @V50A2B5 01099000 TM MONEX,CLCMD IS THIS THE CLOSE COMMAND @V50A2B5 01100000 BO YESCLOSE YES, JUST START NEW FILE @V50A2B5 01101000 L R8,=A(DMKSYSAT) SEE IF AUTOSPL ON @V50A2B5 01102000 TM 0(R8),AUTOSPL IS IT ON? @V50A2B5 01103000 BNO ESCAPES CLOSING IMPLIES SHUTDOWN @V50A2B5 01104000 YESCLOSE EQU * @V50A2B5 01105000 NI MONEX,X'FF'-CLCMD TURN OFF CLOSE CMD FLAG @V50A2B5 01106000 CALL DMKMIARO OPEN UP A NEW SPOOL FILE @V50A2B5 01107000 * WON'T RETURN IF NO DASD SLOTS FOR NEW FILE @VA07979 01108500 LR R9,R10 LOAD MONCOM TO REG 9 @V50A2B5 01110000 USING CPEXBLOK,R1 RE ENABLE SUSPEND @V50A2B5 01111000 LA R0,CPEXSIZE BY SHIPPING @V50A2B5 01112000 CALL DMKFREE A CPEXBLOK TO @V50A2B5 01113000 LR R3,R1 DMKMNIDK @V50A2B5 01114000 L R1,=A(DMKMNIDK) THAT IS, ITS REAL ADDRESS @V50A2B5 01115000 TRANS R2,R1,OPT=(SYSTEM,BRING,DEFER,LOCK) @V50A2B5 01116000 LR R1,R3 RESTORE REGISTER 3 @V50A2B5 01117000 ST R2,CPEXADD USE REAL ADDRESS TO RETURN @V50A2B5 01118000 STM R0,R15,CPEXR0 STORE THE REGISTERS @V50A2B5 01119000 ST R2,CPEXR12 ALSO OUR NEW REG 12 @V50A2B5 01120000 L R0,ASYSVM USE THE SYSTEM @V50A2B5 01121000 ST R0,CPEXR11 TO THAT THE EXPENSE @V50A2B5 01122000 L R15,=A(DMKDSPNP) BE SURE TO BUMP THE @V50A2B5 01123000 L R14,0(R15) FREE PAGE COUNTER @V50A2B5 01124000 BCTR R14,0 DOWNWARD @V50A2B5 01125000 ST R14,0(R15) AND STORE @V50A2B5 01126000 LR R1,R3 SO, TAKE THE CPEXBLOK @V50A2B5 01127000 CALL DMKSTKCP AND STACK IT @V50A2B5 01128000 B EXITCL AND EXIT @V50A2B5 01129000 EJECT 01129100 CHAINSFB EQU * HERE TO CHAIN SFBLOK ON READER @VA07887 01129120 * CHAIN AND LOCATE AVAILABLE 01129140 * VIRTUAL READER 01129160 L R14,ARSPRD GET RDR CHAIN @VA07887 01129180 CHAIN1 EQU * @VA07887 01129200 L R15,0(R14) LOCATE END OF CHAIN @VA07887 01129220 LTR R15,R15 ADDRESS EQUAL TO ZERO IF LAST @VA07887 01129240 BZ STSFB BRANCH, END OF CHAIN @VA07887 01129260 LR R14,R15 POINT TO NEXT BLOCK @VA07887 01129280 B CHAIN1 KEEP LOOPING @VA07887 01129300 STSFB EQU * @VA07887 01129320 ST R7,0(R14) CHAIN THE SPOOL FILE @VA07887 01129340 L R14,=A(DMKRSPMN) GET THE OPEN FILE HOLDER @VA07887 01129360 * R15 STILL ZERO 01129380 ST R15,0(R14) ZERO SFBLOK ADDRESS @VA07887 01129400 ST R15,MONSFB ZERO LOCAL SFBLOK ADDRESS @VA07887 01129420 ST R15,SFBPNT CLEAR SFB FWD PTR - LAST ON @VA07888 01129430 BR R6 COMPLETE CHECKPOINT @VA14769 01129431 CHNGSFB1 EQU * @VA14769 01129432 LA R1,SFBUSER GET SFBLOK USER ID @VA07887 01129440 LA R0,8 LENGTH @VA07887 01129460 CALL DMKSCNAU LOCATE VMBLOK @VA07887 01129480 BNZR R6 RETURN, USER NOT LOGGED @VA07887 01129500 * R7 = ADDRESS OF SFBLOK 01129520 CALL DMKSPLSP LOCATE AVAILABLE VIRTUAL READER @VA07887 01129540 BR R6 RETURN TO CALLER @VA07887 01129560 SPACE 2 01130000 ESCAPES EQU * @V50A2B5 01131000 LA R0,L'AUTSPLMG LENGTH OF AUTO/SHUT MSG @V50A2B5 01132000 LA R1,AUTSPLMG ADDRESS OF AUTO/SHUT MSG @V50A2B5 01133000 CALL DMKQCNWT,PARM=OPERATOR+NORET SEND OUT MESSAGE @V50A2B5 01134000 BAL R6,MONUMSG SHIP MESSAGE TO MON USER @V50A2B5 01135000 BAL R6,MONOMSG AND FILE RECEIVER @V50A2B5 01136000 SPACE 1 01137000 ESCAPE LR R9,R10 PUT MONCOM ADDR IN REG 9 @V50A2B5 01138000 MVC SAVER1(4),F2 INDICATE CLOSURE @V50A2B5 01139000 LA R0,CPEXSIZE FORM A CPEXBLOK @V50A2B5 01140000 USING CPEXBLOK,R1 @V50A2B5 01141000 CALL DMKFREE ACQUIRE STORAGE @V50A2B5 01142000 STM R0,R15,CPEXR0 STORE THE REGISTERS @V50A2B5 01143000 L R2,=A(DMKENTFI) ADDRESS OF SHUT OFF RTNE @V50A2B5 01144000 ST R2,CPEXADD STORE REG 12 @V50A2B5 01145000 ST R2,CPEXR12 FOR ADDRESSABILITY @V50A2B5 01146000 L R2,MONAIOB GET THE IOB ADDRESS @V50A2B5 01147000 ST R2,CPEXR10 AND GIVE TO REG10 @V50A2B5 01148000 CALL DMKSTKCP STACK THE CPEXBLOK @V50A2B5 01149000 DROP R1 @V50A2B5 01150000 EXITCL EQU * @VA07979 01151500 LH R1,SAVEWRK1+2 GET SPOOL FILE ID @VA07888 01152500 CALL DMKCVTBD CONVERT TO CHARACTERS @V50A2B5 01153000 ST R1,TIMVAL PUT HERE ON ALIGN @V50A2B5 01154000 MVC MSGID(4),TIMVAL PUT IN THE MESSAGE @V50A2B5 01155000 L R3,=A(DMKSYSUR) GET THE RECEIVER @V50A2B5 01156000 MVC MSGUR(8),0(R3) PUT IN THE MESSAGE @V50A2B5 01157000 LA R1,CLOSMSG GET ADDRESS OF CLOSE MSG @V50A2B5 01158000 LA R0,CLOSMSGS GET LENGTH OF CLOSE MSG @V50A2B5 01159000 CALL DMKQCNWT,PARM=OPERATOR+NORET PUT OUT MESSAGE @V50A2B5 01160000 BAL R6,MONUMSG LET USER KNOW @V50A2B5 01161000 BAL R6,MONOMSG LET RECEIVER KNOW @V50A2B5 01162000 B EXITS AND EXIT @V50A2B5 01163000 DROP R7 @V50A2B5 01164000 EJECT 01165000 MSG002 LA R2,2 ILLEGAL OPERAND @V50A2B5 01166000 B CALLERM CALL MESSAGE ROUTINE @V50A2B5 01167000 SPACE 1 01168000 MSG225 LA R2,225 ILLEGAL MONITOR USERID @V50A2B5 01169000 SR R1,R1 ZIP OUT FIELDS @V50A2B5 01170000 B CALLERM CALL MESSAGE ROUTINE @V50A2B5 01171000 SPACE 1 01172000 CALLERM ICM R0,B'1110',MODID+3 MODULE ID FOR MESSAGE @V50A2B5 01173000 ST R2,WORK2 WORK ON REGISTER 2 @V50A2B5 01174000 ST R2,SAVER2 TO PUT IN FLAGS @V50A2B5 01175000 MVI WORK2,X'80' INDICATE TO RETURN HERE @VA07863 01176000 L R2,WORK2 PULL OUT REGISTER 2 @V50A2B5 01177000 CALL DMKERMSG PUT OUT THE ERROR MESSAGE @V50A2B5 01178000 B EXITS AND EXIT @V50A2B5 01179000 EJECT 01180000 *. 01181000 * 01182000 * ENTRY POINT - 01183000 * 01184000 * DMKMIAEN 01185000 * 01186000 * ENTRY CONDITIONS - 01187000 * 01188000 * GPR11 - ADDRESS OF VMBLOK OF USER 01189000 * GPR13 - ADDRESS OF SAVE AREA 01190000 * 01191000 * EXIT CONDITIONS - 01192000 * 01193000 * NONE 01194000 * 01195000 * EXTERNAL REFERENCES - 01196000 * 01197000 * DMKFREE - ROUTINE TO ACQUIRE STORAGE FOR COMMAND BUFFER 01198000 * DMKFRET - ROUTINE TO RELEASE STORAGE FOR COMMAND BUFFER 01199000 * DMKMCCCL - ROUTINE TO EXECUTE COMMAND BUFFER 01200000 * DMKQCNWT - ROUTINE TO SEND OUT A MESSAGE 01201000 * 01202000 * REGISTER USAGE - 01203000 * 01204000 * GPR11 - ADDRESS OF VMBLOK OF USER 01205000 * GPR12 - ADDRESSABILITY 01206000 * GPR13 - SAVE AREA 01207000 * 01208000 * OPERATION - 01209000 * 01210000 * A COMMAND BUFFER IS OBTAINED; THE 'MONITOR STOP' COMMAND 01211000 * IS SIMULATED WITH IT BY A CALL TO DMKMCCCL. ON RETURN, 01212000 * THE COMMAND BUFFER IS FREED. 01213000 * 01214000 *. 01215000 SPACE 1 01216000 DMKMIAEN RELOC @V50A2B5 01217000 LA R0,L'STOPMSG LENGTH OF AUTOSTOP MESSAGE @V50A2B5 01218000 LA R1,STOPMSG ADDRESS OF AUTOSTOP MESSAGE@V50A2B5 01219000 CALL DMKQCNWT,PARM=NORET+OPERATOR SEND OUT MESSAGE @V50A2B5 01220000 BAL R6,MONUMSG LET THE USER KNOW @V50A2B5 01221000 BAL R6,MONOMSG AND THE RECEIVER @V50A2B5 01222000 LA R0,18 GET A MESSAGE WORK AREA @V50A2B5 01223000 CALL DMKFREE ACQUIRE THE STORAGE @V50A2B5 01224000 MVC 0(SPMSGSZ,R1),SPMSG MOVE IN THE COMMAND @V50A2B5 01225000 LR R9,R1 R9 POINTS TO THE WORK AREA @V50A2B5 01226000 ST R1,X'88'(R9) PUT IN POINTER @V50A2B5 01227000 LA R5,SPMSGSZ ALSO THE SIZE @V50A2B5 01228000 BCTR R5,R0 MINUS ONE @V50A2B5 01229000 ST R5,X'8C'(R9) STORE IN THE BUFFER @V50A2B5 01230000 CALL DMKMCCCL EXECUTE THE COMMAND @V50A2B5 01231000 LA R0,18 RETURN THE MESSAGE AREA @V50A2B5 01232000 CALL DMKFRET GET RID OF IT @V50A2B5 01233000 B EXITS LEAVE @V50A2B5 01234000 EJECT 01235000 *. 01236000 * 01237000 * THIS IS DISPLACED CODE FROM DMKMON 01238000 * IT WAS TAKEN OUT TO MAKE ROOM IN THAT MODULE FOR OTHER UPDATES 01239000 * 01240000 *. 01241000 SPACE 1 01242000 ENTRY DMKMIAX1 01243000 DMKMIAX1 DC V(DMKPAGPS) NO. OF PAGING SIO'S @V2B2638 01244000 DC V(DMKPAGCC) NO. OF CALLS TO DMKPAG @V2B2638 01245000 DC V(DMKPTRFN) NO. PAGE FRAMES ON THE FREE LIST @V2B2638 01246000 DC V(DMKPTRSW) NO. OF PAGES BEING SWAPPED @V2B2638 01247000 DC V(DMKPTRPR) NO. OF PAGES FLUSHED BUT RECLAIM @V2B2638 01248000 DC V(DMKPTRRC) NO. OF RESERVED PAGES @V2B2638 01249000 DC V(DMKPTRSC) NO. OF SHARED SYSTEM PAGES @V2B2638 01250000 DC V(DMKPTRF0) NO. OF TIMES FREE LIST WAS EMPTY @V2B2638 01251000 DC V(DMKPTRFC) NO. OF CALLS TO DMKPTRFR @V2B2638 01252000 DC V(DMKPTRSS) NO. PAGES STOLEN FROM IN Q USERS @V2B2638 01253000 DC V(DMKPTRFF) NO. PAGES SWAPPED FROM FLUSH LIST@V2B2638 01254000 DC V(DMKPTRRF) NO. OF PAGES EXAMINED FOR A STEAL@V2B2638 01255000 DC V(DMKPTRCS) NO. OF COMPLETE SCANS FOR A STEAL@V2B2638 01256000 DC V(DMKPSANX) NO. OF REAL EXTERNAL INTERRUPTS @V2B2638 01257000 DC V(DMKPRVNC) NO. OF CALLS TO DMKPRVLG @V2B2638 01258000 DC V(DMKVSICT) NO. OF CALLS TO DMKVIOEX @VA05037 01259000 DC V(DMKVSICW) NO. CALLS TO DMKCCW FROM DMKVSI @VA05037 01260000 DC V(DMKDSPIT) NO. OF INT TIMER INT. REFLECTED @V2B2638 01261000 DC V(DMKDSPPT) NO. OF CPU TIMER INT. REFLECTED @V2B2638 01262000 DC V(DMKDSPCK) NO. OF CLOCK COMP INT REFLECTED @V2B2638 01263000 DC A(PSASVCCT-IPLPSW) NO. OF SVC INT. REFLECTED @V2B2638 01264000 DC V(DMKPRGCT) NO. OF PROGRAM INT. HANDLED @V2B2638 01265000 DC V(DMKIOTCT) NO. OF I/O INTERRUPTS HANDLED @VA09587 01266000 DC V(DMKDSPCC) NO. OF CALLS DMKDSP (MAIN ENTRY) @V2B2638 01267000 DC V(DMKDSPAC) NO. OF FAST REFLECTS IN DMKDSP @V2B2638 01268000 DC V(DMKDSPBC) NO. OF DISPATCHES FOR NEW PSW'S @V2B2638 01269000 DC V(DMKSCHCT) NO. OF CALLS TO DMKSCHDL @V2B2638 01270000 DC V(DMKPRVEK) INST COUNT FOR X'08' SSK @V2B2638 01271000 DC V(DMKPRVIK) INST COUNT FOR X'09' ISK @V2B2638 01272000 DC V(DMKPRVMS) INST COUNT FOR X'80' SSM @V2B2638 01273000 DC V(DMKPRVLP) INST COUNT FOR X'82' LPSW @V2B2638 01274000 DC V(DMKPRVDI) INST COUNT FOR X'83' DIAG @V2B2638 01275000 DC V(DMKVSISI) INST COUNT FOR X'9CX0' SIO @VA05037 01276000 DC V(DMKVSISF) INST COUNT FOR X'9CX1' SIOF @VA05037 01277000 DC V(DMKVSITI) INST COUNT FOR X'9DX0' TIO @VA05037 01278000 DC V(DMKVSICI) INST COUNT FOR X'9DX1' CLRIO @VA05037 01279000 DC V(DMKVSJHI) INST COUNT FOR X'9EX0' HIO @VA12128 01280000 DC V(DMKVSJHD) INST COUNT FOR X'9EX1' HDV @VA12128 01281000 DC V(DMKVSITC) INST COUNT FOR X'9F' TCH @VA05037 01282000 DC V(DMKPRVMN) INST COUNT FOR X'AC' STNSM @V2B2638 01283000 DC V(DMKPRVMO) INST COUNT FOR X'AD' STOSM @V2B2638 01284000 DC V(DMKPRVLR) INST COUNT FOR X'B1' LRA @V2B2638 01285000 DC V(DMKPRVCP) INST COUNT FOR X'B202' STIDP @V2B2638 01286000 DC V(DMKPRVCH) INST COUNT FOR X'B203' STIDC @V2B2638 01287000 DC V(DMKPRVTE) INST COUNT FOR X'B204' SCK @V2B2638 01288000 DC V(DMKPRVCE) INST COUNT FOR X'B206' SCKC @V2B2638 01289000 DC V(DMKPRVCT) INST COUNT FOR X'B207' STCKC @V2B2638 01290000 DC V(DMKPRVPE) INST COUNT FOR X'B208' SPT @V2B2638 01291000 DC V(DMKPRVPT) INST COUNT FOR X'B209' STPT @V2B2638 01292000 DC V(DMKPRVEP) INST COUNT FOR X'B20A' SPKA @V2B2638 01293000 DC V(DMKPRVIP) INST COUNT FOR X'B20B' IPK @V2B2638 01294000 DC V(DMKPRVPB) INST COUNT FOR X'B20D' PTLB @V2B2638 01295000 DC V(DMKPRVRR) INST COUNT FOR X'B213' RRB @V2B2638 01296000 DC V(DMKPRVTC) INST COUNT FOR X'B6' STCTL @V2B2638 01297000 DC V(DMKPRVLC) INST COUNT FOR X'B7' LCTL @V2B2638 01298000 DC V(DMKPRVCS) INST COUNT FOR X'BA' CS @V2B2638 01299000 DC V(DMKPRVCD) INST COUNT FOR X'BB' CDS @V2B2638 01300000 DC V(DMKHVCDI) DIAGNOSE I/O SIMULATION COUNT @V2B2638 01301000 DC V(DMKSYSND) NO. OF USERS DIALED TO A VIRT @V2B2638 01302000 * MACH 01303000 DC V(DMKSYSNM) NO. OF USERS LOGGED ON @V2B2638 01304000 DC A(PGREAD-IPLPSW) NO. OF PAGE READS @V2B2638 01305000 DC A(PGWRITE-IPLPSW) NO. OF PAGE WRITES @V2B2638 01306000 DC V(DMKDSPNP) NO. OF SYSTEM PAGABLE PAGES @V2B2638 01307000 DC V(DMKSCHPU) SUM OF WORKING SETS OF IN Q USERS@V2B2638 01308000 DC V(DMKSCHN1) NO. OF USERS IN Q1 @V2B2638 01309000 ENTRY DMKMIAX2 01310000 DMKMIAX2 DC V(DMKSCHN2) NO. OF USERS IN Q2 @V2B2638 01311000 *. 01312000 SPACE 2 01313000 ENTRY DMKMIAY1 01314000 DMKMIAY1 DC V(DMKPSANX) NUMBER OF REAL EXT INTERRUPTS @V4075A4 01315000 DC A(PSASVCCT-IPLPSW) NUM OF SVC INT. REFLECTED @V4075A4 01316000 DC A(PGREAD-IPLPSW) NUMBER OF PAGE READS @V4075A4 01317000 DC A(PGWRITE-IPLPSW) NUMBER OF PAGE WRITES @V4075A4 01318000 AIF (NOT &AP).LOKSY6 01318700 DC A(DMKLOKSY+8) TOTAL TIME SPIN ON SYSTEM LOCK @V4M0153 01319000 DC A(DMKLOKSY+12) TOTAL NO. SPINS FOR SYSTEM LOCK @V4M0153 01320000 DC A(DMKLOKFR+8) TOTAL TIME SPIN ON DMKFRE LOCK @V4M0153 01321000 DC A(DMKLOKFR+12) TOTAL NO. SPINS FOR DMKFRE LOCK @V4M0153 01322000 DC A(DMKLOKRL+8) TOTAL TIME SPIN ON RUNLIST LOCK @V4M0153 01323000 DC A(DMKLOKRL+12) TOTAL NO. SPINS FOR RUNLIST LOCK @V4M0153 01324000 DC A(DMKLOKTR+8) TOTAL TIME SPIN ON TIMER REQ LOCK@V4M0153 01325000 DC A(DMKLOKTR+12) TOTAL NO. SPINS FOR TIMER REQ LCK@V4M0153 01326000 DC A(DMKLOKDS+8) TOTAL TIME SPIN ON DISPATCHER LCK@V4M0153 01327000 DC A(DMKLOKDS+12) TOTAL NO. SPINS FOR DISPTCHR LOCK@V4M0153 01328000 AGO .LOKSY7 01328100 .LOKSY6 ANOP 01328200 DC 10F'0' RESERVE ENTRIES FOR AP LOCKS @V4M0221 01328300 .LOKSY7 ANOP 01328400 DC A(DMKFRENP+8) NO. TIMES CPFRELK SET @V4M0153 01329000 DC A(DMKFRENP+12) NO. TIMES CPFRESW SET @V4M0153 01330000 AIF (NOT &AP).LOKCT4 01330900 DC V(DMKLOKCT) NO. SYS LOCK REQUESTS DEFERRED @V4M0153 01331000 DC A(DMKLOKCT+4) NO. VMLOCK REQUESTS DEFERRED @V4M0221 01332000 AGO .LOKCT5 01332600 .LOKCT4 ANOP 01332700 DC 2F'0' AP LOCK COUNT ENTRIES @V4M0221 01332800 .LOKCT5 ANOP 01332900 ENTRY DMKMIAY2 01333000 AIF (NOT &AP).DSPRC4 01333750 DMKMIAY2 DC V(DMKDSPRC) NO. DMKDSPRU ENTRIES @V4M0221 01333800 AGO .DSPRC5 01333850 .DSPRC4 ANOP 01333900 DMKMIAY2 DC F'0' NO (AP) DMKDSPRU ENTRIES @V4M0221 01333950 .DSPRC5 ANOP 01334000 EJECT @V50A2B5 01335000 WORK2 DS F @V50A2B5 01336000 TIMVAL DS 0D @V50A2B5 01337000 DC CL8' ' @V50A2B5 01338000 TIMESTRT DC CL8' ' @V50A2B5 01339000 TIMEEND DC CL8' ' @V50A2B5 01340000 STMSG DC C'START SPOOL TO ' @V50A2B5 01341000 STUID DS CL8 @V50A2B5 01342000 DC C' ' @V50A2B5 01343000 BUFFS DC C'BUFFS ' @V50A2B5 01344000 BUFFNO DC C' ' @V50A2B5 01345000 DC X'00' @V50A2B5 01346000 STMSGSZ EQU *-STMSG @V50A2B5 01347000 SPMSG DC C'STOP SPOOL ' @V50A2B5 01348000 SPMSGSZ EQU *-SPMSG @V50A2B5 01349000 CLOSMSG DC C'SPOOL FILE ' @V50A2B5 01350000 MSGID DS CL4 @V50A2B5 01351000 DC C' SENT TO ' @V50A2B5 01352000 MSGUR DS CL8 @V50A2B5 01353000 CLOSMSGS EQU *-CLOSMSG @V50A2B5 01354000 SPACE 1 01355000 ENAB DC CL8'ENABLED ' @V50A2B5 01356000 DISAB DC CL8'DISABLED' @V50A2B5 01357000 CLSMSG DC C'CLOSE ' @V50A2B5 01358000 CLSMSGSZ EQU *-CLSMSG @V50A2B5 01359000 STARTMSG DC C'MONITOR AUTO STARTING' @VA07979 01360100 STOPMSG DC C'MONITOR AUTO STOPPING' @VA07979 01361100 NODASMSG DC C'SPOOL DASD FULL, MONITOR STOPPED' @VA07979 01362100 WRIDASMG DC C'DASD ERROR, MONITOR STOPPED' @VA07979 01363100 DISPMSG1 DC C'CLS KEYWORD STATUS' @V50A2B5 01364000 AUTSPLMG DC C'SPOOL LIMIT REACHED, MONITOR STOPPED' @VA07979 01365100 BADEN DC C'ONLY PERFORM ALLOWED WITH 1 BUFFER' @VA07979 01366100 MONCLTBL DS 0F @V50A2B5 01367000 DC CL8'PERFORM ',X'03' @V50A2B5 01368000 DC CL8'RESPONSE',X'03' @V50A2B5 01369000 DC CL8'SCHEDULE',X'02' @V50A2B5 01370000 DC CL8' ',X'09' @V50A2B5 01371000 DC CL8'USER ',X'03' @V50A2B5 01372000 DC CL8'INSTSIM ',X'03' @V50A2B5 01373000 DC CL8'DASTAP ',X'02' @V50A2B5 01374000 DC CL8'SEEKS ',X'03' @V50A2B5 01375000 DC CL8'SYSPROF ',X'02' @V50A2B5 01376000 MONTBENO EQU (*-MONCLTBL)/9 NUMBER OF ENTRIES IN THE TABLE @V50A2B5 01377000 CLASNOS DC C'00010203040506070809101112131415' LIST OF @VA08367 01378100 * CLASS 01378200 SET24 DC X'000141DD76000000' @V50A2B5 01379000 LENMSG EQU 21 LENGTH OF DISPLAY MESSAGE @V50A2B5 01380000 MDAER EQU X'80' MONITOR DASD ERROR @VA07979 01380500 MNWROK EQU X'40' WRITE COMPLETED OK @VA07979 01380600 COPY SPOOL @V50A2B5 01381000 COPY EQU @V50A2B5 01382000 PSA @V50A2B5 01383000 COPY VMBLOK @V50A2B5 01384000 COPY DEVTYPES @V50A2B5 01385000 COPY MONBLOKS @V50A2B5 01386000 COPY SAVE @V50A2B5 01387000 COPY CORE @V50A2B5 01388000 COPY TIMER @V50A2B5 01389000 END DMKMIA 01390000