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