MCC TITLE 'DMKMCC (CP) VM/370 - RELEASE 6' 00001000
*. 00002000
* 00003000
* MODULE NAME - 00004000
* 00005000
* DMKMCC 00006000
* 00007000
* FUNCTION - 00008000
* 00009000
* TO HANDLE MONITOR CONTROL COMMANDS 00010000
* 00011000
* ATTRIBUTES - 00012000
* 00013000
* REENTRANT, PAGEABLE, CALLED VIA SVC 00014000
* 00015000
* ENTRY POINTS - 00016000
* 00017000
* DMKMCCCL - TO PROCESS THE 'MONITOR' COMMANDS. 00018000
* 00019000
* ENTRY CONDITIONS - 00020000
* 00021000
* GPR9 - ADDRESS OF COMMAND LINE BUFFER 00022000
* GPR11 - ADDRESS OF VMBLOK 00023000
* GPR12 - ADDRESS OF ENTRY POINT 00024000
* GPR13 - ADDRESS OF STANDARD SAVEAREA 00025000
* 00026000
* EXIT CONDITIONS - 00027000
* 00028000
* NONE 00029000
* 00030000
* CALLS TO OTHER ROUTINES - 00031000
* 00032000
* DMKSCNFD - TO LOCATE NEXT FIELD IN INPUT LINE 00033000
* DMKQCNWT - TO SEND A MESSAGE TO THE TERMINAL 00034000
* DMKERMSG - TO SEND CANNED ERROR MESSAGE TO TERMINAL 00035000
* DMKPTRFR - TO OBTAIN A PAGE OF STORAGE FOR MONITOR DATA 00036000
* DMKMONSH - MONITOR STOP ROUTINE 00037000
* DMKCVTHB - TO CONVERT DEVICE ADDRESS TO BINARY 00038000
* DMKCVTDB - TO CONVERT INTERVAL TO BINARY 00039000
* DMKSCNRU - TO OBTAIN RDEVBLK ADDRESS FROM DEV. ADDRESS 00040000
* DMKFREE - TO OBTAIN STORAGE FOR MESSAGES 00041000
* DMKFRET - TO RELEASE STORAGE USED FOR MESSAGES 00042000
* DMKSCHST - TO ENQUEUE A TIMER RQST. BLOCK FOR MONITORING 00043000
* DMKSCHRT - TO REMOVE A TIMER RQST. BLOCK FROM QUEUE 00044000
* DMKMONTH - TAPE HEADER ROUTINE 00045000
* 00046000
* EXTERNAL REFERENCES - 00047000
* 00048000
* DMKPRGC8 - STORAGE FOR CONTROL REGISTER 8 00049000
* DMKPRGMC - ADDRESS OF MONITOR COMMUNICATIONS AREA 00050000
* DMKPRGTI - INTERVAL BETWEEN TIMER INTERRUPTS 00051000
* DMKPRGMI - ADDRESS OF THE MONITOR PROGRAM INTERRUPT HANDLER 00052000
* 00053000
EJECT 00054000
* REGISTER USAGE - 00055000
* 00056000
* GPR0 - COMMAND ARGUMENT LENGTH, AND OUTPUT MSG LENGTH 00057000
* GPR1 - COMMAND ARGUMENT ADDRESS, AND OUTPUT MSG ADDRESS 00058000
* GPR2 - GPR10 - WORK REGISTERS 00059000
* GPR11 - VMBLOK ADDRESS 00060000
* GPR12 - BASE REG 00061000
* GPR13 - SAVE AREA ADDRESS 00062000
* GPR14 - LINKAGE REG 00063000
* GPR15 - LINKAGE REG 00064000
* 00065000
* COMMAND FORMAT - 00066000
* 00067000
* +---------+---------+-------------------------------------+ 00068000
* | MONITOR | | | 00069000
* | MON | | | 00070000
* | | AUTODISK| ON | 00071000
* | | | OFF | 00072000
* | | | | 00073000
* | | CLOSE | | 00074000
* | | | | 00075000
* | | DISPLAY | ALL | 00076000
* | | | TAPE | 00077000
* | | | SPOOL | 00078000
* | | | | 00079000
* | | ENABLE | PERFORM | 00080000
* | | | RESPONSE | 00081000
* | | | SCHEDULE | 00082000
* | | | USER | 00083000
* | | | INSTSIM | 00084000
* | | | DASTAP | 00085000
* | | | SEEKS | 00086000
* | | | SYSPROF | 00087000
* | | | | 00088000
* | | INTERVAL| INT SEC | 00089000
* | | | MIN | 00090000
* | | | | 00091000
* | | LIMIT | NO. | STOP | 00092000
* | | | | NOSTOP | 00093000
* | | | * | | 00094000
* | | | | 00095000
* | | | | 00096000
* | | START | CPTRACE | 00097000
* | | | SPOOL TO USERID BUFFS | 00098000
* | | | TAPE RADDR MODE 800 BUFFS | 00099000
* | | | 1600 | 00100000
* | | | 6250 | 00101000
* | | | | 00102000
* | | STOP | CPTRACE | 00103000
* | | | SPOOL | 00104000
* | | | TAPE | 00105000
* | | | | 00106000
* | | TIME | FROM (HH:SS) TO (HH:SS) | 00107000
* | | | FOR (HH:SS) | 00108000
* | | | ALL | 00109000
* | | | NONE | 00110000
* +---------+---------+-------------------------------------+ 00111000
* 00112000
* OPERATION - 00113000
* 00114000
* MONITOR COMMAND PROCESSING 00115000
* 00116000
* CALL DMKSCNFD TO LOCATE AN ARGUMENT. IF NONE IS 00117000
* FOUND THEN EXIT WITH AN APPROPRIATE ERROR MESSAGE. 00118000
* 00119000
* IF THE ARGUMENT IS DISPLAY THEN GO TO DISPLAY. 00120000
* IF THE ARGUMENT IS ENABLE THEN GO TO ENABLE. 00121000
* IF THE ARGUMENT IS INTERVAL THEN GO TO INTERVAL. 00122000
* IF THE ARGUMENT IS START THEN GO TO START. 00123000
* IF THE ARGUMENT IS TIME THEN GO TO TIME 00123100
* IF THE ARGUMENT IS CLOSE THEN GO TO CLOSE 00123200
* IF THE ARGUMENT IS STOP THEN GO TO STOP. 00124000
* IF THE ARGUMENT IS NONE OF THESE THEN EXIT WITH AN 00125000
* APPROPRIATE ERROR MESSAGE. 00126000
* 00127000
* DISPLAY: 00128000
* 00129000
* OBTRAIN A REPLY BUFFER FROM FREE STORAGE AND OUTPUT 00130000
* A REPLY HEADER VIA A CALL TO DMKQCNWT. 00131000
* 00132000
* SCAN THE MONITOR CLASS TABLE AND MOVE THE CLASS 00133000
* NUMBER AND KEYWORD INTO THE REPLY BUFFER. 00134000
* 00135000
* IN PARALLEL WITH THE SCAN OF THE CLASS TABLE, SCAN 00136000
* THE CURRENT CONTROL REGISTER 8 IN DMKPRGC8. IF THE 00137000
* BIT IN THE MASK IS ONE THEN MOVE 'ENABLED' INTO THE 00138000
* REPLY BUFFER. IF THE BIT IS ZERO THEN MOVE 00139000
* 'DISABLED' INTO THE REPLY BUFFER. 00140000
* 00141000
* OUTPUT THE MESSAGE VIA A CALL TO DMKQCNWT AND LOOP 00142000
* BACK UNTIL ALL ENTRIES HAVE BEEN EXAMINED. 00143000
* 00144000
* FINALLY, RELEASE THE REPLY BUFFER AND EXIT. 00145000
* 00146000
* ENABLE: 00147000
* 00148000
* SCAN THE REMAINING ARGUMENTS OF THE COMMAND LINE. 00149000
* SEARCH THE CLASS TABLE FOR EACH ARGUMENT. IF A 00150000
* MATCHING ENTRY IS NOT FOUND THEN EXIT WITH AN 00151000
* APPROPRIATE ERROR MESSAGE. WHEN A MATCHING ENTRY 00152000
* IS FOUND IN THE CLASS TABLE, SET THE CORRESPONDING 00153000
* MONITOR CALL CLASS BIT IN THE WORK REG BEING 00154000
* CONSTRUCTED FOR CR8. 00155000
* 00156000
* SAVE THE NEW CR8 VALUE IN DMKPRGC8 AND EXIT. 00157000
* 00158000
* INTERVAL: 00159000
* 00160000
* 00161000
* CALL THE COMMAND PROCESSOR EXTENSION, DMKMCD, TO PROCESS 00161100
* CALL DMKSCNFD TO GET THE INTERVAL VALUE. IF NONE 00162000
* WAS GIVEN THEN EXIT WITH AN APPROPRIATE ERROR 00163000
* MESSAGE. IF THE INTERVAL WAS GIVEN THEN CALL 00164000
* DMKCVTDB TO CONVERT IT TO BINARY. 00165000
* 00166000
* CALL DMKSCNFD TO LOCATE THE NEXT ARGUMENT. IF IT 00167000
* IS 'SEC' THEN GO TO STEP 13. IF IT IS 'MIN' THEN 00168000
* MULTIPLY THE INTERVAL BY 60 TO CONVERT IT TO 00169000
* SECONDS. 00170000
* 00171000
* IF THE SPECIFIED VALUE IS LESS THAN 30 SECONDS OR 00172000
* MORE THAN 9 HOURS, THEN EXIT WITH AN APPROPRIATE 00173000
* ERROR MESSAGE. OTHERWISE, STORE THE INTERVAL IN 00174000
* DMKPRGTI AND EXIT WITH AN ACKNOWLEDGMENT MESSAGE. 00175000
* 00176000
* START: 00177000
* 00178000
* CALL DMKSCNFD TO LOCATE THE NEXT ARGUMENT. IF IT 00179000
* IS 'CPTRACE' THEN GO TO START CPTRACE. IF IT IS 00180000
* 'TAPE' THEN GO TO START TAPE. IF IT IS NEITHER OF 00181000
* THESE THEN EXIT WITH AN APPROPRIATE ERROR MESSAGE. 00182000
* AS OF RELEASE 5, SPOOL IS ALSO A VALID ARGUMENT 00182100
* 00183000
* START CPTRACE: 00184000
* 00185000
* IF THE INTERNAL TRACE TABLE IS ACTIVE THEN EXIT 00186000
* WITH AN APPROPRIATE ERROR MESSAGE. OTHERWISE, 00187000
* START ALL FLAVORS OF INTERNAL TRACING AND EXIT. 00188000
* 00189000
* START TAPE OR SPOOL: 00190100
* 00191000
* IF THE MONITOR IS ALREADY ACTIVE THEN EXIT WITH AN 00192000
* APPROPRIATE ERROR MESSAGE. IF NO CLASSES ARE 00193000
* ENABLED THEN EXIT WITH AN APPROPRIATE ERROR 00194000
* MESSAGE. 00195000
* 00196000
* CALL DMKSCNFD TO LOCATE THE TAPE DRIVE ADDRESS 00197000
* FIELD. IF NO ARGUMENT WAS FOUND THEN EXIT WITH AN 00198000
* APPROPRIATE ERROR MESSAGE. 00199000
* 00200000
* CHECK THE VALIDITY OF THE ADDRESS, CONVERT IT TO 00201000
* BINARY, LOCATE REAL DEVICE BLOCK, AND CHECK THE 00202000
* AVAILABILITY AND SUITABILITY OF THE DEVICE. IF ANY 00203000
* OF THESE CHECKS FAIL, THEN EXIT WITH AN APPROPRIATE 00204000
* ERROR MESSAGE. 00205000
* 00206000
* CALL DMKSCNFD TO SEARCH FOR A MODE OR BUFFS 00207000
* SPECIFICATION. IF EITHER IS FOUND, CHECK VALIDITY. 00208000
* EXIT WITH APPROPRIATE ERROR MESSAGE IF INVALID INPUT 00209000
* HAS BEEN SPECIFIED. IF NO MODE IS SPECIFIED, SET THE 00210000
* DEFAULT TO THE RESET VALUE (X'C3' = 1600 BPI). IF 00211000
* NO BUFFS VALUE IS SPECIFIED, SET THE DEFAULT BUFFS 00212000
* VALUE ACCORDING TO THE CPU MODEL (2 FOR 135-145, 3 FOR 00213000
* 148-158, AND 4 FOR 168). 00214000
* 00215000
* IF ALL OF THE CHECKS ARE PASSED, THEN RESERVE THE 00216000
* DEVICE FOR SYSTEM USE. 00217000
* 00218000
* OBTAIN STORAGE FOR THE MONITOR COMMUNICATIONS AREA 00219000
* (MONCOM) AND SAVE ITS ADDRSS IN DMKPRGMC. 00220000
* 00221000
* CALL DMKPTR TO PAGE IN AND LOCK THE DMKMON MODULE. 00222000
* SAVE ITS ADDRESS IN DMKPRGMI. 00223000
* 00224000
* OBTAIN STORAGE FOR AN IOBLOK TO BE USED FOR THE 00225000
* TAPE I/O REQUESTS. 00226000
* 00227000
* FINISH INITIALIZING THE IOBLOK AND BUILD THE 00228000
* CHANNEL PROGRAMS TO BE USED BY THE MONITOR. 00229000
* 00230000
* OBTAIN STORAGE FOR A CPEXBLOK FOR DEFERED CALLS TO 00231000
* IOS BY DMKMON. OBTAIN TWO PAGES OF FLIP FLOP DATA 00232000
* COLLECTION BY CALLS TO DMKPTRFR. 00233000
* 00234000
* IF ANY TIMER DATA COLLECTION CLASSES ARE ENABLED 00235000
* THEN OBTAIN, INITIALIZE AND SCHEDULE A TRQBLOK. AT 00236000
* THE SAME TIME, INITIALIZE DMKPRGTI IF IT ISN'T 00237000
* ALREADY. 00238000
* 00239000
* CALL DMKMNITH TO ISSUE THE INITIAL CCW SEQUENCE. 00240000
* THE I/O INTERRUPT ASSOCIATED WITH THE INITIAL CCW'S 00241000
* WILL COMPLETE THE INITIATION OF THE MONITOR, 00242000
* INCLUDING THE COLLECTION OF THE HEADER RECORDS, 00243000
* WITHIN DMKMON. 00244000
* 00245000
* EXIT AFTER SENDING THE 'COMMAND COMPLETE' MESSAGE. 00246000
* 00247000
* STOP: 00248000
* 00249000
* CALL THE COMMAND PROCESSOR EXTENSION, DMKMCD, TO PROCESS 00249100
* CALL DMKSCNFD TO LOCATE THE NEXT ARGUMENT. IF IT 00250000
* IS 'CPTRACE' THEN GO TO STOP CPTRACE. IF IT IS 00251000
* 'TAPE' THEN GO TO STOP TAPE. IF IT IS NEITHER OF 00252000
* THESE THEN EXIT WITH AN APPROPRIATE ERROR MESSAGE. 00253000
* AS OF RELEASE 5, SPOOL IS ALSO A VALID ARGUMENT 00253100
* 00254000
* STOP CPTRACE: 00255000
* 00256000
* IF CP INTERNAL TRACING IS NOT ACTIVE THEN EXIT WITH 00257000
* AN APPROPRIATE ERROR MESSAGE. OTHERWISE, SET THE 00258000
* TRACE FLAGS TO ZEROES AND EXIT AFTER SENDING THE 00259000
* 'COMMAND COMPLETE' MESSAGE. 00260000
* 00261000
* STOP TAPE OR SPOOL: 00262100
* 00263000
* IF MONITORING IS CURRENTLY INACTIVE THEN EXIT WITH 00264000
* AN APPROPRIATE ERROR MESSAGE. 00265000
* 00266000
* IF THE MONITOR IS CURRENTLY IN ERROR RECOVERY OR 00267000
* PROCESSING A 'MONITOR STOP TAPE' COMMAND THEN EXIT 00268000
* WITH AN APPROPRIATE ERROR MESSAGE. 00269000
* 00270000
* CLEAR CONTROL REGISTER 8 TO INHIBIT FURTHER MONITOR 00271000
* CALL INTERRUPTS. INDICATE THAT A 'MONITOR STOP 00272000
* TAPE' COMMAND IS BEING PROCESSED. 00273000
* 00274000
* OBTAIN STORAGE FOR AND INITIALIZE A CPEXBLOK. 00275000
* 'STACK' THE CPEXBLOK ON THE COMMUNICATIONS AREA. 00276000
* IF THE MONITOR TAPE IS CURRENTLY BUSY THEN SKIP THE 00277000
* NEXT STEP. 00278000
* 00279000
* CALL DMKMNISH TO COMPLETE MONITOR SHUTDOWN 00280000
* PROCESSING. WHEN CONTROL RETURNS FROM DMKMNI, EXIT 00281000
* AFTER ISSUING THE 'COMMAND COMPLETE' MESSAGE. 00282000
* 00283000
* SET THE RETURN ADDRESS IN THE CPEXBLOK TO THE 00284000
* 'COMMAND COMPLETE' MESSAGE ROUTINE AND GO TO THE 00285000
* DISPATCHER. SINCE THE TAPE IS BUSY AND THE CFSTOP 00286000
* FLAG HAS BEEN SET, THE MONITOR WILL BE SHUT DOWN 00287000
* WHEN THE NEXT TAPE I/O INTERRUPT OCCURS. FOLLOWING 00288000
* THAT, THE CPEXBLOK WILL BE 'UNSTACKED' AND RETURN 00289000
* WILL BE MADE TO THIS ROUTINE TO TYPE OUT THE 00290000
* 'COMMAND COMPLETE' MESSAGE. 00291000
* 00292000
* TIME 00292010
* 00292020
* CALL THE COMMAND PROCESSOR EXTENSION, DMKMCD, TO PROCESS 00292030
* 00292040
* LIMIT 00292050
* 00292060
* CALL THE COMMAND PROCESSOR EXTENSION, DMKMCD, TO PROCESS 00292070
* 00292080
* CLOSE 00292090
* 00292100
* CALL DMKMIACC TO CLOSE THE CURRENT SPOOL FILE 00292110
*. 00293000
EJECT 00294000
DMKMCC CSECT @V2B2638 00295000
MODID DC CL8'DMKMCC' @V2B2638 00296000
SPACE 1 00297000
USING SAVEAREA,R13 @V2B2638 00298000
USING PSA,R0 @V2B2638 00299000
SPACE 1 00300000
EXTRN DMKSCNFD @V2B2638 00301000
EXTRN DMKSCNRU @V2B2638 00302000
EXTRN DMKQCNWT @V2B2638 00303000
EXTRN DMKPRGC8,DMKPRGMC,DMKPRGTI,DMKPRGMI @V2B2638 00304000
EXTRN DMKERMSG @V2B2638 00305000
EXTRN DMKPTRFR @V2B2638 00306000
EXTRN DMKCVTHB @V2B2638 00307000
EXTRN DMKCVTDB @V2B2638 00308000
EXTRN DMKFREE @V2B2638 00309000
EXTRN DMKFRET @V2B2638 00310000
EXTRN DMKSCHST @V2B2638 00311000
EXTRN DMKSCHRT @V2B2638 00312000
EXTRN DMKMONMI,DMKMONTI 00313000
EXTRN DMKSYSAT,DMKSYSTS,DMKSYSTE,DMKSYSMX,DMKSYSUR @V50A2B5 00314000
EXTRN DMKUDRFU,DMKSCNVU,DMKVDSDF,DMKSTKCP,DMKPGTVG @V50A2B5 00315000
EXTRN DMKMIARO,DMKSYSEN @V50A2B5 00316000
EXTRN DMKMNIDK,DMKMIA @V50A2B5 00317000
EXTRN DMKMNISP,DMKMIACC,DMKMNIST,DMKMIAMU @VMD0138 00318000
EXTRN DMKMIADL,DMKRSPMN @V50A2B5 00319000
EXTRN DMKMNITH,DMKMNISH 00320000
EXTRN DMKDSPCH @V2B2638 00321000
EXTRN DMKCVTAB @VA04301 00322000
EXTRN DMKMCDIN,DMKMCDLI,DMKMCDTI,DMKMCDST @VA08291 00322100
EXTRN DMKDSPNP @VA07357 00323000
EXTRN DMKMCDSE @V60BEBC 00323100
EJECT 00324000
COPY OPTIONS @V2B2638 00325000
COPY LOCAL @V2B2638 00326000
EJECT 00327000
*. 00328000
********************************************************************** 00329000
* 00330000
* MONITOR COMMAND PROCESSING 00331000
* 00332000
* LOCATE THE FIRST ARGUMENT. COMPARE IT AGAINST THE OPERAND 00333000
* TABLE AND GO TO THE APPROPRIATE ROUTINE 00334000
* 00335000
********************************************************************** 00336000
*. 00337000
DMKMCCCL RELOC @V2B2638 00338000
USING VMBLOK,R11 @V2B2638 00339000
CALL DMKSCNFD LOOK FOR NEXT FIELD @V2B2638 00340000
BNZ MSG026 ERROR IF NO PARM AT ALL @V2B2638 00341000
CL R0,F8 IS IT BIGGER THAN 8? @V2B2638 00342000
BH MSG026 YES, THEN GARBAGE IT IS @V2B2638 00343000
LR R2,R0 SAVE THE SIZE @V2B2638 00344000
BCTR R2,0 DECREMENT BY ONE @V2B2638 00345000
LA R3,OPTABENO GET THE NUMBER OF ENTRIES @V2B2638 00346000
LA R4,MONOPTAB ADDR OF THE TABLE @V2B2638 00347000
COMPLEN CH R2,0(R4) COULD THIS POSSIBLY BE IT? @V2B2638 00348000
BL NEXTARG NOPE, TOO SMALL @V2B2638 00349000
EX R2,COMPARG CHECK IF THIS IS IT @V2B2638 00350000
BE 10(R4) YES, BRANCH TO THE RIGHT PLACE @V2B2638 00351000
NEXTARG LA R4,14(R4) BUMP TO THE NEXT ENTRY @V2B2638 00352000
BCT R3,COMPLEN GO CHECH THE NEXT ENTRY @V2B2638 00353000
B MSG002 SORRY, WE DIDN'T FIND IT @V2B2638 00354000
SPACE 3 00355000
COMPARG CLC 2(0,R4),0(R1) EXECUTED COMPARE OF OPERANDS @V2B2638 00356000
EJECT 00357000
* 00358000
*********************************************************************** 00359000
* 00360000
* MONITOR AUTODISK 00361000
* 00362000
* SET THE AUTO SPOOL MONITOR FLAG IN DMKSYS 00363000
* 00364000
*********************************************************************** 00365000
* 00366000
SPACE 1 00367000
MONAUTO CALL DMKSCNFD FIND THE NEXT FIELD IN COMMAND @V50A2B5 00368000
BNZ MSG026 CARRIAGE RETURN OR ENDBUFF @V50A2B5 00369000
L R4,=A(DMKSYSAT) GET AUTO FLAG @V50A2B5 00370000
C R0,F3 IS IT ILLEGAL? @V50A2B5 00371000
BH MSG002 YES @V50A2B5 00372000
C R0,F2 IS IT EXACTLY TWO? @V50A2B5 00373000
BNZ NOTTWO NO @V50A2B5 00374000
CLC =C'ON',0(R1) IS ON SPECIFIED? @V50A2B5 00375000
BNZ MSG002 NO @V50A2B5 00376000
TM 0(R4),AUTGO SEE IF ALREADY ON @V50A2B5 00377000
BO ACK NO USE STACKING ANY BLOCKS @V50A2B5 00378000
OI 0(R4),AUTGO TURN ON AUTO SPOOL BIT @V50A2B5 00379000
CALL DMKMNIST TURN ON THE TRQS @VMD0138 00380000
B ACK AND EXIT @V50A2B5 00381000
NOTTWO C R0,F3 IS IT EXACTLY THREE @V50A2B5 00382000
BNZ MSG002 NOTHING GOOD @V50A2B5 00383000
CLC =C'OFF',0(R1) IS OFF SPECIFIED? @V50A2B5 00384000
BNZ MSG002 NOT GOOD @V50A2B5 00385000
NI 0(R4),X'FF'-AUTGO TURN OFF AUTO SPOOL BIT @V50A2B5 00386000
B ACK ACKNOWLEDGE COMPLETION @V50A2B5 00387000
EJECT 00388000
*. 00389000
********************************************************************** 00390000
* 00391000
* MONITOR DISPLAY 00392000
* 00393000
* OBTAIN A BUFFER FOR THE DISPLAY OUTPUT. WRITE OUT A LINE FOR 00394000
* THE STATUS OF THE INTERNAL TRACE TABLE AND A LINE FOR EACH 00395000
* CLASS INDICATING ITS KEYWORD AND ENABLED/DISABLED STATUS. 00396000
* FRET THE BUFFER AND EXIT. 00397000
* 00398000
********************************************************************** 00399000
*. 00400000
SPACE 1 00401000
MONCLDIS EQU * MONITOR DISPLAY FUNCTION @V50A2B5 00402000
CALL DMKMIADL EXECUTE DISPLACED CODE @V50A2B5 00403000
EXIT AND EXIT @V50A2B5 00404000
EJECT @V50A2B5 00405000
*. 00406000
*********************************************************************** 00407000
* 00408000
* MONITOR ENABLE 00409000
* 00410000
* FOR EACH ARGUMENT, SEARCH THE CLASS TABLE AND TURN ON 00411000
* THE APPROPRIATE MASK BIT IN R3. THE FOLLOWING RULES ARE 00412000
* CHECKED: 00413000
* 00414000
* 1. DASTAP CANNOT BE ENABLED ON THE FLY (BECAUSE OF THE 00415000
* HEADER AND THE DEVICE LIST). 00416000
* 2. IF SYSPROF IS SPECIFIED THEN SCHEDULE AND DASTAP MUST 00417000
* ALSO BE SPECIFIED. 00418000
* 00419000
* IF DATA COLLECTION IS ACTIVE: 00420000
* 00421000
* IF DASTAP WAS ON BEFORE BUT WILL NOT BE AFTER COMMAND 00422000
* COMPLETION, THEN SET A FLAG TO FRET THE DEVICE LIST. 00423000
* IT CANNOT BE FRETTED YET DUE TO POSSIBLE ERROR EXITS. 00424000
* 00425000
* IF TIMER DRIVEN EVENTS WERE ACTIVE BUT WON'T BE ANYMORE 00426000
* THEN DEQUEUE AND FRET THE TRQBLOK. 00427000
* 00428000
* IF TIMER DRIVEN EVENTS WERE NOT ACTIVE BEFORE BUT WILL 00429000
* BE THEN OBTAIN AND ENQUEUE A TRQBLOK. 00430000
* 00431000
* SAVE THE ENABLED MASK IN DMKPRGC8. IF THE MONITOR IS ACTIVE 00432000
* THEN LOAD THE NEW MASK IN CR8. IF NECESSARY FRET THE 00433000
* DEVICE LIST. 00434000
* 00435000
*********************************************************************** 00436000
*. 00437000
SPACE 1 00438000
MONCLEN SR R3,R3 REG FOR BUILDING CR8 MASK @V2B2638 00439000
NEXTPARM CALL DMKSCNFD OBTAIN NEXT FIELD IN COMMAND @V2B2638 00440000
BNZ ENDBUFF CARRIAGE RETURN OR ENDBUFF @V2B2638 00441000
LR R2,R0 BYTE COUNT OF FIELD FOUND @V2B2638 00442000
C R2,F8 IS IT TOO BIG @V2B2638 00443000
BH MSG002 YES, GARBAGE IN, GARBAGE OUT @V2B2638 00444000
BCTR R2,0 LESS 1 FOR EXECUTED COMPARE @V2B2638 00445000
LA R4,MONTBENO NUMBER OF ENTRIES IN TABLE @V2B2638 00446000
LA R5,MONCLTBL BEGINNING OF CLASS KEYWORD TABLE @V2B2638 00447000
L R6,=A(X'00008000') SET FOR CLASS 0 FIRST @V2B2638 00448000
EXECUTE EX R2,COMPLENG COMPARE LENGTH ENT. W/ MIN. @V2B2638 00449000
BH NOTTHIS B:A COMPARE, TOO SMALL, NOT THIS @V2B2638 00450000
EX R2,COMPARE LOOK FOR KEYWORD MATCH @V2B2638 00451000
BNE NOTTHIS NO MATCH IN THIS CLASS, MOVE ON @V2B2638 00452000
OR R3,R6 OR IN CORRESPONDING CLASS FLAG @V2B2638 00453000
B NEXTPARM GO DO SAME WITH NEXT ARGUMENT @V2B2638 00454000
NOTTHIS BCT R4,NEXTCLAS ANY MORE CLASSES? YES @V2B2638 00455000
B MSG002 NO, TOO BAD, NOT IMPLEMENTED @V2B2638 00456000
NEXTCLAS LA R5,9(R5) NEXT CLASS TABLE ENTRY @V2B2638 00457000
SRL R6,1 SET NEXT CLASS FLAG @V2B2638 00458000
B EXECUTE TRY THIS ONE @V2B2638 00459000
EJECT 00460000
* TOP BYTE OF SAVEWRK1 = FLAGS, LOWER 1/2 = CR8 MASK 00461000
ENDBUFF LTR R3,R3 DID WE ENABLE ANYTHING? @V2B2638 00462000
BZ MSG026 NOPE, MUST NOT HAVE SPEC. ANYTH @V2B2638 00463000
ST R3,SAVEWRK1 SAVE CR8 MASK JUST GENERATED @V2B2638 00464000
L R7,=A(DMKPRGMC) LOC'N OF COMMUNIC. AREA ADDR @V2B2638 00465000
L R7,0(R7) ADDRESS OF COMMUNICATIONS AREA @V2B2638 00466000
LTR R7,R7 IS MONITOR ACTIVE @V2B2638 00467000
BZ DASDOK NO, NO NEED TO LOAD CNTRL REG 8 @V2B2638 00468000
USING MONCOM,R7 YES, NEED NEW VALUE & DASD CHECK @V2B2638 00469000
TM SAVEWRK1+2,DASDCL WAS DASDCL JUST SPECIFIED @V2B2638 00470000
BZ NODASD NOPE, GO SEE IF ACTIVE BEFORE @V2B2638 00471000
L R1,MONDVLST YES, WAS IT ON BEFORE? @V2B2638 00472000
LTR R1,R1 ... @V2B2638 00473000
BZ MSG215 NOPE, CAN'T ENABLE ON THE FLY @V2B2638 00474000
B DASDOK YES, NOW AND BEFORE, ALL SET @V2B2638 00475000
SPACE 3 00476000
NODASD L R1,MONDVLST WAS IT ACTIVE BEFORE? @V2B2638 00477000
LTR R1,R1 ... @V2B2638 00478000
BZ DASDOK NOPE, NOT NOW OR BEFORE, ALL SET @V2B2638 00479000
OI SAVEWRK1,X'80' FLAG FRET OF DASTAP LIST REQ. @V2B2638 00480000
* NOTE THAT LEFT HALF OF SAVEWRK1 WAS CLEARED AFTER ENDBUFF 00481000
SPACE 3 00482000
DASDOK TM SAVEWRK1+3,SPROFCL SYSPROF JUST SPECIFIED? @V2B2638 00483000
BZ CHKACTV NOPE, SKIP PREREQ CHECK @V2B2638 00484000
TM SAVEWRK1+2,SCHEDCL+DASDCL PREREQ'S SPEC TOO? @V2B2638 00485000
BNO MSG216 NOPE, BAD NEWS. @V2B2638 00486000
CHKACTV LTR R7,R7 IS MONITOR ACTIVE NOW? @V2B2638 00487000
BZ SETPRG NOPE, SET UP DMKPRG CR8 VALUE @V2B2638 00488000
TM SAVEWRK1+2,PERFCL+USERCL+DASDCL ENAB SAMPLING? @V2B2638 00489000
BNZ PERFEN YES, TRB MAY ALREADY BE ACTIVE @V2B2638 00490000
L R1,MONATRB NO, GET OLD TRB ADDRESS @V2B2638 00491000
LTR R1,R1 IS THERE ONE? @V2B2638 00492000
BZ SETCPCR8 NO, NO CHANGES REQUIRED @V2B2638 00493000
CALL DMKSCHRT REMOVE OLD TRB FROM CHAIN @V2B2638 00494000
LA R0,TRQBSIZE @V2B2638 00495000
CALL DMKFRET AND FRET THE STORAGE @V2B2638 00496000
SLR R1,R1 TRB NO LONGER EXISTS... @V2B2638 00497000
ST R1,MONATRB SO INDICATE SUCH IN MONCOM @V2B2638 00498000
B SETCPCR8 DONE CHECKING @V2B2638 00499000
EJECT 00500000
PERFEN L R1,MONATRB IS THERE A TRB? @V2B2638 00501000
LTR R1,R1 ... @V2B2638 00502000
BNZ SETCPCR8 YES, NO CHANGE REQUIRED @V2B2638 00503000
BAL R8,GETTRB NO, GET TRB AND ENQUEUE IT @V2B2638 00504000
SETCPCR8 ST R3,CPCREG8 SET NEW VALUE FOR CP REG @V2B2638 00505000
L R8,PREFIXB ADDRESS OTHER PROCESSOR'S PSA 00506000
ST R3,CPCREG8(R8) PROPAGATE MC MASK TO OTHER PROCESSOR 00507000
LCTL C8,C8,CPCREG8 AND MAKE IT ACTIVE NOW. @V2B2638 00508000
SETPRG L R2,=A(DMKPRGC8) SAVE IT IN PRG @V2B2638 00509000
ST R3,0(R2) ... @V2B2638 00510000
TM SAVEWRK1,X'80' NEED TO FRET DASTAP LIST? @V2B2638 00511000
BZ ACK NOPE, ALL DONE NOW @V2B2638 00512000
L R1,MONUTRB ADDR OF UTILIZATION TRB @V60BEBC 00512010
LTR R1,R1 IS IT THERE? @V60BEBC 00512020
BZ NOUTFREE NO, NO NEED TO FREE UP @V60BEBC 00512030
CALL DMKSCHRT REMOVE TRB FROM CHAIN @V60BEBC 00512040
LA R0,TRQBSIZE SIZE IN DWORDS @V60BEBC 00512050
CALL DMKFRET FREE IT UP @V60BEBC 00512060
SLR R1,R1 INDICATE NO I/O UTILIZATION @V60BEBC 00512070
ST R1,MONUTRB IN MONCOM @V60BEBC 00512080
L R1,MONCHPTR FREE UP SPACE FOR CHANNEL @V60BEBC 00512090
LA R0,MNCHSIZE SAMPLE FIELDS @V60BEBC 00512100
CALL DMKFRET ... @V60BEBC 00512110
SLR R1,R1 RESET PTR TO CH SAMPLES TO 0 @V60BEBC 00512120
ST R1,MONCHPTR ... @V60BEBC 00512130
NOUTFREE EQU * @V60BEBC 00512140
LH R0,MONDVNUM GET THE NUMBER OF DEVICES @V2B2638 00513000
L R1,MONDVLST GET THE LIST ADDRESS @V2B2638 00516000
CALL DMKFRET AND FRET IT @V2B2638 00517000
SLR R1,R1 DASD LIST STORAGE AINT NOMORE @V2B2638 00518000
ST R1,MONDVLST .... @V2B2638 00519000
STH R1,MONDVNUM ... @V2B2638 00520000
B ACK DONE. @V2B2638 00521000
DROP R7 @V2B2638 00522000
SPACE 4 00523000
COMPLENG CLI 8(R5),X'00' COMPARE ARG LENGTH W/ MINIMUM @V2B2638 00524000
COMPARE CLC 0(0,R1),0(R5) INPUT ARG TO KEYWORD TABLE COMP. @V2B2638 00525000
EJECT 00526000
*. 00527000
*********************************************************************** 00528000
* 00529000
* MONITOR INTERVAL 00530000
* 00531000
* CALCULATE THE INTERVAL IN SECONDS AND STORE IT IN DMKPRGTI. 00532000
* 00533000
* THERE IS A 9 HOUR LIMIT ON THE INTERVAL. THE MONITOR SHOULD 00534000
* NOT BE RUN FOR MORE THAN 9 1/2 HOURS DUE TO THE 5 BYTE TIME 00535000
* STAMP USED IN THE DATA COLLECTION ROUTINES. 00536000
* 00537000
*********************************************************************** 00538000
*. 00539000
SPACE 1 00540000
MONINTVL CALL DMKMCDIN CALL EXTENSION FOR INTERVAL PROC@VA08291 00541000
B ACK ACKNOWLEDGE & RETURN @V2B2638 00569000
EJECT 00570000
* 00571000
*********************************************************************** 00572000
* 00573000
* MONITOR LIMIT 00574000
* 00575000
* SETS THE LIMIT ON THE MONITOR SPOOL FILE SIZE 00576000
* 00577000
*********************************************************************** 00578000
* 00579000
MONMAX CALL DMKMCDLI CALL EXTENSION FOR LIMIT PROCESS@VA08291 00580000
B ACK ACKNOWLEDGE COMPLETION @V50A2B5 00623000
EJECT 00624000
*********************************************************************** 00625000
* 00626000
* MONITOR START 00627000
* 00628000
*********************************************************************** 00629000
SPACE 1 00630000
MONSTART CALL DMKSCNFD GET NEXT PARAMETER @V2B2638 00631000
BNZ ASMSPL ASSUME SPOOL @V50A2B5 00632000
MVC SAVEWRK3(8),BLANKS BLANK OUT PARM AREA @V2B2638 00633000
C R0,F8 IS IT TOO BIG @V2B2638 00634000
BH MSG002 YES, GARBAGE IN, GARBAGE OUT @V2B2638 00635000
LR R2,R0 LENGTH OF PARM INTO R2 @V2B2638 00636000
BCTR R2,0 LESS 1 FOR EXECUTE @V2B2638 00637000
EX R2,PARMOVE MOVE PARM INTO TEMPORARY AREA @V2B2638 00638000
CLC =CL8'TAPE',SAVEWRK3 IS IT PERF MONITOR? @V2B2638 00639000
BE TAPESTRT YES @V2B2638 00640000
CLC =CL8'SPOOL',SAVEWRK3 IS IT SPOOL MONITOR @V50A2B5 00641000
BE TAPESTRT CONTINUE WITH INITIALIZATION @V50A2B5 00642000
AIF (NOT &TRACE(9)).NTR91 @V2B2638 00643000
CLC =CL8'CPTRACE',SAVEWRK3 IS IT INTERNAL TRACE @V2B2638 00644000
.NTR91 ANOP 00645000
BNE MSG002 NO, BAD OPERAND @V2B2638 00646000
SPACE 5 00649000
*. 00650000
*********************************************************************** 00651000
* 00652000
* MONITOR START CPTRACE (INTERNAL TRACE TABLE) 00653000
* 00654000
* IF IT IS ALREADY ACTIVE, EXIT WITH AN ERROR MESSAGE. 00655000
* OTHERWISE TURN ON ALL FLAVORS OF INTERNAL TRACING. 00656000
* 00657000
*********************************************************************** 00658000
*. 00659000
SPACE 1 00660000
L R2,TRACEFLG GET THE TRACE FLAGS @V2B2638 00661000
LTR R2,R2 ANYTHING ACTIVE? @V2B2638 00662000
BNZ MSG213 IF SO, CAN'T START TRACING @V2B2638 00663000
L R2,FFS SET FLAGS TO ALL ONES @V2B2638 00664000
ST R2,TRACEFLG TO START TRACING @V2B2638 00665000
L R8,PREFIXB ADDRESS OTHER PSA, IF ANY 00666000
ST R2,TRACEFLG(R8) PUT TRACE FLAGS IN OTHER PSA 00667000
L R2,TRACSTRT GET ADDRESS OF BEGINNING OF TABLE@V2B2638 00668000
ST R2,TRACCURR SET CURRENT TO BEGINNING OF TABLE@V2B2638 00669000
B ACK SEND ACKNOWLEDGMENT @V2B2638 00670000
EJECT 00671000
*. 00672000
*********************************************************************** 00673000
* 00674000
* MONITOR START TAPE 00675000
* 00676000
* INSURE THAT THE MONITOR IS NOT ACTIVE, VALIDITY CHECK 00677000
* THE TAPE ADDRESS. FLAG THE TAPE AS IN USE BY THE SYSTEM. 00678000
* 00679000
* OBTAIN A COMMUNICATINS AREA. TRANS IN AND LOCK DMKMONIN 00680000
* ALSO OBTAIN VIA A TRANS CALL OTHER NECESSARY DMKMON ADDRESSES. 00681000
* 00682000
* GET AND INITIALIZE AN IOBLOK FOR THE TAPE. 00683000
* OBTAIN A BACK POCKET CPEXBLOK FOR USE BY DMKMON TO CALL IOS 00684000
* CALL DMKPTRFR FOR 2 4K BUFFER PAGES. 00685000
* CALL DMKMONTH TO CREATE HEADER RECORDS. EXIT. 00686000
* 00687000
*********************************************************************** 00688000
*. 00689000
SPACE 1 00690000
ASMSPL MVC SAVEWRK3(8),=CL8'SPOOL' ASSUME SPOOL @VA08104 00690100
TAPESTRT L R2,=A(DMKPRGC8) GET CURRENT CREG 8 @V2B2638 00691000
L R2,0(R2) FROM DMKPRG @V2B2638 00692000
LTR R2,R2 IS ANY CLASS ENABLED? @V2B2638 00693000
BNZ OKGO CONTINUE @V50A2B5 00694000
CLC SAVEWRK3(5),=C'SPOOL' SEE IF SPOOL SPECIF. @V50A2B5 00695000
BNE MSG217 NO, ERROR @V50A2B5 00696000
OKGO EQU * @V50A2B5 00697000
L R2,=A(DMKPRGMC) YES, IS MONITOR ALREADY ACTIVE @V2B2638 00698000
L R2,0(R2) PICK UP ADDRESS OF MONCOM @V2B2638 00699000
LTR R2,R2 IS THERE ONE @V2B2638 00700000
BNZ MSG211 YES, THEN START IS INVALID PARM @V2B2638 00701000
SR R8,R8 CLEAR OUT REGISTER 8 @V50A2B5 00702000
CLC SAVEWRK3(5),=CL8'SPOOL' IS IT SPOOLED @V50A2B5 00703000
BE SPOOLIT YES, DO FURTHER TESTS @V50A2B5 00704000
CALL DMKSCNFD LOOK FOR TAPE ADDRESS @V2B2638 00705000
BNZ MSG021 NONE, ERROR @V2B2638 00706000
C R0,F3 MUST BE 3 CHARS. OR LESS @V2B2638 00707000
BH MSG021 TOO BIG, TOO BAD. @V2B2638 00708000
LR R4,R1 SAVE FIELD ADDR IN CASE OF ERROR @V2B2638 00709000
CALL DMKCVTHB OK, CONVERT TO BINARY @V2B2638 00710000
BNZ MSG021 UNCONVERTABLE, BAD NEWS. @V2B2638 00711000
CALL DMKSCNRU GET CORRESPONDING RDEV BLOK ADD. @V2B2638 00712000
BNZ MSG040 NO SUCH DEVICE, BAD NEWS. @V2B2638 00713000
USING RDEVBLOK,R8 RDEVBLOK DSECT @V2B2638 00714000
CLI RDEVTYPC,CLASTAPE MUST BE TAPE DRIVE @V2B2638 00715000
BNE MSG006 NOPE, TOO BAD. @V2B2638 00716000
TM RDEVSTAT,RDEVDED IS IT ALREADY DEDICATED @V2B2638 00717000
BO MSG140 YES, TOO BAD. @V2B2638 00718000
TM RDEVSTAT,RDEVDISA IS DEVICE OFFLINE @V2B2638 00719000
BO MSG046 YES, TOO BAD. @V2B2638 00720000
TM RDEVFLAG,RDEVSYS ALREADY IN USE BY SYS? @V2B2638 00721000
BO MSG143 MUST BE SYSTEM DUMP TAPE @V2B2638 00722000
BUFFINIT EQU * @V50A2B5 00723000
SPACE 00724000
LA R5,2 SET DEFAULT OF 2 BUFFERS 00725000
CLC CPUMODEL,TS145A IS CPU BIGGER THAN 145? @VA09802 00726100
BNH DEFTMODE NO, DEFAULT IS ALL SET 00727000
LA R5,1(R5) YES, INCREMENT DEFAULT TO 3 00728000
CLC CPUMODEL,TS158A IS CPU BIGGER THAN 158? @VA09802 00729100
BNH DEFTMODE NO, DEFAULT IS ALL SET 00730000
LA R5,1(R5) YES, INCREMENT DEFAULT TO 4 00731000
DEFTMODE LA R6,X'C3' SET DEFAULT TAPE MODE 00732000
SPACE 00733000
******************************************************************* 00734000
* * 00735000
* NOW SCAN INPUT FOR POSSIBLE 'BUFFS' OR 'MODE' PARAMETER * 00736000
* * 00737000
******************************************************************* 00738000
SPACE 00739000
SCNBUFMD CALL DMKSCNFD SCAN INPUT BUFFER 00740000
BNZ NOMODE NONE FOUND, USE DEFAULTS 00741000
MVC SAVEWRK1(8),BLANKS CLEAR WORK AREA @V50A2B5 00742000
C R0,F8 IS LENGTH OF PARM > 8? 00743000
BH MSG002 YES, MUST BE GARBAGE 00744000
LR R2,R0 COPY LENGTH 00745000
BCTR R2,0 SUBTRACT 1 FOR MOVE 00746000
EX R2,PARMOVE1 MOVE INTO PROPER BUFFER @V50A2B5 00747000
CLC =CL8'BUFFS',SAVEWRK1 IS IT BUFFS? @V50A2B5 00748000
BE GETBUFFS YES, GO GET NUMBER OF BUFFERS 00749000
CLC =CL8'MODE ',SAVEWRK1 IS IT BUFFS? @V50A2B5 00750000
BNE MSG002 NO, IT'S GARBAGE 00751000
CLC SAVEWRK3(5),=CL8'SPOOL ' ARE WE SPOOLING @V50A2B5 00752000
BE MSG002 YES, BAD SITUATION @V50A2B5 00753000
CALL DMKSCNFD FIND THE MODE SPECIFICATION @V2B2638 00754000
BNE MSG026 OOPS, HE DIDN'T SAY ANYTHING. @V2B2638 00755000
CL R0,F3 WITHIN ACCEPTABLE LIMITS? @V2B2638 00756000
BL MSG002 NOPE, TOO BAD @V2B2638 00757000
CL R0,F4 ... @V2B2638 00758000
BH MSG002 ... @V2B2638 00759000
MVC SAVEWRK1(4),BLANKS CLEAR A SPOT @V50A2B5 00760000
LR R2,R0 SAVE LENGTH IN AN EXECUTABLE REG @V2B2638 00761000
BCTR R2,0 DECREMENT BY ONE FOR THE EX @V2B2638 00762000
EX R2,PARMOVE1 MOVE INTO PROPER BUFFER @V50A2B5 00763000
LA R3,MONMODTB TABLE BEGINNING @VM01003 00764000
LA R4,5 INCREMENT @VM01003 00765000
LR R2,R5 SAVE NO. OF BUFFERS @V4M0162 00766000
LA R5,MONMODTE TABLE END @VM01003 00767000
TABSRCH CLC SAVEWRK1(4),0(R3) IS THIS THE MODE HE WANTS? @V50A2B5 00768000
BE FOUNDM YES, BR. @V2B2638 00769000
BXLE R3,R4,TABSRCH NOPE, KEEP LOOKING @V2B2638 00770000
B MSG002 DID'NT FIND IT, TOO BAD. @V2B2638 00771000
* 00772000
********************************************************************* 00773000
* 00774000
* MONITOR START SPOOL TO USER 00775000
* 00776000
* LOGIC TO START THE SPOOLING ACTIVITY TO USER 00777000
* 00778000
********************************************************************* 00779000
* 00780000
SPOOLIT EQU * @V50A2B5 00781000
CALL DMKMNISP VERIFY THE USER @V50A2B5 00782000
CL R2,F5 IS THIS A FIVE @V50A2B5 00783000
BE GETBUFFS YES, BUFFS ALREADY PARSED @V50A2B5 00784000
LTR R2,R2 SEE IF ERROR OCCURRED @V50A2B5 00785000
BNZ ACK YES, CONTINUE @V50A2B5 00786000
B BUFFINIT OTHERWISE, CARRY ON @V50A2B5 00787000
SPACE 2 00788000
FOUNDM IC R6,4(R3) PICK UP THE MODESET OP CODE @V2B2638 00789000
LR R5,R2 RESTORE BUFFERS VALUE @V4M0162 00790000
SPACE 00791000
B SCNBUFMD GO SCAN FOR THE BUFFS PARAMETER 00792000
GETBUFFS CALL DMKSCNFD GET VALUE TO BE ASSIGNED TO BUFFS 00793000
BNZ MSG026 NONE SPECIFIED, ERROR 00794000
LR R3,R0 SAVE VALUES IN CASE OF ERROR 00795000
LR R4,R1 00796000
CALL DMKCVTDB CONVERT NUMBER OF BUFFS TO BINARY 00797000
BNZ INVBUFFS IF CONVERSION ERROR, REJECT AS INVALID 00798000
C R1,F10 IS BUFFS VALUE GREATER THAN MAX @VA07357 00799000
BH INVBUFFS YES, INVALID 00800000
C R1,F1 IS THIS SPECIAL ONE-BUFFER CASE? 00801000
BE CHK1BUFF YES, MAKE SURE ONLY PERF IS ENABLED 00802000
C R1,F0 WAS ZERO SPECIFIED? 00803000
BE INVBUFFS YES, INVALID 00804000
LR R5,R1 SAVE # OF BUFFS IN R5 FOR GETPAGE ROUTINE 00805000
B SCNBUFMD GO SCAN FOR MODE PARAMETER 00806000
INVBUFFS LR R0,R3 RESTORE VALUES 00807000
LR R1,R4 FOR ERROR MESSAGE ROUTINE 00808000
B MSG002 GO TO SEND ERROR MESSAGE 00809000
SPACE 00810000
CHK1BUFF L R2,=A(DMKPRGC8) GET ADDRESS OF MC MASK 00811000
TM 2(R2),X'FF'-PERFCL ARE ANY CLASSES EXCEPT PERF 00812000
BNZ INVBUFFS ENABLED? IF SO, INVALID 00813000
TM 3(R2),X'FF' 00814000
BNZ INVBUFFS 00815000
L R2,0(R2) LOAD IN NUMBER @V50A2B5 00816000
LTR R2,R2 SEE IF ANYTHING THERE @V50A2B5 00817000
BNZ NOCHKE YES, THEN DON'T BOTHER @V50A2B5 00818000
CLC SAVEWRK3(5),=C'SPOOL' SEE IF SPOOLING IS ON @V50A2B5 00819000
BNE NOCHKE NO @V50A2B5 00820000
L R2,=A(DMKSYSEN) GET THE DEFAULT ENABLE CLASSE@V50A2B5 00821000
TM 0(R2),X'FF'-PERFCL ARE ANY CLASSES EXCEPT PERF@V50A2B5 00822000
BNZ INVBUFFS ENABLED? IF SO, INVALAD @V50A2B5 00823000
TM 1(R2),X'FF' OTHER CLASSES ENABLED? @V50A2B5 00824000
BNZ INVBUFFS YES @V50A2B5 00825000
NOCHKE EQU * @V50A2B5 00826000
LR R5,R1 SAVE # OF BUFFS IN R5 FOR GETPAGE ROUTINE 00827000
B SCNBUFMD GO SCAN FOR MODE PARAMETER 00828000
NOMODE EQU * @V50A2B5 00829000
CLC SAVEWRK3(5),=C'SPOOL' SEE IF SPOOLING @V50A2B5 00830000
BE SKIPPARS YES, SKIP FOLLOWING @V50A2B5 00831000
OI RDEVFLAG,RDEVSYS WE HAVE IT, MARK AS SYSTEM'S @V50A2B5 00832000
L R1,ASYSVM I/O WILL BE CHARGED TO SYSTEM @V2B2638 00833000
ST R1,RDEVUSER STORE IN RDEVBLOK @V2B2638 00834000
SKIPPARS DS 0H @V50A2B5 00835000
LA R0,MONSIZE SIZE OF MONITOR COMM. AREA @V2B2638 00836000
LR R15,R5 NO. OF BUFFERS TO WORK REGISTER @VA07357 00837000
SLL R15,3 2 * BUFFS * 4 = NO. OF MONCOM SLOTS @V50A2B5 00838000
LA R15,7(R15) ENSURE DOUBLEWORD IS OBTAINED @VA07357 00839000
AR R0,R15 MONSIZE + MONBUF1 AREA @VA07357 00840000
SRL R0,3 CONVERT TO NUMBER OF DOUBLEWORDS @VA07357 00841000
CALL DMKFREE GET THE STORAGE SPACE FOR IT @V2B2638 00842000
L R2,=A(DMKPRGMC) SAVE ADDR IN DMKPRG @V2B2638 00843000
ST R1,0(R2) POINTER TO MONITOR COMM. AREA @V2B2638 00844000
USING MONCOM,R7 @V2B2638 00845000
LR R7,R1 COMM. DSECT COVER REG. @V2B2638 00846000
XC MONCOM(256),MONCOM CLEAR MONCOM @V60BEBC 00847000
XC 256(MONSIZE-256,R1),256(R1) BASIC SECTION @V60BEBC 00847100
ST R8,MONARDB SAVE TAPE RDEVBLOK ADDR @V2B2638 00848000
DROP R8 DONE WITH RDEVBLOK @V2B2638 00849000
LA R1,1 NON-ZERO VALUE IN MONIOBF 00850000
ST R1,MONIOBF INDICATES TAPE BUSY 00851000
L R1,=A(DMKRSPMN) BLANK OUT THE MONITOR @V50A2B5 00852000
XC 0(4,R1),0(R1) FILE HOLDER FOR FILE RECOV @V50A2B5 00853000
CLC =CL8'SPOOL',SAVEWRK3 SEE IF SPOOL IS INDICATED @V50A2B5 00854000
BNE ARND NO, BRANCH @V50A2B5 00855000
OI MONFLAG3,SPOOLED INDICATE SPOOL @V50A2B5 00856000
L R1,=A(DMKPRGC8) SET THE MONITOR CLASSES @V50A2B5 00857000
L R1,0(R1) LOAD THEM IN @V50A2B5 00858000
LTR R1,R1 SEE IF ANYTHING THERE @V50A2B5 00859000
BNE ARND NO NEED TO PUT IN DEFAULT @V50A2B5 00860000
L R14,=A(DMKSYSEN) PUT IN THE DEFAULT @V50A2B5 00861000
SR R15,R15 PREPARE REGISTER @V50A2B5 00862000
O R15,0(R14) PUT IN STRING @V50A2B5 00863000
SRL R15,16 SHIFT @V50A2B5 00864000
L R1,=A(DMKPRGC8) GET ADDR OF CLASSES @V50A2B5 00865000
ST R15,0(R1) FINALLY, STORE THERE @V50A2B5 00866000
ARND EQU * @V50A2B5 00867000
MVC MONUSER(8),VMUSER GET USER STARTING MON @V2B2638 00868000
L R1,=A(DMKMONMI) ADDRESS OF DMKMON PROGRAM @V2B2638 00869000
* CHECK HANDLER 00870000
TRANS 2,1,OPT=(SYSTEM,BRING,DEFER,LOCK) PAGE IT IN, @V2B2638 00871000
* LOCK IT AND GET ITS ADDRESS 00872000
L R1,=A(DMKPRGMI) GET ADDR OF DMKMON IN PRG @V2B2638 00873000
ST R2,0(R1) AND SET IT UP FOR PRG TO USE @V2B2638 00874000
L R14,=A(DMKDSPNP) ADDR OF PAGEABLE PAGE COUNT @VA07357 00875000
L R15,0(R14) TOTAL PAGEABLE PAGES @VA07357 00876000
BCTR R15,0 LESS 1 FOR LOCK OF DMKMON @VA07357 00877000
ST R15,0(R14) SAVE NEW TOTAL @VA07357 00878000
LA R0,IOBSIZE+CCWSIZE IOB + CCW'S @V2B2638 00879000
CALL DMKFREE GET THE STORAGE SPACE @V2B2638 00880000
ST R1,MONAIOB SAVE ADDR IN COMM. AREA @V2B2638 00881000
LR R10,R1 @V2B2638 00882000
USING IOBLOK,R10 IOBLOK DSECT @V2B2638 00883000
XC IOBLOK(IOBSIZE*8+CCWSIZE*8),IOBLOK CLEAR BLOCKS @V2B2638 00884000
TM MONFLAG3,SPOOLED IS THIS SPOOLING AROUND @V50A2B5 00885000
BO NOCONT YES @V50A2B5 00886000
L R2,ASYSVM GET ADDRESS OF SYSTEM VMBLOK @V2B2638 00887000
ST R2,IOBUSER CHARGE I/O TO THE SYSTEM @V2B2638 00888000
LA R9,IOBSIZE*8+16(R10) ADDRESS OF INIT CCW'S @V2B2638 00889000
ST R9,IOBCAW START OF CHANNEL PROGRAM @V2B2638 00890000
MVC IOBSIZE*8(CCWSIZE*8,R10),CCWS GET MODEL CCWS @V2B2638 00891000
NOCONT EQU * @V50A2B5 00892000
STC R6,IOBSIZE*8+24(R10) PLUG IN CORRECT MODE @V2B2638 00893000
LA R0,CPEXSIZE GET A CPEXBLOK FOR DMKMON... @V2B2638 00894000
CALL DMKFREE ... TO USE IN CALLS TO IOS. @V2B2638 00895000
XC 0(8*CPEXSIZE,R1),0(R1) CLEAR IT OUT. @V2B2638 00896000
ST R1,IOBMISC SAVE ITS ADDRESS IN THE IOB. @V2B2638 00897000
DROP R7,R10 SWITCH MONCOM TO R9, DROP IOB @V2B2638 00898000
USING CORTABLE,R7 ... AND USE R7 FOR CORTABLE @V2B2638 00899000
USING MONCOM,R9 @V2B2638 00900000
LR R9,R7 SAVE MONCOM ADDRESS @V2B2638 00901000
C R5,F1 IS THIS SPECIAL 1-BUFFER CASE? 00902000
BNE INITREGS NO, NO SPECIAL FLAG NEEDED 00903000
OI MONFLAG1,MON1BUF YES, INDICATE 1-BUFFER CASE 00904000
INITREGS EQU * @VA07357 00905000
LA R3,MONBUF1 POINT TO BEGINNING OF BUFF ADDR ENTRIES 00906000
ST R3,MONCRSLT MAKE FIRST BUFFER THE CURRENT COLLECTOR 00907000
GETPAGE SR R2,R2 CLEAR PARM REG FOR CALL TO PTRFR 00908000
CALL DMKPGTVG OBTAIN SYSTEM VIRTUAL PAGE @V50A2B5 00909000
ST R1,4(R3) STORE ITS VIRTUAL ADDRESS @V50A2B5 00910000
TRANS 2,1,OPT=(BRING,DEFER,LOCK,SYSTEM) @V50A2B5 00911000
ST R2,0(R3) STORE ITS REAL ADDRESS @V50A2B5 00912000
XC 0(20,R2),0(R2) NULL OUT LINE (NOTE 17 IN) @V50A2B5 00913000
TM MONFLAG3,SPOOLED ARE WE SPOOLING @V50A2B5 00914000
BNO *+12 NO @V50A2B5 00915000
OI 8(R2),MONBUFAV YES, SET AT BYTE 8 IN @V50A2B5 00916000
B *+8 FINISHED @V50A2B5 00917000
OI 2(R2),MONBUFAV ELSE SET BYTE 2 IN @V50A2B5 00918000
LR R7,R2 COMPUTE FOR CORETABLE @V50A2B5 00919000
SRL R7,12-4 ADDRESS * 16 @V50A2B5 00920000
A R7,ACORETBL ADDRESS OF CORETABLE @V50A2B5 00921000
OI CORFLAG,CORCP SET FOR SYSTEM DUMPS @V50A2B5 00922000
LA R3,8(R3) BUMP FOR NEXT SETTING @V50A2B5 00923000
L R14,=A(DMKDSPNP) GET PAGEABLE COUNT @V50A2B5 00924000
L R15,0(R14) BUMP IT DOWN @V50A2B5 00925000
BCTR R15,0 HERE @V50A2B5 00926000
ST R15,0(R14) AND STORE IT @V50A2B5 00927000
BCT R5,GETPAGE GO GET ANOTHER PAGE, IF NECESSARY 00928000
MVC 0(4,R3),=X'FFFFFFFF' INDICATE END OF TABLE 00929000
L R2,MONBUF1 INDICATE THAT 1ST BUFF IS CURR COLLECTOR 00930000
ST R2,MONCURBF SET POINTER TO CURRENT COLLECTOR 00931000
SR R2,R2 @VA08803 00932000
CLC SAVEWRK3(5),=C'SPOOL' IS THIS DISK? @VA08803 00932300
BNE MONTP NO - MUST BE TAPE @VA08803 00932600
ST R2,MONIOBF ZERO I/O BUFFER PTRS @VA08605 00933100
MONTP EQU * @VA08803 00933200
ST R2,MONIOSLT 00934000
L R5,PREFIXA GET ADDRESS OF ABSOLUTE PSA 00935000
L R4,MONBUF1 ADDRESS OF FIRST SLOT @V50A2B5 00936000
TM MONFLAG3,SPOOLED ARE WE SPOOLED @V50A2B5 00937000
BNO *+12 NO @V50A2B5 00938000
OI 8(R4),MONBUFAC SET BYTE 8 IN @V50A2B5 00939000
B *+8 CONTINUE @V50A2B5 00940000
OI 2(R4),MONBUFAC SET BYTE 2 IN @V50A2B5 00941000
ST R4,PAGECUR(R5) SET POINTER IN ABS PSA TO CURR COLLECTOR 00942000
LA R4,MNBHDLEN(R4) POINT PAST BLOCK HDR TO FIRST RECORD 00943000
ST R4,MONNEXT(R5) SAVE POINTER TO NEXT RECORD IN ABS PSA 00944000
O R4,=F'4088' CREATE ADDRESS OF LAST BYTE @V50A2B5 00945000
ST R4,PAGEND(R5) SAVE IT IN ABS PSA 00946000
LR R7,R9 R7 = MONCOM, R9 = MONCOM FOR HDR @V2B2638 00947000
DROP R7,R9 DROP CORTABLE AND MONCOM @V2B2638 00948000
USING MONCOM,R7 RE-ESTABLISH MONCOM @V2B2638 00949000
L R2,=A(DMKPRGC8) GET CURRENT CR8 VALUE @V2B2638 00950000
TM 2(R2),PERFCL+USERCL+DASDCL SAMPLING CLASSES TOO?@V2B2638 00951000
BZ HEADER NO, NO TRB REQUIRED @V2B2638 00952000
BAL R8,GETTRB YES, GET TRB AND ENQUEUE IT @V2B2638 00953000
* R9=MONCOM FOR DMKMON 00954000
HEADER EQU * @V50A2B5 00955000
TM MONFLAG3,SPOOLED ARE WE SPOOLED @V50A2B5 00956000
BNO TOHDR NO, GO DO THE HEADER @V50A2B5 00957000
L R2,SAVER12 SEE IF MANUAL COMMAND @V50A2B5 00958000
CLC 0(8,R2),=C'DMKMIA ' BY NOTING PROGRAM HEADER @V50A2B5 00959000
BE AUTONOMG THIS IS AUTOMATIC @V50A2B5 00960000
LR R2,R0 SAVE REGISTER 0 @V50A2B5 00961000
LR R3,R1 SAVE REGISTER 1 @V50A2B5 00962000
LA R0,L'STARTMSG LENGTH OF START MESSAGE @V50A2B5 00963000
LA R1,STARTMSG ADDRESS OF START MESSAGE @V50A2B5 00964000
CALL DMKMIAMU GIVE THE START MESSAGE @V50A2B5 00965000
LR R0,R2 RESTORE REGISTER 0 @V50A2B5 00966000
LR R1,R3 RESTORE REGISTER ONE @V50A2B5 00967000
AUTONOMG EQU * @V50A2B5 00968000
CALL DMKMIARO INITIALIZE SPOOL FILE @V50A2B5 00969000
LTR R1,R1 WAS DMKMIARO SUCCESSFUL @VA13421 00969100
BNE ACK NO, EXIT @VA13421 00969200
USING CPEXBLOK,R1 CPEXBLOK IN REGISTER 1 @V50A2B5 00970000
LA R0,CPEXSIZE SIZE OF CPEXBLOCK @V50A2B5 00971000
CALL DMKFREE ACQUIRE STORAGE @V50A2B5 00972000
STM R0,R15,CPEXR0 SAVE THE REGISTERS @V50A2B5 00973000
LR R3,R1 SAVE REGISTER 1 @V50A2B5 00974000
L R1,=A(DMKMNIDK) ADDRESS OF HEADER RTNE @V50A2B5 00975000
TRANS R2,R1,OPT=(SYSTEM,BRING,DEFER,LOCK) PAGE IT IN @V50A2B5 00976000
L R14,=A(DMKDSPNP) GET PAGEABLE COUNT @V50A2B5 00977000
L R15,0(R14) LOAD IT IN @V50A2B5 00978000
BCTR R15,0 BUMP IT DOWN @V50A2B5 00979000
ST R15,0(R14) AND STORE IT @V50A2B5 00980000
LR R1,R3 RESTORE REGISTER ONE @V50A2B5 00981000
ST R2,CPEXR12 SET UP REGISTER 12 @V50A2B5 00982000
ST R2,CPEXADD AND INTERRUPT ADDRESS @V50A2B5 00983000
L R0,ASYSVM POINT TO SYSTEM VMBLOK @V50A2B5 00984000
ST R0,CPEXR11 CHARGE TO SYSTEM @V50A2B5 00985000
CALL DMKSTKCP STACK THE BLOCK @V50A2B5 00986000
B ACK AND LEAVE @V50A2B5 00987000
DROP R1 @V50A2B5 00988000
TOHDR CALL DMKMNITH DO TAPE HEADER @V50A2B5 00989000
ACK EQU * @V50A2B5 00990000
L R1,SAVER12 IF THIS WAS CALLED BY MIA @V50A2B5 00991000
CLC 0(8,R1),=C'DMKMIA ' IF MIA CALL, SKIP THIS @V50A2B5 00992000
BE NOMSG SEND NO MESSAGE @V50A2B5 00993000
LA R0,L'STAMSG1 GET MESSAGE LENGTH @V50A2B5 00994000
LA R1,STAMSG1 AND LOCATION @V2B2638 00995000
CALL DMKQCNWT,PARM=NORET @V2B2638 00996000
NOMSG EQU * @V50A2B5 00997000
EXIT COMMAND COMPLETE @V2B2638 00998000
EJECT 00999000
* 01000000
********************************************************************** 01001000
* 01002000
* MONITOR TIME 01003000
* 01004000
* CHANGES THE TIME OPTIONS FOR AUTOMATIC SPOOLING 01005000
* 01006000
********************************************************************** 01007000
* 01008000
MONTIME CALL DMKMCDTI CALL EXTENSION FOR TIME PROCESS.@VA08291 01009000
B ACK RETURN @V50A2B5 01167000
EJECT 01168000
MONCLOSE EQU * @V50A2B5 01169000
CALL DMKMIACC THE CLOSE ROUTINE @V50A2B5 01170000
B ACK EXIT @V50A2B5 01171000
*********************************************************************** 01172000
* 01173000
* MONITOR STOP 01174000
* 01175000
********************************************************************** 01176000
SPACE 1 01177000
MONSTOP CALL DMKMCDST CALL EXTENSION FOR STOP PROCESS.@VA08291 01178000
B ACK RETURN @VA08291 01179000
***************************************************************@V60BEBC 01179100
* @V60BEBC 01179110
* MONITOR SEEKS PROCESSOR @V60BEBC 01179120
* INCLUDE, EXCLUDE, DELETE, DISPLAY OPTIONS HANDLED BY @V60BEBC 01179130
* COMMAND PROCESSOR EXTENSION @V60BEBC 01179140
* @V60BEBC 01179150
***************************************************************@V60BEBC 01179160
SPACE 1 @V60BEBC 01179170
MONSEEKS CALL DMKMCDSE CALL EXTENSION FOR SEEKS HANDLIN@V60BEBC 01179180
B ACK ACKNOWLEDGE COMMAND COMPLETE @V60BEBC 01179190
SPACE 4 01213000
PARMOVE MVC SAVEWRK3(0),0(R1) MOVE ARG TO TEMP AREA @V2B2638 01214000
PARMOVE1 MVC SAVEWRK1(0),0(R1) MOVE ARG TO TEMP AREA @V50A2B5 01215000
EJECT 01216000
EJECT 01291000
*. 01292000
*********************************************************************** 01293000
* 01294000
* SUBROUTINES: 01295000
* 01296000
* GETTRB WILL OBTAIN, INITIALIZE AND ENQUEUE A TRQBLOK. 01297000
* IT ALSO INITIALIZES THE VALUE IN DMKPRGTI IF IT WASN'T 01298000
* SET BY A 'MONITOR INTERVAL' COMMAND. 01299000
* THE DMKPRGTI VALUE IS USED BY DMKMONTI TO SET UP THE 01300000
* NEXT TIMER REQUEST WHEN ONE OCCURS. 01301000
* 01302000
*********************************************************************** 01303000
*. 01304000
SPACE 1 01305000
GETTRB LA R0,TRQBSIZE @V2B2638 01306000
CALL DMKFREE GET SPACE FOR A TRQBLOK @V2B2638 01307000
USING TRQBLOK,R6 @V2B2638 01308000
LR R6,R1 ADDRESS IT VIA R6 @V2B2638 01309000
ST R6,MONATRB SAVE IN COMMUNICATIONS AREA @V2B2638 01310000
L R2,ASYSVM CHARGE HANDLING TO SYSTEM @V2B2638 01311000
ST R2,TRQBUSER @V2B2638 01312000
STCK TRQBTOD TIME OF DAY FOR REQUEST @V2B2638 01313000
BC 12,CLOCKOK IS CLOCK FUNCTIONING? @VA04301 01314000
GOTO DMKCVTAB CLOCK DAMAGED...ABEND CVT001 @VA04301 01315000
CLOCKOK EQU * @VA04301 01316000
L R4,=A(DMKPRGTI) ADDRESS OF THE INTERVAL @V2B2638 01317000
SLR R5,R5 CLEAR FOR ICM @V2B2638 01318000
ICM R5,B'0011',0(R4) GET THE INTERVAL IN SEC @V2B2638 01319000
BNZ INTSPEC INTERVAL ALREADY SPECIFIED @V2B2638 01320000
LA R5,MONTINT SET TO DEFAULT INTERVAL @V2B2638 01321000
STH R5,0(R4) AND PUT BACK IN PRGTI @V2B2638 01322000
INTSPEC SR R4,R4 CLEAR FOR MULT. @V2B2638 01323000
M R4,=F'1000000' IN UNITS OF MICRO SECONDS @V2B2638 01324000
SLDL R4,12 ALIGN WITH TOD FORMAT @V2B2638 01325000
AL R5,TRQBTOD+4 ADD IN TOD LOW ORDER BITS @V2B2638 01326000
BC 12,*+8 SKIP IF NO OVERFLOW @V2B2638 01327000
AL R4,F1 ADD 1 SEC TO HIGH ORDER TOD @V2B2638 01328000
AL R4,TRQBTOD ADD IN HIGH ORDER TOD BITS @V2B2638 01329000
STM R4,R5,TRQBVAL NEXT INTERRUPT DUE AT THIS TIME @V2B2638 01330000
L R1,=A(DMKMONTI) GET ADDR OF MON TIMER RTN @V2B2638 01331000
TRANS 2,1,OPT=(SYSTEM,BRING,DEFER) GO GET IT @V2B2638 01332000
ST R2,TRQBIRA AND PUT IT IN THE TRQBLOK @V2B2638 01333000
LR R1,R6 FOR CALL TO SCH @V2B2638 01334000
CALL DMKSCHST INSERT TRB IN REQUEST BLOCK CHAIN@V2B2638 01335000
BR R8 GO AND COMPLETE COMMAND @V2B2638 01336000
DROP R6 @V2B2638 01337000
EJECT 01338000
*********************************************************************** 01339000
* 01340000
* ALL ERROR MESSAGES ARE SENT FROM HERE. 01341000
* DMKERM RETURNS DIRECTLY TO DMKCFM. 01342000
* 01343000
*********************************************************************** 01344000
SPACE 01345000
MSG002 LA R2,2 INVALID OPERAND MESSAGE @V2B2638 01346000
B BADARG @V2B2638 01347000
SPACE 1 01348000
MSG003 LA R2,3 INVALID OPTION @V2B2638 01349000
B BADARG @V2B2638 01350000
SPACE 01351000
MSG006 LA R2,6 INVALID DEVICE TYPE XXX @V2B2638 01352000
LR R1,R4 FIELD ADDRESS @V2B2638 01353000
LA R0,3 3 BYTES FO SUBSTITUTABLE @V2B2638 01354000
B BADARG @V2B2638 01355000
SPACE 01356000
MSG021 LA R2,21 RADDR MISSING OR INVALID @V2B2638 01357000
B ZIPR1 @V2B2638 01358000
SPACE 01359000
MSG026 LA R2,26 OPERAND MISSING OR INVALID @V2B2638 01360000
B ZIPR1 @V2B2638 01361000
SPACE 01362000
MSG040 LA R2,40 DEV XXX DOES NOT EXIST @V2B2638 01363000
LR R1,R4 ADDR OF FIELD @V2B2638 01364000
LA R0,3 3 BYTES OF SUBSTITUTABLE @V2B2638 01365000
B BADARG @V2B2638 01366000
SPACE 01367000
MSG046 LA R2,46 TAPE XXX OFFLINE @V2B2638 01368000
B MSG143A GO PROCESS SAME AS MSG143 @V2B2638 01369000
SPACE 01370000
USING RDEVBLOK,R8 ADDRESSABILITY FROM BEFORE @V2B2638 01371000
MSG140 LA R0,3 TAPE CCU ATTACHED TO USERID @V2B2638 01372000
CALL DMKFREE @V2B2638 01373000
MVC 0(4,R1),=C'TAPE' @V2B2638 01374000
MVI 4(R1),X'00' SEPARATOR @V2B2638 01375000
MVC 5(3,R1),0(R4) 3 CHAR. DEV. ADD. @V2B2638 01376000
MVI 8(R1),X'00' SEPARATOR @V2B2638 01377000
L R2,RDEVUSER VMBLOCK ADD. OF USER OF TAPE @V2B2638 01378000
MVC 9(8,R1),VMUSER-VMBLOK(R2) ADD USERID TO MSG @V2B2638 01379000
LA R2,140 'TAPE ATTACHED' MSG. @V2B2638 01380000
O R2,=X'40000000' SET 'FRET STG WHEN DONE' FLAG @V2B2638 01381000
LR R3,R1 ADDRESS OF STORAGE TO BE FRETTED @V2B2638 01382000
O R3,=X'03000000' 3 DOUBLE WORDS OF IT @V2B2638 01383000
LA R0,17 17 BYTES OF MESSAGE DATA @V2B2638 01384000
B BADARG @V2B2638 01385000
DROP R8 @V2B2638 01386000
SPACE 01387000
MSG143 LA R2,143 TAPE CCU IN USE BY SYSTEM @V2B2638 01388000
MSG143A LA R0,1 @V2B2638 01389000
CALL DMKFREE @V2B2638 01390000
MVC 0(4,R1),=C'TAPE' 1ST SUBST. = DEV TYPE @V2B2638 01391000
MVI 4(R1),X'00' SEPARATOR @V2B2638 01392000
MVC 5(3,R1),0(R4) 3 CHARACTER DEVICE ADDRESS @V2B2638 01393000
O R2,=X'40000000' SET 'STG TO BE FRETTED' FLAG @V2B2638 01394000
LR R3,R1 ADDRESS OF THE STORAGE @V2B2638 01395000
O R3,=X'01000000' 1 DOUBLE WORD OF IT @V2B2638 01396000
LA R0,8 8 BYTES OF MSG SUBSTITUTE DATA @V2B2638 01397000
B BADARG @V2B2638 01398000
SPACE 01399000
MSG210 LA R2,210 PERF/USER ACTIVE, CANT CHANGE INT@V2B2638 01400000
B ZIPR1 @V2B2638 01401000
SPACE 01402000
MSG211 EQU * @V50A2B5 01403000
DROP R7 @V50A2B5 01404000
USING MONCOM,R2 @V50A2B5 01405000
LA R1,211 ASSUME MON IS TO TAPE @V50A2B5 01406000
TM MONFLAG3,SPOOLED ARE WE SPOOLING @V50A2B5 01407000
BNO *+8 NO @V50A2B5 01408000
LA R1,221 TELL THAT SPOOL IS ON @V50A2B5 01409000
LR R2,R1 SET UP REG 2 @V50A2B5 01410000
DROP R2 @V50A2B5 01411000
USING MONCOM,R7 @V50A2B5 01412000
B ZIPR1 @V2B2638 01413000
SPACE 01414000
SPACE 01417000
MSG213 LA R2,213 CP TRACE TABLE IS ALREADY ACTIVE @V2B2638 01418000
B ZIPR1 @V2B2638 01419000
SPACE 01420000
SPACE 01423000
MSG215 LA R2,215 CANT ENABLE DASD ON THE FLY @V2B2638 01424000
B ZIPR1 @V2B2638 01425000
SPACE 01426000
MSG216 LA R2,216 SYSPROF REQUIRES SCHED AND DASD @V2B2638 01427000
B ZIPR1 @V2B2638 01428000
SPACE 01429000
MSG217 LA R2,217 MON NOT STARTED, NO CLASS ENABLED@V2B2638 01430000
B ZIPR1 @V2B2638 01431000
SPACE 01432000
SPACE 1 01453000
MSG219 EQU * MSG NO 219 ISSUED FROM DMKMON @V2B2638 01454000
SPACE 01455000
MSG220 EQU * MSG NO 220 ISSUED FROM DMKMON @V2B2638 01456000
SPACE 01457000
ZIPR1 SLR R1,R1 NO SUBSTITUTABLES FOR ERM @V2B2638 01458000
SPACE 01459000
BADARG ICM R0,B'1110',MODID+3 MODULE ID FOR MSG @V2B2638 01460000
CALL DMKERMSG SEND ERROR MESSAGE @V2B2638 01461000
SPACE 01462000
* 01463000
* AFTER ALL MESSAGES DMKERMSG RETURNS TO DMKCFM DIRECTLY. 01464000
* 01465000
EJECT 01466000
*********************************************************************** 01467000
* 01468000
* CONSTANTS, WORK AREAS, EQUATES 01469000
* 01470000
*********************************************************************** 01471000
SPACE 1 01472000
MONOPTAB DS 0F MONITOR COMMAND OPTION 1 TABLE @V2B2638 01473000
DC H'2',C'START ' 3 CHAR MIN @V2B2638 01474000
B MONSTART ROUTINE ADDRESS @V2B2638 01475000
DC H'3',C'STOP ' 4 CHAR MIN @V2B2638 01476000
B MONSTOP ROUTINE ADDRESS @V2B2638 01477000
DC H'0',C'DISPLAY ' 1 CHAR MIN @V2B2638 01478000
B MONCLDIS ROUTINE ADDRESS @V2B2638 01479000
DC H'1',C'ENABLE ' 2 CHAR MIN @V2B2638 01480000
B MONCLEN ROUTINE ADDRESS @V2B2638 01481000
DC H'2',C'INTERVAL' 3 CHAR MIN @V2B2638 01482000
B MONINTVL ROUTINE ADDRESS @V2B2638 01483000
DC H'3',C'AUTODISK' 4 CHARACTER MIN @V50A2B5 01484000
B MONAUTO ROUTINE ADDRESS @V50A2B5 01485000
DC H'2',C'LIMIT ' 3 CHARACTER MIN @V50A2B5 01486000
B MONMAX ROUTINE ADDRESS @V50A2B5 01487000
DC H'3',C'TIME ' 4 CHARACTER MIN @V50A2B5 01488000
B MONTIME ROUTINE ADDRESS @V50A2B5 01489000
DC H'1',C'CLOSE ' 2 CHARACTER MIN @V50A2B5 01490000
B MONCLOSE @V50A2B5 01491000
DC H'1',C'SEEKS ' @V60BEBC 01491100
B MONSEEKS DO SEEKS PROCESSING @V60BEBC 01491200
OPTABENO EQU (*-MONOPTAB)/14 NUMBER OF ENTRIES @V2B2638 01492000
SPACE 5 01493000
* 01494000
* THE FOLLOWING ENTRIES ARE THE IMPLEMENTED CLASSES OF 01495000
* THE MONITOR. THIS TABLE MUST BE KEPT IN ORDER 01496000
* FOLLOWING EACH KEYWORD IS ITS MINIMUM SPECIFIABLE LENGTH -1. 01497000
* 01498000
SPACE 01499000
MONCLTBL DS 0F TABLE OF MC CLASS KEYWORDS @V2B2638 01500000
DC CL8'PERFORM ',X'03' @V2B2638 01501000
AIF (&TRACE(1)).TR1ON @V2B2638 01502000
DC CL8' ',X'09' RESERVED @V2B2638 01503000
AGO .TR1OFF @V2B2638 01504000
.TR1ON ANOP 01505000
DC CL8'RESPONSE',X'03' @V2B2638 01506000
.TR1OFF ANOP 01507000
DC CL8'SCHEDULE',X'02' @V2B2638 01508000
DC CL8' ',X'09' RESERVED @V2B2638 01509000
DC CL8'USER ',X'03' @V2B2638 01510000
DC CL8'INSTSIM ',X'03' @V2B2638 01511000
DC CL8'DASTAP ',X'02' @V2B2638 01512000
DC CL8'SEEKS ',X'03' @V2B2638 01513000
DC CL8'SYSPROF ',X'02' @V2B2638 01514000
MONTBENO EQU (*-MONCLTBL)/9 NUMBER OF ENTRIES IN THE TABLE @V2B2638 01515000
SPACE 3 01516000
MONMODTB DC CL4'800',X'CB' MODE = 800, MODE SET = CB @V2B2638 01517000
DC CL4'1600',X'C3' MODE = 1600, MODE SET = C3 @V2B2638 01518000
MONMODTE DC CL4'6250',X'D3' MODE = 6250, MODE SET = D3 @V2B2638 01519000
SPACE 3 01520000
CLASNOS DC C'00010203040506070809101112131415' LIST OF @V2B2638 01521000
* CLASS NUMBERS FOR MONITOR DISPLAY 01522000
TS145A DC X'0145' @VA09802 01522050
TS158A DC X'0158' @VA09802 01522100
EJECT 01523000
CCWS CCW X'01',*,SILI,1 WRITE DATA @V2B2638 01524000
CCW X'1F',*,CC+SILI,1 WRITE TAPE MARK @V2B2638 01525000
CCW X'07',*,CC+SILI,1 REWIND CHANGED TO WTM @V2B2638 01526000
CCW X'C3',*,SILI,1 SET MODE CHANGED TO RUN @V2B2638 01527000
CCWSIZE EQU (*-CCWS)/8 DBL WD SIZE OF CCW'S @V2B2638 01528000
SPACE 01529000
DISPMSG1 DC C'CLS KEYWORD STATUS' @V2B2638 01530000
ENAB DC CL8'ENABLED ' @V2B2638 01531000
DISAB DC CL8'DISABLED' @V2B2638 01532000
STAMSG1 DC C'COMMAND COMPLETE' @V2B2638 01533000
TIMVAL DS 0D @V50A2B5 01534000
DC CL8' ' @V50A2B5 01535000
TEMPSTRT DC CL8' ' @V50A2B5 01536000
TEMPEND DC CL8' ' @V50A2B5 01537000
SET24 DC XL8'000141DD76000000' @V50A2B5 01538000
DS 0F @V50A2B5 01539000
TIMEFROM DS 4H @V50A2B5 01540000
TIMETO DS 4H @V50A2B5 01541000
STARTMSG DC C'MONITOR HAS BEEN MANUALLY STARTED' @V50A2B5 01542000
STOPMSG DC C'MONITOR HAS BEEN MANUALLY STOPPED' @V50A2B5 01543000
LENMSG EQU 21 LENGTH OF DISPLAY MESSAGE @V2B2638 01544000
MONTINT EQU 60 DEFAULT INTERVAL = 60 SEC @V2B2638 01545000
EJECT 01546000
LTORG @V2B2638 01547000
EJECT 01548000
COPY EQU @V2B2638 01549000
PSA @V2B2638 01550000
COPY MONBLOKS @V2B2638 01551000
COPY VMBLOK @V2B2638 01552000
COPY SAVE @V2B2638 01553000
COPY IOBLOKS @V2B2638 01554000
COPY CORE @V2B2638 01555000
COPY DEVTYPES @V2B2638 01556000
COPY RBLOKS @V2B2638 01557000
COPY TIMER @V2B2638 01558000
COPY UDIRECT @V50A2B5 01559000
END 01560000