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