MCD TITLE 'DMKMCD (CP) VM/370 - RELEASE 6' 00001000 *. 00002000 * 00003000 * MODULE NAME - 00004000 * 00005000 * DMKMCD 00006000 * 00007000 * FUNCTION - 00008000 * 00009000 * TO HANDLE MONITOR CONTROL COMMANDS, AN EXTENSION TO 00010000 * DMKMCC, THE CONTROLLER OF MONITOR COMMAND PROCESSING 00011000 * 00012000 * ATTRIBUTES - 00013000 * 00014000 * REENTRANT, PAGEABLE, CALLED VIA SVC 00015000 * 00016000 * ENTRY POINTS - 00017000 * 00018000 * DMKMCDLI - TO PROCESS THE MONITOR LIMIT COMMAND 00019000 * DMKMCDIN - TO PROCESS THE MONITOR INTERVAL COMMAND 00020000 * DMKMCDST - TO PROCESS THE MONITOR STOP COMMAND 00021000 * DMKMCDTI - TO PROCESS THE MONITOR TIME COMMAND 00022000 * 00023000 * ENTRY CONDITIONS - 00024000 * 00025000 * GPR9 - ADDRESS OF COMMAND LINE BUFFER 00026000 * GPR11 - ADDRESS OF VMBLOK 00027000 * GPR12 - ADDRESS OF ENTRY POINT 00028000 * GPR13 - ADDRESS OF STANDARD SAVEAREA 00029000 * 00030000 * EXIT CONDITIONS - 00031000 * 00032000 * NONE 00033000 * 00034000 * CALLS TO OTHER ROUTINES - 00035000 * 00036000 * DMKSCNFD - TO LOCATE NEXT FIELD IN INPUT LINE 00037000 * DMKQCNWT - TO SEND A MESSAGE TO THE TERMINAL 00038000 * DMKERMSG - TO SEND CANNED ERROR MESSAGE TO TERMINAL 00039000 * DMKPTRFR - TO OBTAIN A PAGE OF STORAGE FOR MONITOR DATA 00040000 * DMKMONSH - MONITOR STOP ROUTINE 00041000 * DMKCVTHB - TO CONVERT DEVICE ADDRESS TO BINARY 00042000 * DMKCVTDB - TO CONVERT INTERVAL TO BINARY 00043000 * DMKSCNRU - TO OBTAIN RDEVBLK ADDRESS FROM DEV. ADDRESS 00044000 * DMKFREE - TO OBTAIN STORAGE FOR MESSAGES 00045000 * DMKFRET - TO RELEASE STORAGE USED FOR MESSAGES 00046000 * DMKSCHST - TO ENQUEUE A TIMER RQST. BLOCK FOR MONITORING 00047000 * DMKSCHRT - TO REMOVE A TIMER RQST. BLOCK FROM QUEUE 00048000 * DMKMONTH - TAPE HEADER ROUTINE 00049000 * 00050000 * EXTERNAL REFERENCES - 00051000 * 00052000 * DMKPRGC8 - STORAGE FOR CONTROL REGISTER 8 00053000 * DMKENTUT - ADDRESS OF I/O UTILIZATION INTERVAL 00054000 * DMKPRGMC - ADDRESS OF MONITOR COMMUNICATIONS AREA 00055000 * DMKPRGTI - INTERVAL BETWEEN TIMER INTERRUPTS 00056000 * DMKPRGMI - ADDRESS OF THE MONITOR PROGRAM INTERRUPT HANDLER 00057000 * 00058000 EJECT 00059000 * REGISTER USAGE - 00060000 * 00061000 * GPR0 - COMMAND ARGUMENT LENGTH, AND OUTPUT MSG LENGTH 00062000 * GPR1 - COMMAND ARGUMENT ADDRESS, AND OUTPUT MSG ADDRESS 00063000 * GPR2 - GPR10 - WORK REGISTERS 00064000 * GPR11 - VMBLOK ADDRESS 00065000 * GPR12 - BASE REG 00066000 * GPR13 - SAVE AREA ADDRESS 00067000 * GPR14 - LINKAGE REG 00068000 * GPR15 - LINKAGE REG 00069000 * 00070000 * COMMAND FORMAT - 00071000 * 00072000 * +---------+---------+-------------------------------------+ 00073000 * | MONITOR | | | 00074000 * | MON | | | 00075000 * | | TIME | FROM H1.M1 TO H2.M2 | 00076000 * | | | FOR HH.MM | 00077000 * | | | ALL | 00078000 * | | | NONE | 00079000 * | | | | 00080000 * | | INTERVAL| INT SEC UTINT | 00081000 * | | | MIN | 00082000 * | | | | 00083000 * | | LIMIT | NO. | STOP | 00084000 * | | | * | NOSTOP | 00085000 * | | | | SAMPLE | 00086000 * | | | 00087000 * | | SEEKS | INCLUDE | 00088000 * | | | EXCLUDE | 00089000 * | | | DELETE | 00090000 * | | | DISPLAY | 00091000 * | | | 00092000 * | | | | 00093000 * | | | | 00094000 * | | STOP | CPTRACE | 00095000 * | | | SPOOL | 00096000 * | | | TAPE | 00097000 * | | | | 00098000 * +---------+---------+-------------------------------------+ 00099000 * 00100000 * OPERATION - 00101000 * 00102000 * MONITOR COMMAND PROCESSING 00103000 * 00104000 * DMKMCC WILL CALL DMKSCNFD TO LOCATE AN ARGUMENT. 00105000 * THIS MODULE WILL BE CALLED FOR THE ARGUMENTS LISTED 00106000 * BELOW. 00107000 * 00108000 * IF THE ARGUMENT IS TIME THEN GO TO DMKMCDTI 00109000 * IF THE ARGUMENT IS INTERVAL THEN GO TO DMKMCDIN. 00110000 * IF THE ARGUMENT IS LIMIT THEN GO TO DMKMCDLI. 00111000 * IF THE ARGUMENT IS STOP THEN GO TO DMKMCDST. 00112000 * IF THE ARGUMENT IS SEEKS THEN GO TO DMKMCDSE. 00113000 * IF THE ARGUMENT IS NONE OF THESE THEN EXIT WITH AN 00114000 * APPROPRIATE ERROR MESSAGE. 00115000 * 00116000 * TIME: 00117000 * 00118000 * BUILDS TRQS TO TO START AND STOP THE MONITOR 00119000 * AUTOMATICALLY. 00120000 * 00121000 * INTERVAL: 00122000 * 00123000 * 00124000 * CALL DMKSCNFD TO GET THE INTERVAL VALUE. IF NONE 00125000 * WAS GIVEN THEN EXIT WITH AN APPROPRIATE ERROR 00126000 * MESSAGE. IF THE INTERVAL WAS GIVEN THEN CALL 00127000 * DMKCVTDB TO CONVERT IT TO BINARY. 00128000 * 00129000 * CALL DMKSCNFD TO LOCATE THE NEXT ARGUMENT. IF IT 00130000 * IS 'SEC' THEN DON'T MULTIPLY. IF IT IS 'MIN' THEN 00131000 * MULTIPLY THE INTERVAL BY 60 TO CONVERT IT TO 00132000 * SECONDS. 00133000 * 00134000 * IF THE SPECIFIED VALUE IS LESS THAN 30 SECONDS OR 00135000 * MORE THAN 9 HOURS, THEN EXIT WITH AN APPROPRIATE 00136000 * ERROR MESSAGE. CALL DMKSCNFD TO CHECK FOR A UTILIZATION 00137000 * INTERVAL. IF NOT SPECIFIED, USE THE DEFAULT IN DMKENTUT. 00138000 * THE UTILIZATION INTERVAL IS ONLY INTERPRETED AS SECONDS. 00139000 * SAVE THE MONITOR SAMPLE INTERVAL IN DMKPRGTI. SAVE THE 00140000 * I/O UTILIZATION INTERVAL IN DMKENTUT. 00141000 * 00142000 * SEEKS: 00143000 * 00144000 * MONITOR SEEKS PROCESSING - OPTIONS ARE: 00145000 * INCLUDE, EXCLUDE, DISPLAY, DELETE 00146000 * 00147000 * STOP: 00148000 * 00149000 * CALL DMKSCNFD TO LOCATE THE NEXT ARGUMENT. IF IT 00150000 * IS 'CPTRACE' THEN GO TO STOP CPTRACE. IF IT IS 00151000 * 'TAPE' THEN GO TO STOP TAPE. IF IT IS NEITHER OF 00152000 * THESE THEN EXIT WITH AN APPROPRIATE ERROR MESSAGE. 00153000 * 00154000 * STOP CPTRACE: 00155000 * 00156000 * IF CP INTERNAL TRACING IS NOT ACTIVE THEN EXIT WITH 00157000 * AN APPROPRIATE ERROR MESSAGE. OTHERWISE, SET THE 00158000 * TRACE FLAGS TO ZEROES AND EXIT AFTER SENDING THE 00159000 * 'COMMAND COMPLETE' MESSAGE. 00160000 * 00161000 * STOP TAPE/SPOOL 00162000 * 00163000 * IF MONITORING IS CURRENTLY INACTIVE THEN EXIT WITH 00164000 * AN APPROPRIATE ERROR MESSAGE. 00165000 * 00166000 * IF THE MONITOR IS CURRENTLY IN ERROR RECOVERY OR 00167000 * PROCESSING A 'STOP SPOOL / TAPE' COMMAND THEN EXIT 00168000 * WITH AN APPROPRIATE ERROR MESSAGE. 00169000 * 00170000 * CLEAR CONTROL REGISTER 8 TO INHIBIT FURTHER MONITOR 00171000 * CALL INTERRUPTS. INDICATE THAT A 'MONITOR STOP 00172000 * TAPE' COMMAND IS BEING PROCESSED. 00173000 * 00174000 * OBTAIN STORAGE FOR AND INITIALIZE A CPEXBLOK. 00175000 * 'STACK' THE CPEXBLOK ON THE COMMUNICATIONS AREA. 00176000 * IF THE MONITOR TAPE IS CURRENTLY BUSY THEN SKIP THE 00177000 * NEXT STEP. 00178000 * 00179000 * CALL DMKMNISH TO COMPLETE MONITOR SHUTDOWN 00180000 * PROCESSING. WHEN CONTROL RETURNS FROM DMKMNI, EXIT 00181000 * AFTER ISSUING THE 'COMMAND COMPLETE' MESSAGE. 00182000 * 00183000 * SET THE RETURN ADDRESS IN THE CPEXBLOK TO THE 00184000 * 'COMMAND COMPLETE' MESSAGE ROUTINE AND GO TO THE 00185000 * DISPATCHER. SINCE THE TAPE IS BUSY AND THE CFSTOP 00186000 * FLAG HAS BEEN SET, THE MONITOR WILL BE SHUT DOWN 00187000 * WHEN THE NEXT TAPE I/O INTERRUPT OCCURS. FOLLOWING 00188000 * THAT, THE CPEXBLOK WILL BE 'UNSTACKED' AND RETURN 00189000 * WILL BE MADE TO THIS ROUTINE TO TYPE OUT THE 00190000 * 'COMMAND COMPLETE' MESSAGE. 00191000 * 00192000 *. 00193000 EJECT 00194000 DMKMCD CSECT @VA08291 00195000 MODID DC CL8'DMKMCD' @VA08291 00196000 SPACE 1 00197000 USING SAVEAREA,R13 @V2B2638 00198000 USING MONCOM,R7 @VA08291 00199000 USING VMBLOK,R11 @VA08291 00200000 USING PSA,R0 @V2B2638 00201000 SPACE 1 00202000 EXTRN DMKSCNFD @V2B2638 00203000 EXTRN DMKPRGC8,DMKPRGMC,DMKPRGTI @V2B2638 00204000 EXTRN DMKERMSG @V2B2638 00205000 EXTRN DMKENTUT UTILIZATION INTERVAL @V60BEBC 00206000 EXTRN DMKSCNRU FIND DEVBLOK ROUTINE @V60BEBC 00207000 EXTRN DMKENTSK PTR TO SEEKS LIST @V60BEBC 00208000 EXTRN DMKCVTHB HEX TO BINARY CONVERT @V60BEBC 00209000 EXTRN DMKCVTBH BINARY TO HEX ROUTINE @V60BEBC 00210000 EXTRN DMKCFCSC SCAN FOR CHARACTER ROUTINE @V60BEBC 00211000 EXTRN DMKCVTDB @V2B2638 00212000 EXTRN DMKSYSAT,DMKSYSTS,DMKSYSTE,DMKSYSMX @V50A2B5 00213000 EXTRN DMKMNIST,DMKMIAMU @VMD0138 00214000 EXTRN DMKMNISH 00215000 EXTRN DMKSCHRT,DMKFRET @VMI0083 00216000 EXTRN DMKSTKOP @VA08291 00217000 EJECT 00218000 COPY OPTIONS @V2B2638 00219000 COPY LOCAL @V2B2638 00220000 EJECT 00221000 *********************************************************************** 00222000 * 00223000 * MONITOR INTERVAL 00224000 * 00225000 * CALCULATE THE INTERVAL IN SECONDS AND STORE IT IN DMKPRGTI. 00226000 * 00227000 * THERE IS A 9 HOUR LIMIT ON THE INTERVAL. THE MONITOR SHOULD 00228000 * NOT BE RUN FOR MORE THAN 9 1/2 HOURS DUE TO THE 5 BYTE TIME 00229000 * STAMP USED IN THE DATA COLLECTION ROUTINES. 00230000 * 00231000 *********************************************************************** 00232000 SPACE 1 00233000 DMKMCDIN RELOC @VA08291 00234000 CALL DMKSCNFD OBTAIN THE INTERVAL VALUE @VM01082 00235000 BNZ MSG026 MUST SPECIFY SOMETHING. @V2B2638 00236000 LR R3,R0 SAVE LENGTH AND ADDR IN CASE... @V2B2638 00237000 LR R4,R1 ... OF AN ERROR @V2B2638 00238000 CALL DMKCVTDB CONVERT INTERVAL TO BINARY @V2B2638 00239000 BZ GETUNIT DONE, NOW GET NEXT ARG @V2B2638 00240000 LR R0,R3 RESTORE LENGTH AND ADDR ... @V2B2638 00241000 LR R1,R4 ... FOR THE ERROR MESSAGE @V2B2638 00242000 B MSG002 GARBAGE IN, GARBAGE OUT @V2B2638 00243000 SPACE 1 00244000 GETUNIT LR R5,R1 SAVE INTERVAL IN R5 @V2B2638 00245000 CALL DMKSCNFD OBTAIN NEXT FIELD @V2B2638 00246000 BNZ DEFINT NOTHING SPECIFIED, DEFAULT TO SEC@V2B2638 00247000 C R0,F3 SEC OR MIN, 3 CHAR REQUIREMENT @V2B2638 00248000 BNE MSG003 GARBAGE IN, GARBAGE OUT. @V2B2638 00249000 CLC =C'SEC',0(R1) IS IT SECONDS? @V2B2638 00250000 BE DEFINT YES, GO HANDLE @V2B2638 00251000 CLC =C'MIN',0(R1) BETTER BE MINUTES THEN @V2B2638 00252000 BNE MSG003 TOO BAD. @V2B2638 00253000 MH R5,F60+2 CONVERT IT TO SECONDS @V2B2638 00254000 DEFINT LR R0,R3 RESTORE LENGTH AND ADDRESS ... @V2B2638 00255000 LR R1,R4 ... IN CASE OF AN ERROR @V2B2638 00256000 CL R5,=A(5) CAN'T BE LESS THAN 5 SECONDS @V60BEBC 00257000 BL MSG002 IT IS, TOO BAD. @V2B2638 00258000 CL R5,=A(9*60*60) CHECK AGAINST 9 HOUR VALUE @V2B2638 00259000 BH MSG002 TOO HIGH, REJECT. @V2B2638 00260000 CALL DMKSCNFD OBTAIN UTILIZATION INTERVAL @V60BEBC 00261000 BNZ NOUTIL ASSUME DEFAULT IF NOT SPECIFIED@V60BEBC 00262000 C R0,F2 MUST NOT BE MORE THAN 2 CHARS @V60BEBC 00263000 BH MSG002 IT IS, SO ISSUE ERROR MSG @V60BEBC 00264000 LR R7,R0 SAVE LENGTH AND ADDR @V60BEBC 00265000 LR R8,R1 IN CASE OF ERROR @V60BEBC 00266000 CALL DMKCVTDB CONVERT TO BINARY @V60BEBC 00267000 BZ CHKRANG OK, CHECK AGAINST SAMPLE INTERV@V60BEBC 00268000 TOOBIG LR R0,R7 RESTORE LENGTH AND ADDRESS @VMI0031 00269000 LR R1,R8 FOR ERROR MSG @V60BEBC 00270000 B MSG002 GARBAGE IN, GARBAGE OUT @V60BEBC 00271000 NOUTIL LA R1,DEFINTVL SEC. DEFAULT FOR NON-SPEC'D UT @V60BEBC 00272000 CHKRANG CR R1,R5 COMPARE SAMPLE INT WITH UT INTER@V60BEBC 00273000 BH TOOBIG RESTORE REGS FOR ERROR MSG @VMI0031 00274000 L R4,=A(DMKENTUT) GET UT INTERVAL ADDRESS @V60BEBC 00275000 STH R1,0(R4) SAVE IT THERE @V60BEBC 00276000 L R4,=A(DMKPRGTI) GET ADDR OF INT. IN DMKPRG @V2B2638 00277000 STH R5,0(R4) STORE INTERVAL IN DMKPRG @V2B2638 00278000 LTR R1,R1 NEW INTERVAL IS 0? @VMI0083 00279000 BNZ ACK NO, SO JUST RETURN @VMI0083 00280000 L R7,=A(DMKPRGMC) IF MONITOR IS ACTIVE @VMI0083 00281000 ICM R7,B'1111',0(R7) THEN FREE CURRENT UTILIZATION @VMI0083 00282000 BZ ACK NO, JUST RETURN @VMI0083 00283000 L R1,MONUTRB IS UTILIZATION ACTIVE?? @VMI0083 00284000 LTR R1,R1 IF SO, RESET AND FREE TRQ @VMI0083 00285000 BZ ACK ELSE JUST RETURN @VMI0083 00286000 CALL DMKSCHRT REMOVE FROM QUEUE @VMI0083 00287000 LA R0,TRQBSIZE SIZE TO FREE @VMI0083 00288000 CALL DMKFRET FREE TRQ @VMI0083 00289000 L R1,MONCHPTR POINT TO CHANNEL SAMPLES @VMI0083 00290000 LA R0,5 CHANNEL SAMPLE DOUBLE WORDS @VMI0083 00291000 CALL DMKFRET FREE CHANNEL SAMPLES @VMI0083 00292000 SR R1,R1 RESET VALUES IN MONCOM @VMI0083 00293000 ST R1,MONUTRB TRQ PT TO 0 @VMI0083 00294000 ST R1,MONCHPTR SET CHANNEL SAMPLES TO 0 @VMI0083 00295000 B ACK ACKNOWLEDGE & RETURN @VA08291 00296000 EJECT 00297000 * 00298000 *********************************************************************** 00299000 * 00300000 * MONITOR LIMIT 00301000 * 00302000 * SETS THE LIMIT ON THE MONITOR SPOOL FILE SIZE 00303000 * 00304000 *********************************************************************** 00305000 * 00306000 DMKMCDLI RELOC 00307000 CALL DMKSCNFD FIND THE NEXT FIELD IN COMMAND @V50A2B5 00308000 BNZ MSG026 CARRIAGE RETURN OR ENDBUFF @V50A2B5 00309000 C R0,F5 IS IT ILLEGAL @V50A2B5 00310000 BH MSG002 YES @V50A2B5 00311000 C R0,F1 SEE IF * SPECIFIED @V50A2B5 00312000 BNE TRYNUM PROBABLY @V50A2B5 00313000 CLI 0(R1),C'*' CHECK IF IN FACT IS * @V50A2B5 00314000 BNE TRYNUM PERHAPS THIS IS A NUMBER @V50A2B5 00315000 L R3,=A(DMKSYSMX) GET THE CURRENT MAX @V50A2B5 00316000 L R5,0(R3) FROM DMKSYS @V50A2B5 00317000 B GETMAX1 USE THIS LATER @V50A2B5 00318000 TRYNUM LR R3,R0 SAVE IN CASE OF ERROR @V50A2B5 00319000 LR R4,R1 REGS 0 AND 1 @V50A2B5 00320000 CALL DMKCVTDB CONVERT TO BINARY @V50A2B5 00321000 BZ GETMAX SUCCESS, NO STORE @V50A2B5 00322000 LR R0,R3 RESTORE FOR ERROR @V50A2B5 00323000 LR R1,R4 REGS 0 AND 1 @V50A2B5 00324000 B MSG002 GARBAGE OUT @V50A2B5 00325000 SPACE 1 @V50A2B5 00326000 GETMAX LR R0,R3 RESTORE FOR ERROR MESSAGE @V50A2B5 00327000 LR R5,R1 STORE IN REGISTER 5 @V50A2B5 00328000 LR R1,R4 RESTORE REGISTER 1 @V50A2B5 00329000 GETMAX1 C R5,=F'10' SHOULD BE OVER 10 AT LEAST @V50A2B5 00330000 BL MSG224 NO, ERROR @V50A2B5 00331000 C R5,=F'50000' SHOULD BE LESS THAN 50000 @V50A2B5 00332000 BH MSG224 NO, ERROR @V50A2B5 00333000 L R6,=A(DMKSYSAT) GET THE FLAG @V50A2B5 00334000 CALL DMKSCNFD GET THE NEXT ARGUMENT @V50A2B5 00335000 BNZ SETNST DEFAULT IS NOSTOP @V50A2B5 00336000 CLC 0(4,R1),=C'STOP' SEE IF STOP SPECIFIED @V60BEBC 00337000 BNE TRY6 NO, CHECK FOR NOSTOP @V60BEBC 00338000 NI 0(R6),X'FF'-AUTOSPL-MONSLMT TURN OFF FLAG @V60BEBC 00339000 B ARND1 SKIP TO LEAVE @V60BEBC 00340000 TRY6 CLC 0(6,R1),=C'NOSTOP' SEE IF NOSTOP SPEC'D @V60BEBC 00341000 BNE TRYSAMP NO, CHECK FOR SAMPLE @V60BEBC 00342000 SETNST OI 0(R6),AUTOSPL SET AUTOSPOOL RESTART FLAG @V60BEBC 00343000 NI 0(R6),X'FF'-MONSLMT TURN REAL TIME FLAG OFF @V60BEBC 00344000 B ARND1 SKIP TO LEAVE @V60BEBC 00345000 TRYSAMP CLC 0(6,R1),=C'SAMPLE' SEE IF SAMPLE SPEC'D @V60BEBC 00346000 BNE MSG002 UNDEFINED PARAMETER @V60BEBC 00347000 OI 0(R6),AUTOSPL+MONSLMT SET LIMIT FLAG @V60BEBC 00348000 ARND1 L R8,=A(DMKSYSMX) GET CURRENT MAX @V60BEBC 00349000 ST R5,0(R8) STORE THE NEW @V60BEBC 00350000 B ACK ACKNOWLEDGE COMPLETION @VA08291 00351000 EJECT 00352000 * 00353000 ********************************************************************** 00354000 * 00355000 * MONITOR TIME 00356000 * 00357000 * CHANGES THE TIME OPTIONS FOR AUTOMATIC SPOOLING 00358000 * 00359000 ********************************************************************** 00360000 * 00361000 DMKMCDTI RELOC @VA08291 00362000 CALL DMKSCNFD FIND THE NEXT FIELD IN COMMAND @V50A2B5 00363000 BNZ MSG026 MUST SPECIFY SOMETHING @V50A2B5 00364000 CL R0,F3 SEE IF ALL IS SPECIFIED @V50A2B5 00365000 BNE CHKNONE NO, SEE IF NONE IS SPECIFIED @V50A2B5 00366000 CLC 0(3,R1),=C'ALL' IS ALL SPECIFIED @V50A2B5 00367000 BZ SETALL YES, GO TO APPROPRIATE SECTION @V50A2B5 00368000 CLC 0(3,R1),=C'FOR' IS FOR SPECIFIED @V50A2B5 00369000 BE SETFOR GO TO THE FOR LOGIC @V50A2B5 00370000 B MSG002 BAD SYNTAX @V50A2B5 00371000 SETALL L R5,=A(DMKSYSTS) GIVE START TIME OF 0 @V50A2B5 00372000 MVC 0(8,R5),ZEROES SET THE ZEROES @V50A2B5 00373000 L R5,=A(DMKSYSTE) SET END TO END OF DAY @V50A2B5 00374000 MVC 0(8,R5),SET24 24 HOUR DAY @V50A2B5 00375000 L R5,=A(DMKSYSAT) GET THE FLAGS @V50A2B5 00376000 TM 0(R5),AUTGO IS AUTO SET @V50A2B5 00377000 BNO ACK JUST LEAVE AND DO NOTHING @V50A2B5 00378000 CALL DMKMNIST TURN ON THE TRQS @VMD0138 00379000 B ACK AND RETURN @V50A2B5 00380000 SPACE 1 @V50A2B5 00381000 CHKNONE CL R0,F4 IS THIS 4 IN LENGTH @V50A2B5 00382000 BNZ MSG002 U. F. O. @V50A2B5 00383000 CLC 0(4,R1),=C'NONE' IS IT IN FACT NONE @V50A2B5 00384000 BZ SETNONE YES, DO NONE CODE @V50A2B5 00385000 CLC 0(4,R1),=C'FROM' IS IT FROM @V50A2B5 00386000 BE SETFROM YES, DO FROM LOGIC @V50A2B5 00387000 B MSG002 NOT UNDERSTOOD @V50A2B5 00388000 SETNONE EQU * @V50A2B5 00389000 L R5,=A(DMKSYSTS) GET TIME START @V50A2B5 00390000 MVC 0(8,R5),SET24 MOVE IN HOUR 24 @V50A2B5 00391000 L R5,=A(DMKSYSTE) GET TIME END @V50A2B5 00392000 MVC 0(8,R5),SET24 SET SAME TIME @V50A2B5 00393000 CALL DMKMNIST TURN ON THE TRQS @VMD0138 00394000 L R5,=A(DMKSYSAT) SEE IF AUTO IS ON @V50A2B5 00395000 TM 0(R5),AUTGO DO THE TEST @V50A2B5 00396000 BNO ACK DO NOT TAKE ANY ACTION @V50A2B5 00397000 L R5,=A(DMKPRGMC) SEE IF MONITOR IS ON @V50A2B5 00398000 ICM R5,B'1111',0(R5) ADDR OF COMMUNICATIONS AREA @V50A2B5 00399000 BZ ACK MONITOR IS OFF,NO ACTION TAKEN @V50A2B5 00400000 B TAPESTP1 STOP MONITOR @V50A2B5 00401000 SPACE 1 00402000 PARSE LR R14,R0 SEE IF THERE @V50A2B5 00403000 LR R15,R1 IS A COLON @V50A2B5 00404000 CHKCOL CLI 0(R15),C':' COLON CHECK @V50A2B5 00405000 BZ DOCONV FOUND IT @V50A2B5 00406000 LA R15,1(R15) NO, LOOK AT NEXT @V50A2B5 00407000 BCT R14,CHKCOL LOOP TO END @V50A2B5 00408000 B MSG002 COULDN'T FIND IT @V50A2B5 00409000 DOCONV LA R7,1(R15) WHERE SECOND FIELD BEGINS @V50A2B5 00410000 LR R15,R7 FIND LENGTH OF FIRST FIELD @V50A2B5 00411000 SR R15,R1 COMPUTATION @V50A2B5 00412000 S R15,F1 MINUS ONE @V50A2B5 00413000 BNH MSG002 MUST BE POSITIVE @V50A2B5 00414000 LR R3,R0 SAVE REGISTER 0 @V50A2B5 00415000 LR R4,R1 AND ONE @V50A2B5 00416000 LR R0,R15 USE THIS LENGTH @V50A2B5 00417000 CALL DMKCVTDB CONVERT TO BINARY @V50A2B5 00418000 BNZ CONVERR CONVERT ERROR @V50A2B5 00419000 STH R1,0(R6) KEEP THIS NUMBER @V50A2B5 00420000 LR R0,R3 RESTORE REGISTER 0 @V50A2B5 00421000 LR R1,R4 RESTORE REGISTER ONE @V50A2B5 00422000 LA R14,0(R3,R4) COMPUTE LENGTH OF SECOND OP @V50A2B5 00423000 SR R14,R7 COMPUTE @V50A2B5 00424000 BNH MSG002 ERROR CONDITION @V50A2B5 00425000 LR R3,R0 SAVE REGISTER 0 @V50A2B5 00426000 LR R4,R1 SAVE REGISTER ONE @V50A2B5 00427000 LR R0,R14 USE THE LENGTH @V50A2B5 00428000 LR R1,R7 AND THE ADDRESS @V50A2B5 00429000 CALL DMKCVTDB CONVERT TO COMPUTER NUMBER @V50A2B5 00430000 BNZ CONVERR ERROR CONDITION @V50A2B5 00431000 STH R1,2(R6) STORE VALUE @V50A2B5 00432000 LR R0,R3 RESTORE REGISTER ZERO @V50A2B5 00433000 LR R1,R4 RESTORE REGISTER ONE @V50A2B5 00434000 BR R8 BRANCH OUT @V50A2B5 00435000 CONVERR LR R0,R3 SEND ERROR MSG @V50A2B5 00436000 LR R1,R4 BUT RESTORE REGS AS BEFORE @V50A2B5 00437000 B MSG002 GO TO ERROR MSG @V50A2B5 00438000 SPACE 1 00439000 CONVTOD EQU * @V50A2B5 00440000 LH R7,0(R5) COMPUTE TOTAL NO OF SECS. @V50A2B5 00441000 CH R7,=H'24' , SEE IF LEGAL @V50A2B5 00442000 BH MSG222 NO, SEND MESSAGE @V50A2B5 00443000 MH R7,=H'3600' CONVERT TO SECONDS @V50A2B5 00444000 ST R7,4(R5) TEMPORARY KEEP AROUND @V50A2B5 00445000 LH R7,2(R5) LOAD IN MINUTES @V50A2B5 00446000 CH R7,=H'60' SEE IF IN 60 MIN RANGE @V50A2B5 00447000 BH MSG222 NO, ERROR CONDITION @V50A2B5 00448000 MH R7,=H'60' CONVERT TO SECONDS @V50A2B5 00449000 A R7,4(R5) GET TOTAL SECONDS @V50A2B5 00450000 SR R2,R2 PREPARE TO MULTIPLY @V50A2B5 00451000 LR R3,R7 MULTIPLY SETUP @V50A2B5 00452000 M R2,=F'1000000' MULTIPLY BY 1000000 @V50A2B5 00453000 SLDL R2,12 SHIFT BY 12 @V50A2B5 00454000 STM R2,R3,0(R5) STORE RESULT @V50A2B5 00455000 BR R8 RETURN @V50A2B5 00456000 SPACE 1 00457000 SETFROM CALL DMKSCNFD DO NEXT PARSE @V50A2B5 00458000 BNZ MSG026 NOTHING LEFT @V50A2B5 00459000 LA R6,TIMEFROM R6 POINTS TO THE VALUES PARSED @V50A2B5 00460000 BAL R8,PARSE CHECK SYSTAX AND VALIDITY @V50A2B5 00461000 CALL DMKSCNFD NOTE THE NEXT PARSING @V50A2B5 00462000 BNZ MSG026 MUST BE SOMETHING @V50A2B5 00463000 CL R0,F2 THIS MUST BE TO @V50A2B5 00464000 BNE MSG002 NO, ERROR @V50A2B5 00465000 CLC 0(2,R1),=C'TO' IS IT TO @V50A2B5 00466000 BNZ MSG002 NO, ERROR @V50A2B5 00467000 CALL DMKSCNFD GET FINAL PARSE @V50A2B5 00468000 BNZ MSG026 MUST BE SUCCESSFUL @V50A2B5 00469000 LA R6,TIMETO THE AREA FOR TO VALUES @V50A2B5 00470000 BAL R8,PARSE PARSE IT OUT @V50A2B5 00471000 LA R5,TIMEFROM PROCESS FROM TIME INFORMATION @V50A2B5 00472000 BAL R8,CONVTOD BY CONVERTING TO TOD FORMAT @V50A2B5 00473000 LA R5,TIMETO PROCESS TO IMFORMATION @V50A2B5 00474000 BAL R8,CONVTOD CONVERT TO TIME TO TOD FORMAT @V50A2B5 00475000 CLC TIMEFROM(4),TIMETO SEE IF THESE MAKE SENSE @V50A2B5 00476000 BNL MSG223 IMPOSSIBLE SITUATION @V50A2B5 00477000 L R6,=A(DMKSYSTS) STORE THE START TIME @V50A2B5 00478000 MVC 0(8,R6),TIMEFROM STORE NEW START TIME @V50A2B5 00479000 L R6,=A(DMKSYSTE) STORE NEW STOP TIME @V50A2B5 00480000 MVC 0(8,R6),TIMETO STORE NEW STOP TIME @V50A2B5 00481000 L R5,=A(DMKSYSAT) FIRST SEE IF AUTO IS ON @V50A2B5 00482000 TM 0(R5),AUTGO TEST AUTO FLAG @V50A2B5 00483000 BNO ACK NOPE, JUST EXIT @V50A2B5 00484000 CALL DMKMNIST TURN ON THE TRQS @VMD0138 00485000 B ACK RETURN @V50A2B5 00486000 SPACE 1 00487000 SETFOR EQU * @V50A2B5 00488000 L R6,=A(DMKPRGMC) FIRST SEE IF ALREADY ON @V50A2B5 00489000 ICM R6,B'1111',0(R6) BY LOOKING AT MONCOM POINTER @V50A2B5 00490000 BNZ MSG228 IT IS ALREADY ON @V50A2B5 00491000 L R6,=A(DMKSYSAT) SEE IF AUTODISK IS ON @V50A2B5 00492000 TM 0(R6),AUTGO TEST THE FLAG @V50A2B5 00493000 BNO MSG227 CANNOT DO THIS @V50A2B5 00494000 CALL DMKSCNFD DO THE FINAL PARSE @V50A2B5 00495000 BNZ MSG002 IT MUST BE THERE @V50A2B5 00496000 LA R6,TIMETO WE WILL USE TIMEFROM AREA @V50A2B5 00497000 BAL R8,PARSE PARSE THE FIELDS @V50A2B5 00498000 LA R5,TIMETO NEXT CHANGE TO TOD FORMAT @V50A2B5 00499000 BAL R8,CONVTOD CALL CONVERSION ROUTINE @V50A2B5 00500000 STCK TEMPSTRT LOAD THE START TIME AS NOW @V50A2B5 00501000 LM R6,R7,TEMPSTRT ACQUIRE THE START TIME @V50A2B5 00502000 SL R7,TODATE+4 FIRST SUBTRACT THE END @V50A2B5 00503000 BC 8+2+1,NOCARRY SEE IF THERE IS A CARRY @V50A2B5 00504000 SL R6,F1 SUBTRACT ONE FROM HIGH ORDER @V50A2B5 00505000 NOCARRY SL R6,TODATE FINISH UP THE SUBTRACTION @V50A2B5 00506000 LR R2,R6 KEEP AROUND UNTIL @V50A2B5 00507000 LR R3,R7 AFTER THE 24 HR TEST @V50A2B5 00508000 A R7,TIMETO+4 COMPUTE END TIME SS+DEL @V50A2B5 00509000 BC 12,*+8 SEE IF THERE IS A CARRY @V50A2B5 00510000 AL R6,F1 ADD THE CARRY @V50A2B5 00511000 AL R6,TIMETO FINISH ADDITION @V50A2B5 00512000 STM R6,R7,TIMETO SEE IF OVER HR 24 @V50A2B5 00513000 CLC TIMETO(8),SET24 WITH THE COMPARE @V50A2B5 00514000 BH MSG226 YES, ERROR @V50A2B5 00515000 L R5,=A(DMKSYSTS) STORE IN DMKSYS @V50A2B5 00516000 STM R2,R3,0(R5) THE START TIME @V50A2B5 00517000 L R5,=A(DMKSYSTE) STORE THE END TIME @V50A2B5 00518000 STM R6,R7,0(R5) IN THE DMKSYS AREA @V50A2B5 00519000 CALL DMKMNIST TURN OFF THE TRQS @VMD0138 00520000 B ACK @VA08291 00521000 EJECT 00522000 *********************************************************************** 00523000 * 00524000 * MONITOR STOP 00525000 * 00526000 ********************************************************************** 00527000 SPACE 1 00528000 DMKMCDST RELOC @VA08291 00529000 CALL DMKSCNFD GET NEXT PARAMETER @V2B2638 00530000 BNZ TAPESTP1 DEFAULT IS TO SHUT OFF MONITOR @V50A2B5 00531000 C R0,F8 TOO BIG? @V2B2638 00532000 BH MSG002 YES, GARBAGE IN, GARBAGE OUT @V2B2638 00533000 MVC SAVEWRK3(8),BLANKS BLANK OUT PARM AREA @V2B2638 00534000 LR R2,R0 LENGTH OF PARM INTO R2 @V2B2638 00535000 BCTR R2,0 LESS 1 FOR EXECUTE @V2B2638 00536000 EX R2,PARMOVE MOVE PARM INTO TEMPORARY AREA @V2B2638 00537000 CLC =CL8'TAPE',SAVEWRK3 IS IT PERF MONITOR? @V2B2638 00538000 BE TAPESTOP YES @V2B2638 00539000 CLC =CL8'SPOOL',SAVEWRK3 SEE IF SPOOL STOP @V50A2B5 00540000 BE TAPESTOP YES, CONTINUE @V50A2B5 00541000 AIF (NOT &TRACE(9)).NTR92 @V2B2638 00542000 CLC =CL8'CPTRACE',SAVEWRK3 IS IT INTERNAL TRACE @V2B2638 00543000 .NTR92 ANOP 00544000 BNE MSG002 NOPE, BAD OPERAND @V2B2638 00545000 B STOPCPTR @V50A2B5 00546000 SPACE 1 00547000 *. 00548000 *********************************************************************** 00549000 * 00550000 * MONITOR STOP CPTRACE (TRACE TABLE) 00551000 * 00552000 * STOP ALL FLAVORS OF INTERNAL TRACING. 00553000 * 00554000 *********************************************************************** 00555000 *. 00556000 SPACE 1 00557000 STOPCPTR EQU * @V50A2B5 00558000 L R2,TRACEFLG GET THE TRACE FLAGS @V2B2638 00559000 LTR R2,R2 IS ANY TRACING ACTIVE? @V2B2638 00560000 BZ MSG214 NO, THEN CAN'T STOP TRACING @V2B2638 00561000 SR R2,R2 CLEAR THE TRACE TABLE FLAG @V2B2638 00562000 ST R2,TRACEFLG TO INDICATE NO TRACING @V2B2638 00563000 L R8,PREFIXB ADDRESS OTHER PSA IF ANY @VA08263 00564000 ST R2,TRACEFLG(R8) AND RESET ITS TRACE FLAGS @VA08263 00565000 B ACK @V2B2638 00566000 SPACE 4 00567000 PARMOVE MVC SAVEWRK3(0),0(R1) MOVE ARG TO TEMP AREA @V2B2638 00568000 PARMOVE1 MVC SAVEWRK1(0),0(R1) MOVE ARG TO TEMP AREA @V50A2B5 00569000 EJECT 00570000 *. 00571000 *********************************************************************** 00572000 * 00573000 * MONITOR STOP TAPE 00574000 * 00575000 * MAKE SURE THAT THE MONITOR DATA COLLECTION IS ACTIVE. 00576000 * IF AN ERROR IS BEING PROCESSED THEN THE MONITOR WILL SHUTDOWN 00577000 * WITH A DMKMON ERROR MESSAGE BY ITSELF. 00578000 * IF THE CFSTOP FLAG HAS ALREADY BEEN SET THEN THINGS ARE 00579000 * SET UP TO STOP ALREADY, SO EXIT WITH AN ERROR MESSAGE. 00580000 * 00581000 * OTHERWISE, SET CFSTOP AND OBTAIN AND INITIALIZE A CPEXBLOK. 00582000 * STORE ITS ADDRESS IN MONCOM. 00583000 * 00584000 * IF THE MONITOR TAPE IS NOT BUSY THEN CALL DMKMONSH TO 00585000 * SHUTDOWN THE MONITOR. 00586000 * DMKMONSH WILL USE THE CPEXBLOK TO RETURN TO ITSELF AFTER 00587000 * THE I/O INTERRUPT ROUTINE HAS RECEIVED THE FINAL INTERRUPT 00588000 * AND CLEANED UP THE VARIOUS BLOCKS. 00589000 * DMKMONSH WILL THEN EXIT BACK TO HERE; WHEREUPON WE ISSUE 00590000 * A 'COMMAND COMPLETE' MESSAGE AND EXIT. 00591000 * 00592000 * IF THE TAPE IS BUSY THEN SET THE CPEXADD (EXECUTION 00593000 * ADDRESS) TO ISSUE THE 'COMMAND COMPLETE' MESSAGE FROM THIS 00594000 * MODULE AND GO TO THE DISPATCHER. 00595000 * THE DMKMONIO TAPE I/O INTERRUPT HANDLER WILL CHECK FOR CFSTOP 00596000 * WHEN THE NEXT I/O INTERRUPT COMES IN. 00597000 * HE WILL THEN CLEAN UP AND EXIT BACK TO HERE WHEN HE'S 00598000 * FINISHED. 00599000 * 00600000 *********************************************************************** 00601000 *. 00602000 SPACE 1 00603000 TAPESTP1 MVC SAVEWRK3(8),BLANKS DO THIS FOR LATER @V50A2B5 00604000 TAPESTOP L R7,=A(DMKPRGMC) SOME KEY FIELDS IN DMKPRG @V2B2638 00605000 L R7,0(R7) PICK UP COMM. AREA ADDRESS @V2B2638 00606000 LTR R7,R7 IS THER ONE @V2B2638 00607000 USING MONCOM,R7 00608000 BZ MSG212 NO, THEN STOP IS INVALID PARM @V2B2638 00609000 CLC SAVEWRK3(8),=CL8'TAPE' VALIDITY CHECK TAPE @V50A2B5 00610000 BNE CHKSPLW SEE IF SPOOL SAID HERE @V50A2B5 00611000 TM MONFLAG3,SPOOLED THIS FLAG BETTER BE OFF @V50A2B5 00612000 BNO OKSTOP FINE STOP @V50A2B5 00613000 B MSG002 ELSE ERROR @V50A2B5 00614000 CHKSPLW CLC SAVEWRK3(8),=CL8'SPOOL' SEE IF SPOOL HERE @V50A2B5 00615000 BNE OKSTOP SHUT OFF ANYTHING @V50A2B5 00616000 TM MONFLAG3,SPOOLED SPOOL BETTER BE ON @V50A2B5 00617000 BNO MSG002 ELSE ERROR @V50A2B5 00618000 OKSTOP EQU * @V50A2B5 00619000 SPACE 1 00620000 TM MONFLAG1,ERROR+CFSTOP IS ERROR OR STOP @V2B2638 00621000 * BEING HANDLED NOW. IF SO CAN'T DO IT TWICE 00622000 BNZ MSG218 YES, CANT STOP IT YET, SORRY @V2B2638 00623000 SLR R0,R0 ZIP FOR STORE @VA03658 00624000 C R0,CPCREG8 MON CURRENTLY SUSPENDED @VA09747 00624100 BE EMSG2 YES, MESSAGE TO RETRY @VA09747 00624200 L R1,=A(DMKPRGC8) ADDRESS ENABLED CLASSES @VA03658 00625000 ST R0,0(R1) SHUT OFF IN CASE OF SUSPEND @VA03658 00626000 ST R0,CPCREG8 SHUT OFF ACTIVE CLASSES @VA03658 00627000 TM APSTAT1,APUOPER APMODE? @VA08291 00628000 BNO CONTINUE NO, GO AROUND AP CODE @VA08291 00629000 L R2,PREFIXB ADDRESS OTHER PROCESSOR'S PSA 00630000 ST R0,CPCREG8(R2) PROPAGATE MC MASK TO OTHER PROCESSOR 00631000 LCTL C8,C8,ZEROES ... @V2B2638 00632000 LA R0,CPEXSIZE SIZE OF CPEXBLOK @VA08291 00633000 CALL DMKFREE GET CPEXBLOK @VA08291 00634000 USING CPEXBLOK,R1 @VA08291 00635000 STM R0,R15,CPEXREGS STORE REGS @VA08291 00636000 LA R2,CONTINUE PLACE TO RETURN FOR OTHER @VA08291 00637000 * PROCESSOR 00638000 ST R2,CPEXADD TO DO LOAD CNTL REG 8 @VA08291 00639000 CALL DMKSTKOP STACK FOR OTHER PROCESSOR @VA08291 00640000 GOTO DMKDSPCH @VA08291 00641000 DROP R1 @VA08291 00642000 CONTINUE EQU * @VA08291 00643000 LCTL C8,C8,ZEROES LOAD CONTROL REG 8 @VA08291 00644000 OI MONFLAG1,CFSTOP INDICATE CONSOLE FUNCTION STOP @V2B2638 00645000 MVC MONUSER(8),VMUSER INDICATE STOP REQUESTORS NAME @VA03693 00646000 L R1,MONIOBF IS TAPE BUSY? 00647000 LTR R1,R1 NON-ZERO VALUE INDICATES IT IS 00648000 BNZ ACK BUSY, DMKMON WILL DO THE REST 00649000 LR R9,R7 R9=MONCOM FOR DMKMON @V2B2638 00650000 CALL DMKMNISH REQUEST MONITOR TO SHUT ITSELF DOWN 00651000 L R1,SAVER12 SEE WHO DOES CALLING @V50A2B5 00652000 CLC 0(8,R1),=C'DMKMIA ' IF IT IS MIA @V50A2B5 00653000 BE GETACK SKIP THIS MESSAGE @V50A2B5 00654000 LA R0,L'STOPMSG GET LENGTH OF MESSAGE @V50A2B5 00655000 LA R1,STOPMSG GET ADDRESS OF MESSAGE @V50A2B5 00656000 CALL DMKMIAMU SEND THE MESSAGE @V50A2B5 00657000 GETACK EQU * @V50A2B5 00658000 ACK XC PARMTYPE(2),PARMTYPE RESET SEEKS ACTIVE FLAG @V60BEBC 00659000 EXIT ACKNOWLEDGE COMPLETE @V60BEBC 00660000 EJECT 00661000 * ENTRY POINT - 00662000 * 00663000 * DMKMCDSE - TO PROCESS THE MONITOR SEEKS COMMAND 00664000 * 00665000 * ENTRY CONDITIONS - 00666000 * 00667000 * GPR9 - ADDRESS OF COMMAND LINE BUFFER 00668000 * GPR11 - ADDRESS OF VMBLOK 00669000 * GPR12 - ADDRESS OF ENTRY POINT 00670000 * GPR13 - ADDRESS OF STANDARD SAVEAREA 00671000 * 00672000 * EXIT CONDITIONS - 00673000 * 00674000 * NONE 00675000 * 00676000 * CALLS TO OTHER ROUTINES - 00677000 * 00678000 * DMKSCNFD - TO LOCATE NEXT FIELD IN INPUT LINE 00679000 * DMKQCNWT - TO SEND A MESSAGE TO THE TERMINAL 00680000 * DMKERMSG - TO SEND CANNED ERROR MESSAGE TO TERMINAL 00681000 * DMKCVTHB - TO CONVERT DEVICE ADDRESS TO BINARY 00682000 * DMKSCNRU - TO OBTAIN RDEVBLK ADDRESS FROM DEV. ADDRESS 00683000 * DMKFREE - TO OBTAIN STORAGE FOR MESSAGES 00684000 * DMKCFCSC - SCAN FOR A CHARACTER ROUTINE 00685000 * DMKCVTBH - CONVERT BINARY DEV ADDR TO HEX PRINTABLE 00686000 * DMKFRET - TO RELEASE STORAGE USED FOR MESSAGES 00687000 * 00688000 * EXTERNAL REFERENCES - 00689000 * 00690000 * DMKPRGMC - ADDRESS OF MONITOR COMMUNICATIONS AREA 00691000 * 00692000 * REGISTER USAGE - 00693000 * 00694000 * GPR0 - COMMAND ARGUMENT LENGTH, AND OUTPUT MSG LENGTH 00695000 * GPR1 - COMMAND ARGUMENT ADDRESS, AND OUTPUT MSG ADDRESS 00696000 * GPR2 - GPR10 - WORK REGISTERS 00697000 * GPR11 - VMBLOK ADDRESS 00698000 * GPR12 - BASE REG 00699000 * GPR13 - SAVE AREA ADDRESS 00700000 * GPR14 - LINKAGE REG 00701000 * GPR15 - LINKAGE REG 00702000 * 00703000 * OPERATION - 00704000 * 00705000 * MONITOR SEEKS PROCESSING - OPTIONS ARE: 00706000 * INCLUDE, EXCLUDE, DISPLAY, DELETE 00707000 * 00708000 *************************************************************** 00709000 DMKMCDSE RELOC @V60BEBC 00710000 TS SEEKACTV SEEKS COMMAND ALREADY ACTIVE? @V60BEBC 00711000 BC 4,EMSG2 YES, GET OUT @V60BEBC 00712000 CALL DMKSCNFD LOOK FOR SPEC'D OPTION @V60BEBC 00713000 BNZ MSG026 NOT THERE, BAD NEWS @V60BEBC 00714000 CL R0,F7 INVALID OPERAND IF @V60BEBC 00715000 BH MSG026 MORE THAN 7 CHARS @V60BEBC 00716000 LR R2,R0 GET LENGTH @V60BEBC 00717000 BCTR R2,0 LESS 1 FOR EXECUTE @V60BEBC 00718000 LA R3,OPTABENO OPERAND TABLE COUNT @V60BEBC 00719000 LA R4,MONOPTAB OPERAND TABLE ADDRESS @V60BEBC 00720000 COMPLEN CH R2,0(R4) CHECK OPERAND LENGTH @V60BEBC 00721000 BL NEXTARG TOO SMALL, NEXT ARGUMENT @V60BEBC 00722000 EX R2,COMPARG CHECK AN OPERAND FOR EQUAL @V60BEBC 00723000 BE 10(R4) GO TO PROPER ROUTINE @V60BEBC 00724000 NEXTARG LA R4,14(R4) NEXT ARGUMENT ADDRESS @V60BEBC 00725000 BCT R3,COMPLEN LOOP THROUGH ALL VALID ARGS @V60BEBC 00726000 B MSG002 NOT FOUND, INVALID OPERAND @V60BEBC 00727000 COMPARG CLC 2(0,R4),0(R1) TARGET OF THE EXECUTE @V60BEBC 00728000 SPACE 1 @V60BEBC 00729000 SEDELETE OI PARMTYPE,DELET INDICATE DELETE PROCESSING @V60BEBC 00730000 FREEUPL L R2,=A(DMKENTSK) SEE IF SEEKS IS ACTIVE @V60BEBC 00731000 ICM R1,B'1111',0(R2) .... @V60BEBC 00732000 USING SEEKLIST,R1 @V60BEBC 00733000 BZ TESTYPE NO, NO NEED TO FREE @V60BEBC 00734000 LH R0,SEEKSIZE GET NUMBER OF DWORDS @V60BEBC 00735000 CALL DMKFRET FREE THE LIST @V60BEBC 00736000 XC 0(4,R2),0(R2) CLEAR THE POINTER IN DMKENT @V60BEBC 00737000 DROP R1 @V60BEBC 00738000 B TESTYPE SEE WHO CALLED @V60BEBC 00739000 SPACE 1 @V60BEBC 00740000 SEINCLUD EQU * @V60BEBC 00741000 OI PARMTYPE,INCLUDE INDICATE INCLUDE @V60BEBC 00742000 B INOREX DELETE OLD LIST @V60BEBC 00743000 SEEXCLUD EQU * @V60BEBC 00744000 OI PARMTYPE,EXCLUDE INDICATE EXCLUDE @V60BEBC 00745000 INOREX LA R10,TEMPTBL SYMBOL TABLE ADDR @V60BEBC 00746000 SLR R5,R5 INIT DEVICE COUNT @V60BEBC 00747000 GETDEVCT CALL DMKSCNFD GET NEXT PARM IN CMD BUFFER @V60BEBC 00748000 BNZ CHECKCNT NONE LEFT, CHECK DEVICE COUNT @V60BEBC 00749000 CL R0,F7 CAN'T BE MORE THAN 7 CHARS @V60BEBC 00750000 BH MSG021 SEND ERROR MSG @V60BEBC 00751000 LA R2,DASH SCAN FOR A DASH @V60BEBC 00752000 CALL DMKCFCSC .... @V60BEBC 00753000 BZ NOTRANGE NO RANGE PROCESSING @V60BEBC 00754000 LR R3,R2 GET LENGTH OF FIRST OPERAND @V60BEBC 00755000 SR R3,R1 .... @V60BEBC 00756000 CL R3,F3 3 CHARACTERS ONLY ALLOWED @V60BEBC 00757000 BNE MSG021 ILLEGAL OPERAND @V60BEBC 00758000 LR R4,R0 TOT OPERAND LENGTH @V60BEBC 00759000 LR R0,R3 1ST OPERAND LENGTH @V60BEBC 00760000 MVI 0(R2),BLANK BLANK OUT DASH @V60BEBC 00761000 CALL DMKCVTHB CONVERT TO BINARY @V60BEBC 00762000 BNZ MSG021 NO GOOD, ERROR MSG @V60BEBC 00763000 STH R1,SAVEWRK6 SAVE FOR LATER @V60BEBC 00764000 LA R1,1(R2) 2ND OPERAND IN RANGE @V60BEBC 00765000 SR R4,R3 LENGTH OF 2ND OPERAND @V60BEBC 00766000 BCTR R4,0 LESS 1 FOR DASH @V60BEBC 00767000 CL R4,F3 SEE IF 3 CHARS @V60BEBC 00768000 BNE MSG021 NO, ISSUE ERROR MSG @V60BEBC 00769000 LR R0,R4 READY FOR CONVERT @V60BEBC 00770000 CALL DMKCVTHB CONVERT TO BINARY @V60BEBC 00771000 BNZ MSG021 BAD CONVERT, ISSUE ERROR MSG @V60BEBC 00772000 LH R4,SAVEWRK6 RESTORE RADDR1 @V60BEBC 00773000 CR R1,R4 RADDR2 > RADDR1 @V60BEBC 00774000 BNH MSG021 NO, INVALID OPERAND @V60BEBC 00775000 STH R4,0(R10) BEGINNING OF RANGE @V60BEBC 00776000 STH R1,2(R10) END OF RANGE TO TABLE @V60BEBC 00777000 OI 0(R10),RANGE INDICATES RANGE @V60BEBC 00778000 SR R1,R4 DIFFERENCE PLUS 1 ADDED TO DEV @V60BEBC 00779000 LA R5,1(R5,R1) COUNT @V60BEBC 00780000 LA R10,4(R10) NEXT POS IN TABLE @V60BEBC 00781000 B GETDEVCT GET NEXT PARM @V60BEBC 00782000 NOTRANGE EQU * @V60BEBC 00783000 CL R0,F3 LENGTH=3? @V60BEBC 00784000 BNE MSG021 NO, ISSUE ERROR MSG @V60BEBC 00785000 CALL DMKCVTHB CONVERT TO BINARY @V60BEBC 00786000 BNZ MSG021 BAD CONVERT @V60BEBC 00787000 STH R1,0(R10) SAVE I/O ADDR @V60BEBC 00788000 LA R10,2(R10) NEXT POS IN TABLE @V60BEBC 00789000 LA R5,1(R5) INCR DEVICE COUNT @V60BEBC 00790000 B GETDEVCT GET NEXT DEVICE @V60BEBC 00791000 SPACE 1 @V60BEBC 00792000 CHECKCNT LTR R5,R5 MORE THAN 0 DEVICES? @V60BEBC 00793000 BZ MSG026 NO, ISSUE ERROR MSG @V60BEBC 00794000 B FREEUPL DELETE OLD LIST ATTEMPT @V60BEBC 00795000 TESTYPE LA R8,SEEKHALF(R5) X HALFWORDS FOR HEADER @V60BEBC 00796000 TM PARMTYPE,DELET WHICH OPTION? @V60BEBC 00797000 BO ACK JUST DELETE, SO LEAVE @V60BEBC 00798000 SLR R9,R9 COMPUTE DOUBLE WORDS @V60BEBC 00799000 SRDL R8,2 FOR SEEKS LIST @V60BEBC 00800000 LTR R9,R9 ANY REMAINDER? @V60BEBC 00801000 BZ NORMDR NO, DON'T ROUND UP @V60BEBC 00802000 LA R8,1(R8) 1 MORE DWORD @V60BEBC 00803000 NORMDR LR R0,R8 GO GET THE STORAGE @V60BEBC 00804000 CALL DMKFREE ... @V60BEBC 00805000 L R2,=A(DMKENTSK) SAVE ADDR OF SEEKS LIST @V60BEBC 00806000 ST R1,0(R2) .... @V60BEBC 00807000 USING SEEKLIST,R1 @V60BEBC 00808000 STH R8,SEEKSIZE SAVE DWORDS IN SEEKS LIST @V60BEBC 00809000 LA R4,SEEKHDR(R1) SKIP OVER HEADER @V60BEBC 00810000 DROP R1 @V60BEBC 00811000 LA R6,0 INIT DEVICE COUNTER @V60BEBC 00812000 LA R2,TEMPTBL TABLE OF ADDRS @V60BEBC 00813000 START TM 0(R2),RANGE RANGE TEST @V60BEBC 00814000 BNO ONEDEV NOT A RANGE @V60BEBC 00815000 NI 0(R2),X'FF'-RANGE TURN OFF RANGE INDICATOR @V60BEBC 00816000 LH R3,2(R2) GET ENDING I/O ADDRESS @V60BEBC 00817000 LH R1,0(R2) GET STARTING I/O ADDRESS @V60BEBC 00818000 LA R2,4(R2) NEXT POS IN TEMPTBL @V60BEBC 00819000 NEXTDEV STM R6,R8,SAVEWRK6 SAVE IN CASE OF ERROR @V60BEBC 00820000 BCTR R5,0 COUNT NUMBER OF SCANS @V60BEBC 00821000 CALL DMKSCNRU SEE IF DEVICE EXISTS @V60BEBC 00822000 BNZ MSG040 NO, ISSUE ERROR MSG @V60BEBC 00823000 LM R6,R8,SAVEWRK6 RESTORE CURRENT I/O ADDRESS @V6OBEBC 00824000 STH R1,0(R4) SAVE IT IN SEEKS LIST @V60BEBC 00825000 LA R6,1(R6) INCR DEV COUNT @V60BEBC 00826000 LA R4,2(R4) NEXT POS IN SEEKS LIST @V60BEBC 00827000 ERRETURN CR R3,R1 TEST FOR COMPLETED RANGE @V60BEBC 00828000 BE TESTDONE CHECK FOR ALL DEVICES COVERED @V60BEBC 00829000 LA R1,1(R1) INCR DEV RANGE ADDRESS @V60BEBC 00830000 B NEXTDEV NEXT DEVICE @V60BEBC 00831000 ONEDEV LH R1,0(R2) GET BIN DEV ADDRESS @V60BEBC 00832000 LA R2,2(R2) INCR TEMPTBL PTR @V60BEBC 00833000 LR R3,R1 ONLY ONE DEVICE @V60BEBC 00834000 B NEXTDEV VALIDITY CHECK & INSERT @V60BEBC 00835000 TESTDONE C R5,F0 COVERED ALL DEVICES? @V60BEBC 00836000 BH START NO, DO NEXT DEVICE @V60BEBC 00837000 SPACE 1 @V60BEBC 00838000 SORTLIST L R3,=A(DMKENTSK) ADDRESS THE LIST @V60BEBC 00839000 ICM R3,B'1111',0(R3) ... @V60BEBC 00840000 USING SEEKLIST,R3 @V60BEBC 00841000 STH R6,SEEKDEVS SAVE NUMBER OF DEVS @V60BEBC 00842000 MVC SEEKTYPE,PARMTYPE INCLUDE/EXCLUDE INDICATOR @V60BEBC 00843000 LA R3,SEEKHDR(R3) SKIP OVER HEADER @V60BEBC 00844000 DROP R3 @V60BEBC 00845000 C R6,F1 MUST BE AT LEAST 2 DEVICES TO S@V60BEBC 00846000 BE ACK ONLY 1, ACKNOWLEDGE COMPLETE @V60BEBC 00847000 BL NODEVS NO GEN'D DEVICES IN LIST @V60BEBC 00848000 S R6,F2 DERIVE LAST OFFSET @V60BEBC 00849000 SLL R6,1 FOR BXLE LOOP @V60BEBC 00850000 LA R5,0(R3,R6) LAST=FIRST+OFFSET @V60BEBC 00851000 NXTPASS LR R2,R3 START ADDRESS @V60BEBC 00852000 LA R4,2 INCREMENT VALUE @V60BEBC 00853000 LA R6,0 CHANGE VARIABLE @V60BEBC 00854000 GOAGAIN CLC 0(2,R2),2(R2) N:N+1 @V60BEBC 00855000 BNH NOSWITCH EXHANGE IF N > N+1 @V60BEBC 00856000 MVC TEMP(2),0(R2) SWITCH CODE @V60BEBC 00857000 MVC 0(2,R2),2(R2) ... @V60BEBC 00858000 MVC 2(2,R2),TEMP ... @V60BEBC 00859000 LR R6,R2 SET CHANGE VARIABLE @V60BEBC 00860000 NOSWITCH BXLE R2,R4,GOAGAIN INNER LOOP @V60BEBC 00861000 LTR R6,R6 ANY CHANGES OCCUR? @V60BEBC 00862000 BZ ACK NO, FINISHED @V60BEBC 00863000 LR R5,R6 NEW UPPER BOUND @V60BEBC 00864000 B NXTPASS FOR NEXT PASS THROUGH TABLE @V60BEBC 00865000 NODEVS OI PARMTYPE,DELET INDICATE DELETE @V60BEBC 00866000 B FREEUPL FREE THE LIST @V60BEBC 00867000 SPACE 1 @V60BEBC 00868000 DISPLAY EQU * @V60BEBC 00869000 LA R9,MSGBUFF GET BUFFER AREA @V60BEBC 00870000 MVI MSGBUFF,BLANK AND CLEAR IT @V60BEBC 00871000 MVC MSGBUFF+1(L'MSGBUFF-1),MSGBUFF ..... @V60BEBC 00872000 L R6,=A(DMKENTSK) IS SEL SEEKS ALIVE? @V60BEBC 00873000 ICM R6,B'1111',0(R6) ... @V60BEBC 00874000 BZ EMSG1 NO, SEEKS NOT ACTIVE @V60BEBC 00875000 MVC MSGBUFF(L'SEEKMSG),SEEKMSG @V60BEBC 00876000 USING SEEKLIST,R6 @V60BEBC 00877000 LH R3,SEEKDEVS NUMBER OF DEVICES TO R3 @V60BEBC 00878000 TM SEEKTYPE,INCLUDE TEST FOR INCLUDE/EXCLUDE @V60BEBC 00879000 BNO EXCLUD NO, MUST BE EXCLUDE @V60BEBC 00880000 MVC MSGBUFF+8(2),INCL FILL MSG HEADER @V60BEBC 00881000 B WRITEOUT AND WRITE TO CONSOLE @V60BEBC 00882000 EXCLUD MVC MSGBUFF+8(2),EXCL FILL MSG HEADER @V60BEBC 00883000 WRITEOUT LA R0,L'MSGBUFF LENGTH OF MSG @V60BEBC 00884000 LA R1,MSGBUFF POINT TO BUFFER @V60BEBC 00885000 CALL DMKQCNWT,PARM=NORET AND WRITE IT @V60BEBC 00886000 LA R6,SEEKHDR(R6) SKIP OVER HEADER @V60BEBC 00887000 DROP R6 @V60BEBC 00888000 LR R4,R3 COMPUTE NUMBER OF WRITES @V60BEBC 00889000 SLR R5,R5 AT 8 DEVS PER LINE @V60BEBC 00890000 SRDL R4,3 SO DIVIDE BY 8 @V60BEBC 00891000 SRL R5,29 MOVE TO LOW ORDER BITS @V60BEBC 00892000 LTR R5,R5 NO REMAINDER ON DIVIDE? @V60BEBC 00893000 BZ NOADD1 NO, DON'T ROUND UP @V60BEBC 00894000 LA R4,1(R4) YES, ROUND @V60BEBC 00895000 NOADD1 LA R8,8 DEVS PER WRITE @V60BEBC 00896000 LA R9,MSGBUFF START OF BUFFER @V60BEBC 00897000 C R4,F1 LAST WRITE?? @V60BEBC 00898000 BNE SKIPIT NO, THEN 8 DEVS ON THIS WRITE @V60BEBC 00899000 LTR R5,R5 ZERO REMAINDER? @V60BEBC 00900000 BZ SKIPIT YES, KEEP AT 8 DEVS PER LINE @V60BEBC 00901000 LR R8,R5 NEW DEV COUNT FOR LAST WRITE @V60BEBC 00902000 SKIPIT MVI MSGBUFF,BLANK BLANK THE LINE @V60BEBC 00903000 MVC MSGBUFF+1(L'MSGBUFF-1),MSGBUFF ...... @V60BEBC 00904000 NXT1 LH R1,0(R6) GET BINARY DEVICE @V60BEBC 00905000 CALL DMKCVTBH BACK TO HEX PRINTABLE @V60BEBC 00906000 N R1,X40FFS BLANK HIGH ORDER BYTE @V60BEBC 00907000 ST R1,0(R9) SAVE IN MSG AREA @V60BEBC 00908000 LA R6,2(R6) NEXT DEVICE IN LIST @V60BEBC 00909000 LA R9,4(R9) NEXT POS IN MSGBUFF @V60BEBC 00910000 BCT R8,NXT1 DO NEXT DEVICE @V60BEBC 00911000 LA R0,L'MSGBUFF GET LENGTH AND @V60BEBC 00912000 LA R1,MSGBUFF ADDR OF MSG @V60BEBC 00913000 CALL DMKQCNWT,PARM=NORET AND WRITE IT @V60BEBC 00914000 BCT R4,NOADD1 INITIALIZE FOR NEXT WRITE @V60BEBC 00915000 B ACK COMPLETE @V60BEBC 00916000 EMSG1 MVC MSGBUFF(L'SEERMSG),SEERMSG SEEKS NOT ACTIVE @V60BEBC 00917000 B DUMPMSG WRITE IT @V60BEBC 00918000 EMSG2 MVC MSGBUFF(L'SEACMSG),SEACMSG CMD IN PROGRESS @V60BEBC 00919000 DUMPMSG LA R0,L'MSGBUFF LENGTH AND @V60BEBC 00920000 LA R1,MSGBUFF ADDR OF MSGBUFF @V60BEBC 00921000 CALL DMKQCNWT,PARM=NORET WRITE MSG @V60BEBC 00922000 B ACK @V60BEBC 00923000 *********************************************************************** 00924000 * 00925000 * ALL ERROR MESSAGES ARE SENT FROM HERE. 00926000 * DMKERM RETURNS DIRECTLY TO DMKCFM. 00927000 * 00928000 *********************************************************************** 00929000 SPACE 00930000 MSG002 LA R2,2 INVALID OPERAND MESSAGE @V2B2638 00931000 XC PARMTYPE(2),PARMTYPE RESET SEEKS FLAGS @V60BEBC 00932000 B BADARG @V2B2638 00933000 SPACE 1 00934000 MSG003 LA R2,3 INVALID OPTION @V2B2638 00935000 B BADARG @V2B2638 00936000 SPACE 00937000 MSG021 LA R2,21 RADDR MISSING OR INVALID @V60BEBC 00938000 XC PARMTYPE(2),PARMTYPE RESET SEEKS FLAGS @V60BEBC 00939000 B ZIPR1 GO ISSUE MSG @V60BEBC 00940000 MSG026 LA R2,26 OPERAND MISSING OR INVALID @V2B2638 00941000 XC PARMTYPE(2),PARMTYPE RESET SEEKS FLAGS @V60BEBC 00942000 B ZIPR1 @V2B2638 00943000 SPACE 00944000 MSG040 STM R1,R2,SAVEWRK4 SAVE REGS FOR RETURN @V60BEBC 00945000 SLR R2,R2 SET UP R2 @V60BEBC 00946000 ICM R2,B'1000',RETURN SET FOR RETURN @V60BEBC 00947000 CALL DMKCVTBH BACK TO HEX @V60BEBC 00948000 N R1,X40FFS BLANK HIGH ORDER BYTE @V60BEBC 00949000 IC R2,FORTY ERROR CODE @V60BEBC 00950000 SLR R0,R0 ..... @V60BEBC 00951000 B BADARG CALL ERROR RTN @V60BEBC 00952000 MSG212 LA R2,212 MON TAPE IS NOT ACTIVE @V2B2638 00953000 B ZIPR1 @V2B2638 00954000 SPACE 00955000 MSG214 LA R2,214 CP TRACE TABLE IS NOT ACTIVE @V2B2638 00956000 B ZIPR1 @V2B2638 00957000 SPACE 00958000 MSG218 LA R2,218 MON NOT STOPPED, TAPE I/O ACTIVE @V2B2638 00959000 B ZIPR1 @V2B2638 00960000 SPACE 00961000 MSG222 LA R2,222 TIME PARAMETER SPECIFIES ILLEGAL @V50A2B5 00962000 B ZIPR1 @V50A2B5 00963000 SPACE 1 00964000 MSG223 LA R2,223 START TIME MUST PRECEDE STOP TIME @V50A2B5 00965000 B ZIPR1 @V50A2B5 00966000 SPACE 1 00967000 MSG224 LA R2,224 LIMIT NOT BETWEEN 10 AND 50000 @V50A2B5 00968000 B ZIPR1 @V50A2B5 00969000 SPACE 1 00970000 MSG226 LA R2,226 FOR VALUE SPANS MIDNIGHT @V50A2B5 00971000 B ZIPR1 @V50A2B5 00972000 SPACE 1 00973000 MSG227 LA R2,227 FOR ILLEGAL WITHOUT AUTODISK ON @V50A2B5 00974000 B ZIPR1 @V50A2B5 00975000 SPACE 1 00976000 MSG228 LA R2,228 FOR ILLEGAL WITH MONITOR ON @V50A2B5 00977000 B ZIPR1 @V50A2B5 00978000 SPACE 1 00979000 ZIPR1 SLR R1,R1 NO SUBSTITUTABLES FOR ERM @V2B2638 00980000 SPACE 00981000 BADARG ICM R0,B'1110',MODID+3 MODULE ID FOR MSG @V2B2638 00982000 CALL DMKERMSG SEND ERROR MESSAGE @V2B2638 00983000 SPACE 00984000 * 00985000 * AFTER ALL MESSAGES DMKERMSG RETURNS TO DMKCFM DIRECTLY. 00986000 * EXCEPT MSG040, WHICH RETURNS HERE AND SUBSEQUENTLY RETURNS @V60BEBC 00987000 * BACK TO THE DEVICE LIST SCAN ROUTINE OF THE SEEKS PROCESSOR @V60BEBC 00988000 * @V60BEBC 00989000 LM R1,R2,SAVEWRK4 RESTORE R1 & R2 @V60BEBC 00990000 LM R6,R8,SAVEWRK6 DITTO IO SCAN REGS @V60BEBC 00991000 B ERRETURN BACK TO SCAN ROUTINE @V60BEBC 00992000 EJECT 00993000 *********************************************************************** 00994000 * 00995000 * CONSTANTS, WORK AREAS, EQUATES 00996000 * 00997000 *********************************************************************** 00998000 SPACE 1 00999000 * 01000000 * 01001000 TIMVAL DS 0D @V50A2B5 01002000 DC CL8' ' @V50A2B5 01003000 TEMPSTRT DC CL8' ' @V50A2B5 01004000 TEMPEND DC CL8' ' @V50A2B5 01005000 SET24 DC XL8'000141DD76000000' @V50A2B5 01006000 DS 0F @V50A2B5 01007000 TIMEFROM DS 4H @V50A2B5 01008000 TIMETO DS 4H @V50A2B5 01009000 MONOPTAB DS 0F @V60BEBC 01010000 DC H'1',C'INCLUDE ' @V60BEBC 01011000 B SEINCLUD @V60BEBC 01012000 DC H'1',C'EXCLUDE ' @V60BEBC 01013000 B SEEXCLUD @V60BEBC 01014000 DC H'2',C'DELETE ' @V60BEBC 01015000 B SEDELETE @V60BEBC 01016000 DC H'2',C'DISPLAY ' @V60BEBC 01017000 B DISPLAY @V60BEBC 01018000 OPTABENO EQU (*-MONOPTAB)/14 @V60BEBC 01019000 TEMPTBL DS 40H @V60BEBC 01020000 TEMP DS H @V60BEBC 01021000 SEEKMSG DC C'--SEEKS CLUDED DEVICES' @V60BEBC 01022000 MSGBUFF DS CL40 @V60BEBC 01023000 EXCL DC C'EX' @V60BEBC 01024000 INCL DC C'IN' @V60BEBC 01025000 BLANK EQU C' ' @V60BEBC 01026000 DASH DC C'-' @V60BEBC 01027000 FORTY DC AL1(40) @V60BEBC 01028000 RETURN DC X'80' @V60BEBC 01029000 PARMTYPE DC X'00' @V60BEBC 01030000 INCLUDE EQU X'80' @V60BEBC 01031000 EXCLUDE EQU X'40' @V60BEBC 01032000 DELET EQU X'20' @V60BEBC 01033000 SEEKACTV DC X'00' @V60BEBC 01034000 RANGE EQU X'80' @V60BEBC 01035000 SEERMSG DC C'SELECTIVE SEEKS NOT CURRENTLY ACTIVE ' @V60BEBC 01036000 SEACMSG DC C'SEEK,STOP,OR CLOSE CMD IN PROGRESS,RETRY' @VA09747 01037100 STOPMSG DC C'MONITOR HAS BEEN MANUALLY STOPPED' @V50A2B5 01038000 LENMSG EQU 21 LENGTH OF DISPLAY MESSAGE @V2B2638 01039000 MONTINT EQU 60 DEFAULT INTERVAL = 60 SEC @V2B2638 01040000 EJECT 01041000 LTORG @V2B2638 01042000 EJECT 01043000 SEEKLIST DSECT @V60BEBC 01044000 SEEKDEVS DS H @V60BEBC 01045000 SEEKSIZE DS H @V60BEBC 01046000 SEEKTYPE DS H @V60BEBC 01047000 SEEKHDR EQU *-SEEKLIST @V60BEBC 01048000 SEEKENT DS H @V60BEBC 01049000 ENTLEN EQU *-SEEKENT @V60BEBC 01050000 SEEKHALF EQU SEEKHDR/2 @V60BEBC 01051000 COPY EQU @V2B2638 01052000 PSA @V2B2638 01053000 COPY MONBLOKS @V2B2638 01054000 COPY VMBLOK @V2B2638 01055000 COPY SAVE @V2B2638 01056000 COPY IOBLOKS @V2B2638 01057000 COPY CORE @V2B2638 01058000 COPY DEVTYPES @V2B2638 01059000 COPY RBLOKS @V2B2638 01060000 COPY TIMER @V2B2638 01061000 COPY UDIRECT @V50A2B5 01062000 END 01063000