THI TITLE 'DMKTHI (CP) VM/370 - RELEASE 6' 00001000 ISEQ 73,80 VALIDATE SEQUENCING OF INPUT @V2B2698 00002000 COPY OPTIONS @V2B2698 00003000 COPY LOCAL OPTIONS @V2B2698 00004000 DMKTHI CSECT @V2B2698 00005000 USING SAVEAREA,R13 @V2B2698 00006000 USING PSA,R0 @V2B2698 00007000 USING VMBLOK,R11 @V2B2698 00008000 MODID DC CL8'DMKTHI' @V2B2698 00009000 EJECT 00010000 *. 00011000 * MODULE NAME - 00012000 * 00013000 * DMKTHI - GIVE DATA ON UTILIZATION OF AND CONTENTION FOR 00014000 * MAJOR SYSTEM RESOURCES 00015000 * 00016000 * FUNCTION - 00017000 * 00018000 * TO HANDLE THE 'INDICATE' CONSOLE FUNCTION 00019000 * 00020000 * ATTRIBUTES - 00021000 * 00022000 * SERIALLY REUSABLE, PAGEABLE, CALLED VIA SVC 00023000 * 00024000 * ENTRY POINTS - 00025000 * DMKTHIEN - TO PROCESS ALL FORMS OF INDICATE COMMAND 00026000 * 00027000 * ENTRY CONDITIONS - 00028000 * 00029000 * GPR9 - ADDRESS OF COMMAND LINE BUFFER 00030000 * GPR11 - ADDRESS OF VMBLOK 00031000 * GPR12 - ADDRESS OF ENTRY POINT 00032000 * GPR13 - ADDRESS OF STANDARD SAVE AREA 00033000 * 00034000 * EXIT CONDITIONS - 00035000 * 00036000 * NONE 00037000 * 00038000 * CALLS TO OTHER ROUTINES - 00039000 * 00040000 * DMKCVTBD - TO CONVERT BINARY TO EBCDIC DECIMAL 00041000 * DMKCVTBH - TO CONVERT BINARY TO EBCDIC HEX 00042000 * DMKQCNWT - TO WRITE INDICATE RESPONSE TO USER 00043000 * DMKSCNFD - TO LOOK FOR INDICATE PARAMETERS IN COMMAND FIELDS 00044000 * DMKSCNVU - VIRTUAL DEVICE BLOCKS FROM VIRTUAL ADDRESS 00045000 * DMKSCNRD - FULL REAL DEVICE ADDRESS FROM REAL DEVICE BLOCK 00046000 * DMKFREE - TO OBTAIN STORAGE FOR REPLY MESSAGES 00047000 * DMKFRET - TO RELEASE STORAGE 00048000 * DMKERMSG - TO WRITE ERROR MESSAGES 00049000 * DMKTMRPT - TO OBTAIN CURRENT UP TO DATE VALUE OF VMVTIME 00050000 * 00051000 * EXTERNAL REFERENCES - 00052000 * 00053000 EXTRN DMKSCHCU SMOOTHED WAIT TIME FOR 30 SEC CPU@V407577 00054100 EXTRN DMKSCHCA SMOOTHED WAIT TIME FOR 30 SEC APU@V407577 00054200 EXTRN DMKSCHRL RUNLIST ANCHOR @V407577 00054300 EXTRN DMKSCHEL ELIGIBLE LIST ANCHORS @V407577 00054400 EXTRN DMKSCHS1 SMOOTHED CPU CONTENTION, Q1 COUNT@V2B2698 00055000 EXTRN DMKSCHS2 SMOOTHED CPU CONTENTION, Q2 COUNT@V2B2698 00056000 EXTRN DMKSCHCO SMOOTHED CORE UTILIZATION @V2B2698 00057000 EXTRN DMKSCHSC SMOOTHED SCHED CONTENTION RATIO @V2B2698 00058000 EXTRN DMKSCHLI WAIT STATE SAMPLING INTERVAL @V2B2698 00059000 EXTRN DMKCVTBD CONVERT FROM BINARY TO DECIMAL @V2B2698 00060000 EXTRN DMKCVTBH CONVERT FROM BINARY TO HEX @V2B2698 00061000 EXTRN DMKQCNWT WRITE MESSAGES TO USER @V2B2698 00062000 EXTRN DMKSCNFD SEARCH FOR NEXT FIELD ON CMD LINE@V2B2698 00063000 EXTRN DMKSCNVU OBTAIN VIRTUAL DEVICE BLOCKS @V2B2698 00064000 EXTRN DMKSCNRD OBTAIN REAL DEVICE ADDRESS @V2B2698 00065000 EXTRN DMKFREE OBTAIN FREE STORAGE @V2B2698 00066000 EXTRN DMKFRET RELEASE STORAGE @V2B2698 00067000 EXTRN DMKERMSG WRITE AN ERROR MESSAGE TO USER @V2B2698 00068000 EXTRN DMKTMRPT OBTAIN UP-TO-DATE VTIME VALUE @V2B2698 00069000 * 00070000 * REGISTER USAGE - 00071000 * 00072000 * GPR9 - CHAINING THROUGH VMBLOK LIST 00073000 * GPR6 - BRANCH AND LINK REG FOR SUBROUTINES 00074000 * GPR4 - DSECT COVER REGISTER FOR REPLIES 00075000 * GPR0-3 - WORK REGISTERS 00076000 * 00077000 * COMMAND FORMAT - 00078000 * 00079000 * +----------+---------+--------+ 00080000 * | INDICATE | LOAD | | 00081000 * | | ------- | | 00082000 * | IND | USER | * | 00083000 * | | |--- | 00084000 * | | USER | USERID | 00085000 * | | | | 00086000 * | | QUEUES | | 00087000 * | | | | 00088000 * | | I/O | | 00089000 * | | | | 00090000 * | | PAGING | WAIT | 00091000 * | | PAG | ---- | 00092000 * | | | ALL | 00093000 * +----------+---------+--------+ 00094000 * 00095000 * INTERPRETATION 00096000 * 00097000 * INDICATE LOAD PRODUCES THE RESPONSE AS FOLLOWS: 00098000 * CPU-095% APU-040% Q1-05 Q2-02 STORAGE-042% RATIO-01.0 00099600 * THE CPU AND APU FIELDS ARE OBTAINED FROM SMOOTHED INTERVAL 00099700 * WAIT STATE MAINTAINED BY THE SCHEDULER. THE THIRD FIELD GIVES 00099800 * THE SMOOTHED CONTENTIONS FOR CPU IN TERMS OF THE SMOOTHED 00099900 * Q1 AND Q2 VALUES. 00100000 * THE NEXT FIELD IN THE INDICATE RESPONSE IS A MEASURE OF THE 00104000 * UTILIZATION OF MAIN HIGH SPEED STORAGE. IT IS CALCULATED 00105000 * FROM THE RATIO BETWEEN THE SUM OF THE ESTIMATED WORKING SETS 00106000 * OF THE MULTIPROGRAMMING SET, AND THE NUMBER OF PAGABLE PAGES 00107000 * IN THE SYSTEM.(THE LATTER IS ROUND ABOUT 400 ON A 2MEGABYTE 00108000 * SYSTEM. THE VALUE IS SMOOTHED AND EXPRESSED AS A PERCENTAGE. 00109000 * THE SCHEDULER CONTENTION RATIO IS A MEASURE OF THE CONTENTION 00110000 * FOR HIGH SPEED STORAGE, AND IS ARBITRARILY DEFINED AS 00111000 * RATIO = (E+M)/M, WHERE E IS THE NUMBER OF USERS WAITING 00112000 * TO BE ALLOCATED STORAGE SPACE AND THEREFORE TEMPORARILY 00113000 * RESIDENT IN THE SCHEDULER 'ELIGIBLE' LISTS, AND M IS 00114000 * THE NUMBER OF USERS ALREADY RESIDENT IN STORAGE, I.E. 00115000 * THE MEMBERS OF THE MULTIPROGRAMMING SET. 00116000 * THUS THE RATIO IS THE RATIO OF ACTIVE USERS TO BEING SERVICED 00117000 * USERS, AND IS IDEALY 1.0 FOR OPTIMUM RESPONSE, WHEN THERE IS 00118000 * ENOUGH MAIN STORAGE TO ACCOMMODATE ALL ACTIVE USERS. WHEN 00119000 * SCR=1.5 AND M = 10, THEN 5 USERS ARE IN THE ELIGIBLE LISTS 00120000 * WAITING FOR THE SCHEDULER TO ALLOCATE THEM STORAGE SPACE, AND 00121000 * THE FULL DISCRIMINATION CAPABILITIES OF THE SCHEDULER MAY 00122000 * BE EXCERCISED ON THOSE USERS. (SEE TR 75.0001 FOR DETAILS) 00123000 * 00124000 * THE PURPOSE OF THE INDICATE QUEUES OPTION IS TO PROVIDE A 00125100 * DISPLAY OF THE ACTIVE USERS, THE QUEUES THEY OCCUPY, THEIR 00125200 * CURRENT STATUS, AND THEIR MAIN STORAGE REQUIREMENTS. 00125300 * THE RESPONSE IS ORDERED AS FOLLOWS: 00125400 * 1. Q1 AND Q2 USERS IN ORDER OF RUNLIST PRIORITY 00125500 * 2. ELIGIBLE LIST E1 IN ORDER OF SCHEDULING PRIORITY 00125600 * 3. ELIGIBLE LIST E2 IN ORDER OF SCHEDULING PRIORITY 00125700 * THE QUEUE INDICATORS ARE Q1, Q2, E1, OR E2. POSSIBLE STATUS 00125800 * CONDITIONS ARE: RU...RUNUSER ON THE CPU, RA...RUNUSER ON THE 00125900 * APU, PG...IN PAGEWAIT, IO...IN I/O WAIT, EX...IN INSTRUCTION 00126000 * SIMULATION WAIT, PS...IN PSW WAIT, OR --...RUNNABLE AND JUST 00126100 * WAITING FOR THE CPU. WHEN MUTIPLE STATUS CONDITIONS ARE 00126200 * POSSIBLE, THE FIRST ENCOUNTERED IN THE ORDER INDICATED ABOVE 00126300 * IS RECORDED IN THE REPLY. FOLLOWING THE STATUS INDICATION 00126400 * FOR EACH USER ARE TWO FIELDS REPRESENTING THAT USER'S MAIN 00126500 * STORAGE REQUIREMENT. THE FIRST FIELD IS THE NUMBER OF RESIDENT 00126600 * PAGES AND THE SECOND IS THAT USER'S PROJECTED WORKING SET. 00126700 * 00147000 * THE PURPOSE OF THE INDICATE I/O OPTION IS TO PROVIDE INSIGHT 00148000 * INTO THE CONDITIONS LEADING TO POSSIBLE I/O BOUNDNESS WITHIN 00149000 * THE SYSTEM. THE RESPONSE GIVES THE USERID OF ALL THE USERS IN 00150000 * THE I/O WAIT STATE AT THAT INSTANT OF TIME, AND THE REAL 00151000 * DEVICE ADDRESS BEING WAITED ON. SINCE THE RESPONSE 00152000 * IS A SNAP SHOT, THE COMMAND SHOULD BE USED SEVERAL TIMES 00153000 * BEFORE A CONDITION MAY BE THOUGHT TO BE PERSISTENT, AND 00154000 * THEN IT IS AN INDICATION THAT THE SEEKS OPTION OF VM 00155000 * MONITOR SHOULD BE RUN IN ORDER TO CONDUCT A THOROUGH 00156000 * INVESTIGATION OF THE SUGGESTED CONGESTION. 00157000 * 00158000 * THE INDICATE PAGING OPTION IS TO CHECK IF OVERFLOWING OF THE 00159000 * 2305 (OR FIXED HEAD DEVICE) IS CONTRIBUTING TO A PERSISTENT 00160000 * PAGE WAIT PROBLEM. THE RESPONSE GIVES ALL USERS IN PAGE 00161000 * WAIT AND THE COUNTS OF THE NUMBERS OF PAGES ALLOCATED ON 00162000 * DRUM AND ON DISK. IF A USER IS PAGING PRIMARILY FROM DISK 00163000 * HE WILL BE RUNNING SLOWER THAN IF HE WERE PAGING FROM DRUM 00164000 * AND IF THERE IS A LOW LEVEL OF MULTIPROGRAMMING, THIS MAY 00165000 * FORCE HIGH SYSTEM PAGE WAIT TIMES. OF COURSE IF A USER IS 00166000 * PAGING ON DISK, YOU WOULD LIKE TO KNOW WHO HAS FILLED UP THE 00167000 * DRUM, AND THIS IS THE PURPOSE OF THE INDICATE PAGING ALL 00168000 * OPTION WHICH GIVES THE PAGE RESIDENCY DATA FOR ALL THE USERS 00169000 * CURRENTLY LOGGED ONTO THE SYSTEM. 00170000 * 00171000 * THE PURPOSE OF THE INDICATE USER OPTION IS TO ALLOW 00172000 * USERS TO FIND OUT MORE ABOUT THE ACTIVITY OF THEIR 00173000 * VIRTUAL MACHINES IN TERMS OF THE RESOURCES USED 00174000 * AND OCCUPIED AND EVENTS THAT HAVE TAKEN PLACE. 00175000 * USERS WITH ONLY G CLASS AUTHORITY MAY ONLY ACCESS 00176000 * DATA FROM THEIR OWN VMBLOK, USERS WITH E CLASS 00177000 * AUTHORITY MAY ACCESS DATA FROM ANY VMBLOK 00178000 * 00179000 * THE DATA OBTAINED IS AS FOLLOWS: 00180000 * PAGES: RES-010 WS-010 READS=001234 WRITES=000645 DISK-0128 DRUM-0000 00181000 * VTIME=000:59 TTIME=001:35 SIO=000099 RDR-000009 PRT-000000 PCH-000000 00182000 * 00183000 * 00184000 * OPERATION 00185000 * 00186000 * 1. CALL DMKSCNFD TO CHECK FOR ARGUMENTS, IF NONE FOUND 00187000 * ASSUME PROCESSING FOR INDICATE ONLY 00188000 * 00189000 * IF 'LOAD' OR DEFAULT OF NO PARAMETER FOUND GOTO PART 2 00190000 * 00191000 * IF 'I/O' FOUND GO TO SECTION WHICH LOOKS FOR RUNNABLE 00192000 * USERS IN I/O WAIT STATE, PART 3. 00193000 * 00194000 * IF 'PAGING' FOUND GO TO SECTIONS TO HANDLE 'IND PAGING' 00195000 * FUNCTIONS, PARTS 4 AND 5. 00196000 * 00197000 * IF 'USER' FOUND HANDLE USER RESOURCE REQUEST FUNCTION 00198000 * PART 6. 00199000 * 00200000 * IF 'QUEUES' FOUND DISPLAY CURRENT MULTIPROGRAMMING SET 00201000 * PART 7. 00202000 * 00203000 * IF INVALID PARAMS FOUND SEND CANNED ERROR MSGS AND EXIT 00204000 * 00205000 * 2. INDICATE LOAD PROCESSING: 00206000 * USING REPLY MESSAGE DSECT GET BUFFER FOR REPLY AND 00207000 * MOVE IN THE SKELETON REPLY MESSAGE, THEN PATCH REPLY 00208000 * WITH INDICATE COMPONENT VALUES AS FOLLOWS: 00209000 * PICK UP SMOOTHED WAIT STATE NUMBERS FROM SCHEDULER, 00210100 * CONVERT TO PERCENTAGE IN PRINTABLE HEX. AND MOVE INTO 00211000 * REPLY. GET SMOOTHED NUMBERS OF USERS IN Q1 AND Q2 FROM 00212000 * DMKSCH CONVERT TO HEX AND MOVE INTO MESSAGE. 00213000 * GET SMOOTHED CORE UTILIZATION AND SCHEDULER CONTENTION 00214000 * RATIO NUMBERS, CONVERT TO HEX AND MOVE INTO REPLY 00215000 * CALL DMKQCNWT TO SEND REPLY TO USER, FREE BUFFER AND EXIT 00216000 * 00217000 * 3. INDICATE I/O PROCESSING: 00218000 * USING REPLY MESSAGE DSECT GET BUFFER FOR REPLY AND 00219000 * BUILD REPLY FIELD BY FIELD AS FOLLOWS: 00220000 * SCAN VMBLOK CHAIN LOOKING FOR IN Q NOT RUNNABLE 00221000 * USERS WHO ARE IN I/O WAIT. WHEN ONE IS FOUND 00222000 * PICK UP FROM HIS VMBLOK THE VIRTUAL ADDRESS OF THE DEVICE 00223000 * FOR WHICH HE LAST ISSUED A VIRTUAL I/O REQUEST. CALL 00224000 * DMKSCNVU TO LOCATE THE VIRTUAL DEVICE BLOCK ADDRESS 00225000 * AND THENCE THE POINTER TO THE CORRESPONDING REAL 00226000 * DEVICE ADDRESS. THEN USEDMKSCNRD 00227000 * TO GET THE FULL REAL DEVICE ADDRESS AND DMKCVTBH 00228000 * TO CONVERT THE RESULT TO EBCDIC HEX FOR INSERTION IN THE 00229000 * REPLY MESSAGE. ADD THE USERID FOR WHOM THE I/O IS 00230000 * BEING PERFORMED. 00231000 * 00232000 * EACH LINE OF THE REPLY MESSAGE MAY CONTAIN A MAXIMUM 00233000 * OF 5 FIELDS (USERID AND REAL DEVICE ADDRESS IN EACH FIELD) 00234000 * AS EACH LINE IS FILLED IT IS STACKED IN A BUFFER ONTO 00235000 * THE USER'S VMBLOK IN A CHAIN WHOSE ANCHOR POINT IS THE 00236000 * VMSTKO FIELD OF THE VMBLOK. WHEN THE LAST VMBLOK HAS 00237000 * BEEN SCANNED, THE LAST PARTIALLY FILLED REPLY LINE 00238000 * IS STACKED UP AND AN EXIT IS MADE. 00239000 * 00240000 * 4. INDICATE PAGING PROCESSING: 00241000 * USING A REPLY MESSAGE DSECT OBTAIN THE APPROPRIATE SIZED 00242000 * BUFFER AND BUILD AS MANY AS 5 FIELDS INTO REPLY AS FOLLOWS 00243000 * WHEN THE 'PAGING' PARAMETER IS ENCOUNTERED, A CALL TO 00244000 * DMKSCNFD IS MADE TO CHECK FOR THE 'WAIT' OR 'ALL PARAMETER 00245000 * IF NEITHER ARE FOUND, THE DEFAULT IS 'WAIT' FOR WHICH 00246000 * PROCESSING IS AS FOLLOWS: 00247000 * THE VMBLOK CHAIN IS SCANNED LOOKING FOR IN Q 00248000 * USERS, WHO ARE NOT RUNNABLE AND ARE IN PAGE WAIT. WHEN 00249000 * ONE IS FOUND, A FIELD IS ADDED TO THE REPLY MESSAGE 00250000 * CONTAINING THE USERID AND A COUNT OF THE NUMBER OF PAGES 00251000 * RESIDENT ON DRUM AND ON DISK. 00252000 * 00253000 * 5. INDICATE PAGING ALL PROCESSING: 00254000 * WHEN THE 'PAGING ALL' PARAMTERS ARE FOUND, THE REPLY 00255000 * MESSAGE CONSTRUCTED CONTAINS INFORMATION ON THE PAGE 00256000 * RESIDENCY COUNTS OF ALL USERS LOGGED ONTO THE SYSTEM. 00257000 * 00258000 * EACH LINE OF REPLY TO THE 'INDICATE PAGING ALL' COMMAND 00259000 * MAY CONTAIN A MAXIMUM OF 4 FIELDS, EACH CONTAINING THE 00260000 * USERID AND 3CHAR. DRUM RESIDENCY AND DISK RESIDENCY 00261000 * PAGE COUNT SEPARATED BY A COLON; THE STACK 00262000 * PROCEEDURE IS USED AS BEFORE TO ACCUMULATE THE 00263000 * REPLY MESSAGES. 00264000 * 00265000 * 6. INDICATE USER COMMAND PROCESSING: 00266000 * WHEN THE 'USER' PARAMETER IS ENCOUNTERED, THEN THE '*' IS 00267000 * ALLOWED BY ANY CLASS OF USER, AND IS THE DEFAULT. HOWEVER 00268000 * ONLY PRIVILEGED CLASSE USERS E ARE 00269000 * ALLOWED TO ACCESS VMBLOK DATA FROM OTHER USERS 00270000 * OF THE SYSTEM. DATA ACCORDING TO THE CONTENTS 00271000 * DESCRIBED ABOVE ARE CONVERTED TO DECIMAL AND 00272000 * STACKED ON THE USERS VMBLOK FOR REPLY. 00273000 * 00274000 * 7. INDICATE QUEUES COMMAND PROCESSING: 00275000 * THE'QUEUES' PARAMETER MAY ONLY BE USED BY PRIVILEGED USERS 00276000 * A SCAN IS MADE OF THE RUNLIST AND ELIGIBLE LISTS AND 00277100 * DATA RELATING TO THOSE USERS ARE DISPLAYED. THE DATA 00277200 * INCLUDE USERID, QUEUE INDICATOR (Q1,Q2,E1,E2), STATUS 00277300 * INDICATOR (RU, RA, PG, IO, EX, PS, OR --), 00277400 * PAGES RESIDENT AND MOST RECENT WORKING SET SIZE ESTIMATE. 00281000 * THE STACK SUBROUTINE IS USED TO ADD THE REPLY BUFFERS TO 00282000 * THE REQUESTOR'S VMBLOK. SUBSEQUENTLY DMKCFM OUTPUTS THE 00283000 * MESSAGES AND FREES UP THE BUFFER SPACE. 00284000 *. 00285000 DMKTHIEN RELOC @V2B2698 00286000 CALL DMKSCNFD LOOK FOR OPTION @V2B2698 00287000 BNZ THILOAD DEFAULT IS INDICATE LOAD @V2B2698 00288000 LR R2,R0 PARAMETER LENGTH @V2B2698 00289000 CL R2,F8 GREATER THAN MAX. ALLOWED? @V2B2698 00290000 BH THI003E YES-INVALID OPTION @V2B2698 00291000 BCTR R2,0 LESS ONE FOR COMPARE @V2B2698 00292000 LA R3,PARMTBL PARAMETER SCAN TABLE @V2B2698 00293000 LA R4,PARMENT LENGTH OF ONE ENTRY @V2B2698 00294000 LA R5,PARMEND LAST ENTRY IN TABLE @V2B2698 00295000 SPACE 00296000 THISRCH EQU * SCAN TABLE FOR FNCTN PARM MATCH @V2B2698 00297000 EX R2,CLCR1R3 'CLC 0(*-*,R1),0(R3)' @V2B2698 00298000 BNE NEXSRCH NO MATCH - SKIP TO NEXT ENTRY @V2B2698 00299000 CLM R2,1,9(R3) CHECK FOR MINIMUM ABBREVIATION @V2B2698 00300000 BL NEXSRCH TOO SMALL - SKIP TO NEXT ENTRY @V2B2698 00301000 SLR R6,R6 @V2B2698 00302000 ICM R6,8,VMCLEVEL CHECK PRIVILEGED CLASS...MAY BE @V2B2698 00303000 N R6,8(0,R3) RESTRICTED @V2B2698 00304000 BZ THI003E INVALID OPTION IF IT IS @V2B2698 00305000 LH R4,10(0,R3) CHECKS OUT PICK UP BRANCH ADDRESS@V2B2698 00306000 B DMKTHI(R4) GO TO FUNCTIONAL SUBROUTINE @V2B2698 00307000 NEXSRCH EQU * @V2B2698 00308000 BXLE R3,R4,THISRCH ON TO NEXT TABLE ENTRY @V2B2698 00309000 B THI003E NO MATCH, INVALID OPTION @V2B2698 00310000 SPACE 00311000 PARMTBL DS 0F FUNCTION PARAMETER TABLE @V2B2698 00312000 DC C'LOAD ',AL1(E+G,3),AL2(THILOAD-DMKTHI) @V2B2698 00313000 DC C'USER ',AL1(E+G,3),AL2(THIUSER-DMKTHI) @V2B2698 00314000 DC C'QUEUES ',AL1(E,0),AL2(THIQUE-DMKTHI) @V2B2698 00315000 DC C'PAGING ',AL1(E,2),AL2(THIPAG-DMKTHI) @V2B2698 00316000 PARMEND DC C'I/O ',AL1(E,2),AL2(THIIO-DMKTHI) @V2B2698 00317000 PARMENT EQU *-PARMEND LENGTH OF 1 ENTRY @V2B2698 00318000 SPACE 00319000 CLCR1R3 CLC 0(*-*,R1),0(R3) EX'ED COMPARE FOR PARM CHECK @V2B2698 00320000 SPACE 00321000 USING LOADMSGD,R4 LOAD MESSAGE DSECT @V2B2698 00322000 THILOAD LA R0,LOADMSGL FIRST GET NO. DBL WORDS @V2B2698 00323000 CALL DMKFREE GET THE STORAGE @V2B2698 00324000 LR R4,R1 THE DSECT COVER REGISTER @V2B2698 00325000 LA R1,LOADMSGC GET BYTE COUNT OF REPLY MESSAGE @V2B2698 00326000 BCTR R1,0 LESS 1 FOR EXECUTED MOVE @V2B2698 00327000 EX R1,MVLODMSG MOVE SKELETON MESSAGE TO BUFFER @V2B2698 00328000 L R2,=A(DMKSCHCU) ADDR OF SMOOTH WAIT VALUE TO @V2B2698 00329000 * NEAREST 1/4 SEC 00330100 SLR R7,R7 CLEAR TO INDICATE CPU PASS @V407577 00330200 CVTLOAD L R3,0(R2) LOAD THE SMOOTHED WAIT TIME @V407577 00330300 L R1,=A(DMKSCHLI) SAMPLING INTERVAL IN SECONDS @V2B2698 00331000 L R5,0(R1) @V2B2698 00332000 SLL R5,2 TO NEAREST 1/4 SEC ALSO @V2B2698 00333000 LR R1,R5 @V2B2698 00334000 SR R1,R3 GET INTERVAL CPU IN 1/4 SECONDS @V2B2698 00335000 LTR R1,R1 UNLIKELY ZERO FOR NO ACTIVITY @V2B2698 00336000 BZ ZEROUT BUT WE HIT IT ANYWAY @V2B2698 00337000 SR R0,R0 CLEAR FOR MULT AND DIVIDE @V2B2698 00338000 M R0,=F'100' BY 100 FOR PERCENT @V2B2698 00339000 LR R2,R5 @V2B2698 00340000 DR R0,R2 DIVIDE BY SAMPLE INTERVAL @V2B2698 00341000 SRL R5,1 GET HALF SAMPLING INTERVAL @V2B2698 00342000 CR R0,R5 IS REMAINDER SIGNIFICANT (>1/2) @V2B2698 00343000 BNH ZEROUT NO, SKIP CORRECTION @V2B2698 00344000 LA R1,1(,R1) YES, ADD 1 TO RESULT @V2B2698 00345000 ZEROUT BAL R8,CONVERT CONVERT TO DECIMAL @V2B2698 00346000 LTR R7,R7 IS THIS THE CPU WAIT TIME @V407577 00347100 BNZ APUDATA NO..MUST BE APU WAIT TIME @V407577 00347200 MVC CPUTIL,TEMPHOLD+5 FILL IN CPU PERCENT LOAD @V407577 00347300 L R7,=A(DMKSCHCA) LOAD R7 TO INDICATE APU PASS @V407577 00347400 LR R2,R7 AND POINT TO THE APU WAIT TIME @V407577 00347500 B CVTLOAD NOW GO COMPUTE APU TIMES @V407577 00347600 APUDATA MVC APUTIL,TEMPHOLD+5 FILL IN APU PERCENT LOAD @V407577 00347700 L R2,=A(DMKSCHS1) SMOOTHED Q1*1024 @V2B2698 00348000 L R1,0(R2) @V2B2698 00349000 SRL R1,10 BACK TO NEAREST INTERGER @V2B2698 00350000 BAL R8,CONVERT DECIMAL FOR REPLY @V2B2698 00351000 MVC NUMQ1,TEMPHOLD+6 AND MOVE INTO REPLY BUFFER @V2B2698 00352000 L R2,=A(DMKSCHS2) SMOOTHED NO OF Q2 USERS * 1024 @V2B2698 00353000 L R1,0(R2) @V2B2698 00354000 SRL R1,10 BACK TO NEAREST INTEGER FOR REPLY@V2B2698 00355000 BAL R8,CONVERT DECIMAL FOR REPLY @V2B2698 00356000 MVC NUMQ2,TEMPHOLD+6 @V2B2698 00357000 L R1,=A(DMKSCHCO) ADDR CORE UTIL FRACTION*1024 @V2B2698 00358000 L R1,0(R1) @V2B2698 00359000 SR R0,R0 @V2B2698 00360000 M R0,=F'100' CONVERT TO PERCENTAGE*1024 @V2B2698 00361000 SRL R1,10 /1024 TO GET PURE PERCENTAGE @V2B2698 00362000 BAL R8,CONVERT @V2B2698 00363000 MVC CORUTIL,TEMPHOLD+5 @V2B2698 00364000 L R1,=A(DMKSCHSC) SCHED CONTENTION RATIO*1024 @V2B2698 00365000 L R1,0(R1) @V2B2698 00366000 SR R0,R0 @V2B2698 00367000 M R0,=F'100' FOR ACCURACY TO 1 DEC PLACE @V2B2698 00368000 SRL R1,10 /1024 TO GET BACK TO BASE @V2B2698 00369000 BAL R8,CONVERT @V2B2698 00370000 MVC QUTIL,TEMPHOLD+4 PATCH Q CONT RATIO INFO @VA04300 00371500 MVC QUTILDEC,TEMPHOLD+6 MSG. INSERTING DECIMAL PT @V2B2698 00372000 LA R0,LOADMSGC MESSAGE SIZE IN BYTES @V2B2698 00373000 LR R1,R4 LOCATION OF MESSAGE BUFFER @V2B2698 00374000 LA R3,LOADMSGL DOUBLE WORDS OF BUFFER TO FRET @V2B2698 00375000 CALL DMKQCNWT,PARM=NORET+DFRET @V2B2698 00376000 THIEXIT EXIT @V2B2698 00377000 SPACE 00378000 MVLODMSG MVC 0(*-*,R4),LODMSGSK SKELETON LOAD MESSAGE @V2B2698 00379000 MVUSRMS1 MVC 0(*-*,R4),USERMSG1 SKELETON USER MESSAGE LINE 1 @V2B2698 00380000 MVUSRMS2 MVC 0(*-*,R4),USERMSG2 SKELETON USER MESSAGE LINE 2 @V2B2698 00381000 DROP R4 @V2B2698 00382000 SPACE 00383000 CONVERT CALL DMKCVTBD CONVERT BIN NUMB IN R1 TO DECIMAL@V2B2698 00384000 STM R0,R1,TEMPHOLD SAVE RESULT FOR MVC @V2B2698 00385000 BR R8 RETURN TO BALER @V2B2698 00386000 EJECT 00387000 THIIO LA R0,IOPGMSGL 64 BYTES OR 4 13 BYTE FIELDS 1 12@V2B2698 00388000 CALL DMKFREE GET BUFFER @V2B2698 00389000 ST R1,SAVEWRK1 START OF EACH REPLY @V2B2698 00390000 LA R3,64(R1) END OF MAX REPLY MESSAGE @V2B2698 00391000 ST R3,SAVEWRK2 SAVE FOR LATER COMPARE @V2B2698 00392000 LR R4,R1 @V2B2698 00393000 SR R10,R10 @V2B2698 00394000 ST R10,SAVEWRK3 CLEAR STACK COUNTER @V2B2698 00395000 LR R9,R11 HOOK INTO VMBLOK CHAIN, THIS USER@V2B2698 00396000 MOREUSR2 DS 0H @VA07710 00397500 TM VMDSTAT-VMBLOK(R9),VMRUN IS HE RUNNABLE @V2B2698 00399000 BO NXTUSR2 YES, COULDN'T BE IN A WAIT STATE @V2B2698 00400000 TM VMRSTAT-VMBLOK(R9),VMIOWAIT IS HE IN I/O WAIT @V2B2698 00401000 BO BALFIOB YES, GO TO SUBROUTINE BAL @V2B2698 00402000 TM VMDSTAT-VMBLOK(R9),VMINQ IS THIS USER IN A QUEUE@VA07710 00402330 BZ NXTUSR2 NO, NOT INTERESTED @VA07710 00402660 TM VMRSTAT-VMBLOK(R9),VMPSWAIT WAIT PSW WHILE IN Q @V2B2698 00403000 BZ NXTUSR2 NO, TRY NEXT IN CHAIN @V2B2698 00404000 BALFIOB BAL R6,FINDRDEV YES, FIND RDEV AND ADD TO REPLY @V2B2698 00405000 NXTUSR2 L R9,VMPNT-VMBLOK(,R9) USE FORWARD PTR TO GET NEXT@V2B2698 00406000 CR R9,R11 END OF VMBLOK LOOP YET @V2B2698 00407000 BNE MOREUSR2 NO, MORE USERS YET @V2B2698 00408000 ENDLOOP2 MVC PATCH(4),=C'I/O ' PATCH WARNING MESSAGE @V2B2698 00409000 ENDLOOPC C R4,SAVEWRK1 STILL ONLY AT START OF BUFFER @V2B2698 00410000 BE FRETBUF YES, HAVEN'T STARTED FILLING YET @V2B2698 00411000 BAL R6,STACK NO, STACK WHAT IS SO FAR FILLED @V2B2698 00412000 FRETBUF LA R0,IOPGMSGL @V2B2698 00413000 L R1,SAVEWRK1 @V2B2698 00414000 CALL DMKFRET RELEASE REPLY BUFFER @V2B2698 00415000 L R10,SAVEWRK3 FIND OUT IF WE HAVE AT LEAST ONE @V2B2698 00416000 LTR R10,R10 USER IN WAIT STATE @V2B2698 00417000 BNZ THIEXIT YES NO PANICK MESSAGE @V2B2698 00418000 LA R0,NOIOMSGL WE DON'T HAVE A SINGLE ONE @V2B2698 00419000 LA R1,NOIOMSG GET SIZE AND LOCATION OF MESSAGE @V2B2698 00420000 CALL DMKQCNWT,PARM=NORET AND SEND IT @V2B2698 00421000 B THIEXIT AND RETURN @V2B2698 00422000 SPACE 00423000 FINDRDEV LR R11,R9 SUBROUTINE INPUT CONDITION @V2B2698 00424000 ST R6,SAVEWRK6 RETURN ADDRESS WILL BE DESTROYED @V2B2698 00425000 LH R1,VMACTDEV VIRT ADDRESS OF MOST RECENT V-IO @V2B2698 00426000 CALL DMKSCNVU GET VIRTUAL DEVICE BLOCKS @V2B2698 00427000 L R11,SAVER11 RESTORE CALLERS VMBLOK ADDR @V2B2698 00428000 BZ GOTDEV WE DID GET SOMETHING AFTERALL @V2B2698 00429000 NORDEV EQU * @VA09251 00429500 MVC TEMPHOLD+1(3),=C'---' DEV ADDRESS NOT AVAIL @V2B2698 00430000 B NODEV @V2B2698 00431000 SPACE 00432000 GOTDEV L R8,VDEVREAL-VDEVBLOK(,R8) POINTER TO REAL DEV @V2B2698 00433000 LTR R8,R8 IS THERE A RDEVICE ? @VA09251 00433300 BZ NORDEV NO @VA09251 00433600 CALL DMKSCNRD GET FULL REAL DEVICE ADDRESS @V2B2698 00434000 CALL DMKCVTBH CONVERT TO EBCDIC HEX @V2B2698 00435000 ST R1,TEMPHOLD SAVE FOR MOVE @V2B2698 00436000 NODEV L R6,SAVEWRK6 GOOD TIME TO RESTORE RET ADDRESS @V2B2698 00437000 USING IOMSGD,R4 I/O REPLY MESSAGE DSECT @V2B2698 00438000 MVC IRADD,TEMPHOLD+1 WE FINALLY GOT THERE @V2B2698 00439000 MVC IUSERID,VMUSER-VMBLOK(R9) USERID INTO MESSAGE @V2B2698 00440000 MVI ISEP1,C' ' BLANK SEPARATOR @V2B2698 00441000 LR R5,R4 SAVE FOR END OF FIELD SEPARATOR @V2B2698 00442000 LA R4,13(R4) INDEX TO NEXT MESSAGE FIELD @V2B2698 00443000 C R4,SAVEWRK2 END OF THIS BUFFER YET @V2B2698 00444000 BNL STACK YES, STACK THIS MESSAGE AND RESET@V2B2698 00445000 MVI ISEP2-IOMSGD(R5),C' ' END SEP FOR LAST FIELD @V2B2698 00446000 BR R6 NO, SPACE FOR MORE FIELDS YET @V2B2698 00447000 DROP R4 @V2B2698 00448000 EJECT 00449000 THIPAG CALL DMKSCNFD LOOK FOR ANY PARAMTER @V2B2698 00450000 BNZ THIPGONL NONE, THI PAGING ONLY @V2B2698 00451000 CL R0,F4 MAY NOT BE MORE THAN 4 CHARS. @V2B2698 00452000 BH THI003E INVALID OPTION @V2B2698 00453000 CL R0,F3 AND NOT LESS THAN 3 CHARS. @V2B2698 00454000 BL THI003E INVALID OPTION @V2B2698 00455000 BH CLWAIT MUST BE WAIT IF ITS ANYTHING @V2B2698 00456000 CLC =C'ALL',0(R1) IS IT ALL? @V2B2698 00457000 BE THIPGALL FINE, HANDLE 'THI PAGING ALL' @V2B2698 00458000 B THI003E GARBAGE IN, GARBAGE OUT. @V2B2698 00459000 SPACE 00460000 CLWAIT CLC =C'WAIT',0(R1) IS IT WAIT? @V2B2698 00461000 BNE THI003E INVALID OPTION @V2B2698 00462000 THIPGONL LA R0,IOPGMSGL 67 BYTES OR 3 17 BYTE FIELDS 1 16@V2B2698 00463000 CALL DMKFREE GET BUFFER @V2B2698 00464000 ST R1,SAVEWRK1 START OF EACH REPLY @V2B2698 00465000 LA R3,67(R1) END OF MAX REPLY MESSAGE @V2B2698 00466000 ST R3,SAVEWRK2 SAVE FOR LATER COMPARE @V2B2698 00467000 LR R4,R1 @V2B2698 00468000 SR R10,R10 @V2B2698 00469000 ST R10,SAVEWRK3 CLEAR STACK COUNTER @V2B2698 00470000 LR R9,R11 START INTO VMBLOK CHAIN, USER @V2B2698 00471000 MOREUSR3 TM VMDSTAT-VMBLOK(R9),VMINQ IS HE EVEN IN Q @V2B2698 00472000 BZ NXTUSR3 NO, NOT AT ALL INTERESTED @V2B2698 00473000 TM VMDSTAT-VMBLOK(R9),VMRUN YA, IS HE STIL RUNABLE @V2B2698 00474000 BO NXTUSR3 YA, SO CAN'T BE IN ANY WAIT STATE@V2B2698 00475000 TM VMRSTAT-VMBLOK(R9),VMPGWAIT IS HE IN PAGE WAIT @V2B2698 00476000 BZ NXTUSR3 NO, TRY NEXT IN CHAIN @V2B2698 00477000 BAL R6,BLDPMSG YES, PUT PAGE RES DATA IN MSG @V2B2698 00478000 NXTUSR3 L R9,VMPNT-VMBLOK(,R9) GET FORWARD POINTER @V2B2698 00479000 CR R9,R11 BACK AT START OF LOOP YET @V2B2698 00480000 BNE MOREUSR3 NO, MORE TO COME @V2B2698 00481000 ENDLOOP3 MVC PATCH(4),=C'PAGE' PATCH WARNING MESSAGE @V2B2698 00482000 B ENDLOOPC JOIN COMMON CODE TO END UP @V2B2698 00483000 SPACE 00484000 USING PAGMSGD,R4 @V2B2698 00485000 BLDPMSG UNPK 0(5,R4),VMPDRUM-VMBLOK(3,R9) DRUM RES COUNT @V2B2698 00486000 MVC PDRUM,1(R4) SELECT CHARACTERS OF INTEREST @V2B2698 00487000 * ONLY 00488000 TR PDRUM,ABX-240 TRANSLATE A THRU F CHARS @V2B2698 00489000 MVI PSEP1,C' ' BLANK SEPARATOR @V2B2698 00490000 MVI PCOLON,C':' BETWEEN DRUM AND DISK COUNT @V2B2698 00491000 UNPK 0(5,R4),VMPDISK-VMBLOK(3,R9) DISK RES COUNT @V2B2698 00492000 MVC PDISK,1(R4) SELECT ONLY CHARACTERS OF @V2B2698 00493000 * INTEREST 00494000 TR PDISK,ABX-240 TRANSLATE A THRU F CHARS @V2B2698 00495000 MVC PUSERID,VMUSER-VMBLOK(R9) ADD USERID TO MESSAGE @V2B2698 00496000 LR R5,R4 MAY BE SPACE FOR FIELD SEPARATOR @V2B2698 00497000 LA R4,17(R4) INDEX TO NEXT MESSAGE FIELD @V2B2698 00498000 C R4,SAVEWRK2 END OF BUFFER YET @V2B2698 00499000 BNL STACK YES, STACK THIS MSG AND RESET @V2B2698 00500000 MVI PSEP2-PAGMSGD(R5),C' ' NO, SEP FOR LAST FIELD @V2B2698 00501000 BR R6 AND SPACE FOR MORE FIELDS YET @V2B2698 00502000 DROP R4 @V2B2698 00503000 SPACE 00504000 THIPGALL LA R0,IOPGMSGL 67 BYTES OR 3 17 BYTE FIELDS 1 16@V2B2698 00505000 CALL DMKFREE GET BUFFER @V2B2698 00506000 ST R1,SAVEWRK1 START OF EACH REPLY @V2B2698 00507000 LA R3,67(R1) END OF MAX REPLY MESSAGE @V2B2698 00508000 ST R3,SAVEWRK2 SAVE FOR LATER COMPARE @V2B2698 00509000 LR R4,R1 @V2B2698 00510000 LA R10,1 MUST BE AT LEAST 1 USER IN CHAIN @V2B2698 00511000 ST R10,SAVEWRK3 SET STACK COUNTER @V2B2698 00512000 LR R9,R11 START WITH CALLER @V2B2698 00513000 NXTUSER BAL R6,BLDPMSG GET PAGE RES DATA FOR THIS USER @V2B2698 00514000 L R9,VMPNT-VMBLOK(,R9) NEXT VMBLOK PLEASE... @V2B2698 00515000 CR R9,R11 BACK AT START OF LOOP YET @V2B2698 00516000 BNE NXTUSER NO, GET DATA FOR THIS USER @V2B2698 00517000 L R9,ASYSVM YES, SYSTEM HAS SPACE TOO @V2B2698 00518000 BAL R6,BLDPMSG SO LETS INCLUDE ITS CONTRIBUTION @V2B2698 00519000 B ENDLOOPC DONE, SEND LAST BUFFER @V2B2698 00520000 EJECT 00521000 STACK L R3,SAVEWRK1 START OF BUFFER @V2B2698 00522000 LR R7,R3 POINTER FOR LATER MOVE @V2B2698 00523000 C R4,SAVEWRK2 ARE WE HERE BECAUSE OF FULL BUFF @V2B2698 00524000 BL NODEC NO, R4 IS EXACTLY RIGHT @V2B2698 00525000 BCTR R4,R0 YES, R4 IS 1 TOO BIG, DECR COUNT @V2B2698 00526000 NODEC SR R4,R3 BYTE COUNT OF MESSAGE @V2B2698 00527000 LA R0,7(R4) ROUND UP TO FULL DBL WORD @V2B2698 00528000 SRL R0,3 CONVERT TO DBL WORDS @V2B2698 00529000 A R0,F1 PLUS 1 FOR HEADER @V2B2698 00530000 CALL DMKFREE GET STACK BUFFER @V2B2698 00531000 STH R4,4(R1) MESSAGE SIZE AND BUFFER SIZE @V2B2698 00532000 STH R0,6(R1) INTO HEADER @V2B2698 00533000 BCTR R4,R0 LESS 1 FOR EXECUTED MOVE @V2B2698 00534000 EX R4,MVCSTK MESSAGE INTO STACK BUFFER @V2B2698 00535000 SR R0,R0 @V2B2698 00536000 ST R0,0(R1) NEW LAST BUFFER IN STACK @V2B2698 00537000 LA R2,VMSTKO VMBLOK POINTER TO STACK CHAIN @V2B2698 00538000 STKLOOP L R3,0(R2) LOCATE LAST BUFFER IN CHAIN @V2B2698 00539000 LTR R3,R3 IN EXISTING STACK @V2B2698 00540000 BZ CHAIN THIS IS IT @V2B2698 00541000 LR R2,R3 NOT THIS ONE, POINT TO NEXT @V2B2698 00542000 B STKLOOP MAYBE THIS IS @V2B2698 00543000 CHAIN ST R1,0(R2) PREVIOUS LAST POINTS TO NEW @V2B2698 00544000 L R4,SAVEWRK1 RESET BUFFER POINTER @V2B2698 00545000 L R1,SAVEWRK3 ADD 1 TO COUNT OF BUFFERS @V2B2698 00546000 LA R1,1(R1) STACKED @V2B2698 00547000 ST R1,SAVEWRK3 AND RESTORE @V2B2698 00548000 BR R6 AND CONTINUE VMBLOK SCAN @V2B2698 00549000 SPACE 00550000 MVCSTK MVC 8(0,R1),0(R7) MOVE MESSAGE INTO STACK BUFFER @V2B2698 00551000 SPACE 00552000 THI003E EQU * INVALID OPTION @V2B2698 00553000 LA R2,003(0) MESSAGE NUMBER @V2B2698 00554000 B MSGEND @V2B2698 00555000 SPACE 00556000 THI045E EQU * DMKTHI045E USERID NOT LOGGED ON @V2B2698 00557000 LA R2,045(0) MESSAGE NUMBER @V2B2698 00558000 B MSGEND R0,R1 POINT TO USERID @V2B2698 00559000 SPACE 00560000 MSGEND ICM R0,14,MODID+3 @V2B2698 00561000 CALL DMKERMSG DMKERM WILL RETURN TO CFM @V2B2698 00562000 EJECT 00563000 THIUSER CALL DMKSCNFD LOOK FOR NEXT PARAMETER @V2B2698 00564000 BNZ GETMYDA DEFAULT IS NO PARAMETER @V2B2698 00565000 CL R0,F8 MAX. 8 CHAR. USERID @V2B2698 00566000 BH THI003E TOO MANY - INVALID OPTION @V2B2698 00567000 CL R0,F1 MAY BE 1 CHAR SPECIAL @V2B2698 00568000 BE TESTAS OK. CHECK FOR ASTERISK @V2B2698 00569000 NOTAST LR R3,R0 @V2B2698 00570000 BCTR R3,R0 LESS 1 FOR EXECUTED MOVE @V2B2698 00571000 MVC SAVEWRK1(8),BLANKS PREPARE FIELD FOR USERID @V2B2698 00572000 EX R3,MVUSID MOVE WHAT WE HAVE @V2B2698 00573000 CLC SAVEWRK1(8),VMUSER START WITH CALLER @V2B2698 00574000 BE GETMYDA LIKES TO SEE HIS NAME IN PRINT @V2B2698 00575000 TM VMCLEVEL,E IS HE AUTHORIZED TO LOOK AROUND @V2B2698 00576000 BZ THI003E NO, REJECT COMMAND @V2B2698 00577000 LR R9,R11 YES, NOW VALIDATE USERID PARM @V2B2698 00578000 B NOTSELF @V2B2698 00579000 NXTUSR4 CLC SAVEWRK1(8),VMUSER-VMBLOK(R9) DOES USERID MATCH @V2B2698 00580000 BE GETVMDA YES, FORMAT USER DATA FROM VMBLOK@V2B2698 00581000 NOTSELF L R9,VMPNT-VMBLOK(,R9) NO, ONTO NEXT USER @V2B2698 00582000 CR R9,R11 ARE WE AT END OF VMBLOK CHAIN @V2B2698 00583000 BE THI045E YES, NO USERID MATCH...ERROR @V2B2698 00584000 B NXTUSR4 NO, CHECK THIS USER @V2B2698 00585000 SPACE 00586000 MVUSID MVC SAVEWRK1(*-*),0(R1) MOVE USERID @V2B2698 00587000 SPACE 00588000 TESTAS CLI 0(R1),C'*' LOOK SPECIFICALLY FOR '*' @V2B2698 00589000 BNE NOTAST UNLIKELY CASE OF 1 CHAR USERID @V2B2698 00590000 GETMYDA LR R9,R11 OK POINT TO YOUR OWN USERID @V2B2698 00591000 SPACE 00592000 GETVMDA LA R0,USRMSG1L SPACE FOR LARGER OF 2 REPLY MSGS @V2B2698 00593000 CALL DMKFREE GET THE BUFFER @V2B2698 00594000 USING USRMSG1D,R4 DSECT FOR FIRST LINE OF REPLY @V2B2698 00595000 LR R4,R1 @V2B2698 00596000 LA R1,USRMSG1C LENGTH OF SKELETON REPLY @V2B2698 00597000 BCTR R1,0 LESS 1 FOR EXECUTED MOVE @V2B2698 00598000 EX R1,MVUSRMS1 MOVE INTO BUFFER @V2B2698 00599000 LH R1,VMPAGES-VMBLOK(R9) CURR NUMBER OF RES PAGES @V2B2698 00600000 BAL R8,CONVERT @V2B2698 00601000 MVC RES,TEMPHOLD+4 @V2B2698 00602000 LH R1,VMWSPROJ-VMBLOK(R9) CURRENT PROJECTED WSS @V2B2698 00603000 BAL R8,CONVERT @V2B2698 00604000 MVC WSS,TEMPHOLD+4 @V2B2698 00605000 L R1,VMPGREAD-VMBLOK(R9) TOTAL PAGES READ SO FAR @V2B2698 00606000 BAL R8,CONVERT @V2B2698 00607000 MVC READS,TEMPHOLD+2 6 CHARS @V2B2698 00608000 L R1,VMPGWRIT-VMBLOK(R9) TOTAL PAGES WRITTEN @V2B2698 00609000 BAL R8,CONVERT @V2B2698 00610000 MVC WRITES,TEMPHOLD+2 @V2B2698 00611000 LH R1,VMPDISK-VMBLOK(R9) PAGES ALLOCATED ON DISK @V2B2698 00612000 BAL R8,CONVERT @V2B2698 00613000 MVC DISK,TEMPHOLD+4 @V2B2698 00614000 LH R1,VMPDRUM-VMBLOK(R9) PAGES ALLOCATED ON DRUM @V2B2698 00615000 BAL R8,CONVERT @V2B2698 00616000 MVC DRUM,TEMPHOLD+4 4 CHARS @V2B2698 00617000 LA R0,USRMSG1C REPLY MESSAGE LENGTH @V2B2698 00618000 LR R1,R4 AND LOCATION @V2B2698 00619000 CALL DMKQCNWT,PARM=NORET WRITE MSG, DON'T WAIT @V2B2698 00620000 SPACE 00621000 DROP R4 @V2B2698 00622000 USING USRMSG2D,R4 DSECT FOR SECOND LINE OF REPLY @V2B2698 00623000 LA R1,USRMSG2C BYTE COUNT OF SECOND LINE @V2B2698 00624000 BCTR R1,0 LESS 1 FOR EXECUTED MOVE @V2B2698 00625000 EX R1,MVUSRMS2 MOVE SKELETON REPLY INTO BUFFER @V2B2698 00626000 LR R11,R9 SET UP PROPER VMBLOK ADDR @V2B2698 00627000 CALL DMKTMRPT GET TOT VIRT TIME, DONT MISS ANY @V2B2698 00628000 L R11,SAVER11 RESTORE CALLERS VMBLOK ADDR @V2B2698 00629000 LR R2,R0 MOVE VTIME TOTAL TO R2,R3 @V2B2698 00630000 LR R3,R1 ... @V2B2698 00631000 ST R2,TEMP2 AND SAVE IT FOR LATER @V2B2698 00632000 ST R3,TEMP2+4 ... @V2B2698 00633000 LTR R2,R2 WATCH OUT FOR ZERO @V2B2698 00634000 BP SHIFT MAKE SURE VALUE POSITIVE @VA06179 00634500 SR R2,R2 MAKE SURE R2 IS ZERO @VA06179 00635000 ST R2,TEMP2 MAKE SURE TEMP2 IS NOT NEG @VA06179 00635500 TM TEMP2+4,X'80' DON'T WANT TO MISS 1/2 SEC @V2B2698 00636000 BO SHIFT STILL OK TO DIVIDE, VALUE IS SIG @V2B2698 00637000 SR R1,R1 LESS THAN 1/2 SEC, SAME AS ZERO @V2B2698 00638000 B NOVT SKIP DIVIDES @V2B2698 00639000 SHIFT SRDL R2,12 RIGHT ALIGNED MICROSECS @V2B2698 00640000 D R2,=F'1000000' SECONDS IN R3, REM IN R2 @V2B2698 00641000 C R2,=F'500000' IS REMAINDER SIGNIFICANT @V2B2698 00642000 BNH NORND NO, NO ROUND UP @V2B2698 00643000 LA R3,1(,R3) YES, ADD 1 TO RESULT @V2B2698 00644000 NORND SR R2,R2 CLEAR AGAIN FOR DIVIDE @V2B2698 00645000 LTR R3,R3 ABOUT TO DIVIDE BY ZERO? @V2B2698 00646000 BZ *+8 YES, DON'T DO IT. @V2B2698 00647000 D R2,F60 MINS IN R3, SECS IN R2 @V2B2698 00648000 LR R1,R3 @V2B2698 00649000 NOVT BAL R8,CONVERT CONVERT TO DEC. IN TEMPHOLD @V2B2698 00650000 MVC VTIME,TEMPHOLD+5 MAX 999 MINS @V2B2698 00651000 LR R1,R2 NOW CONVERT THE SECONDS FIELD @V2B2698 00652000 BAL R8,CONVERT @V2B2698 00653000 MVC VSECS,TEMPHOLD+6 MAX 59 OF COURSE @V2B2698 00654000 LM R0,R1,VMTTIME-VMBLOK(R9) SIMULATION TIME @V2B2698 00655000 SL R1,TEMP2+4 SUBTRACT PROBLEM TIME TO GET @V2B2698 00656000 BC 8+2+1,*+8 TOTAL TIME, BRANCH ON NO CARRY @V2B2698 00657000 SL R0,F1 @V2B2698 00658000 SL R0,TEMP2 TOTAL NOW IN R0,R1 @V2B2698 00659000 LM R2,R3,=X'7FFFFFFFFFFFF000' MAX POSITIVE NUMBER @V2B2698 00660000 SLR R3,R1 GET POSITIVE TOTAL TIME @V2B2698 00661000 BC 8+2+1,*+8 BR ON NO CARRY @V2B2698 00662000 SL R2,F1 @V2B2698 00663000 SLR R2,R0 TOTAL POSITIVE VALUE IN R2,R3 @V2B2698 00664000 LTR R2,R2 BE WARY OF ZERO CASE @V2B2698 00665000 BNZ SHIFT2 NO PROBLEM @V2B2698 00666000 LTR R3,R3 DON'T WANT TO MISS 1/2 SEC @V2B2698 00667000 BM SHIFT2 SMALL BUT OK FOR A WHILE @V2B2698 00668000 SLR R3,R3 < 1/2 SEC, MAKE IT ZERO. @V2B2698 00669000 B ZEROT ABSOLUTELY ZERO @V2B2698 00670000 SHIFT2 SRDL R2,12 NOW RIGHT ALIGNED MICROSECONDS @V2B2698 00671000 D R2,=F'1000000' CONVERT TO SEC IN R3, REM IN R2 @V2B2698 00672000 C R2,=F'500000' IS REMAINDER SIGNIFICANT @V2B2698 00673000 BNH NORND2 NO @V2B2698 00674000 LA R3,1(,R3) YES, ROUND UP TO NEAREST SECOND @V2B2698 00675000 NORND2 SR R2,R2 @V2B2698 00676000 LTR R3,R3 SMALL CHANCE A ZERO CREPT THROUGH@V2B2698 00677000 BZ ZEROT SO IN THAT CASE SKIP DIVIDE @V2B2698 00678000 D R2,F60 MINS IN R3, SECS IN R2 @V2B2698 00679000 ZEROT LR R1,R3 MINS INTO R1 FOR CONVERT @V2B2698 00680000 NOTT BAL R8,CONVERT @V2B2698 00681000 MVC TTIME,TEMPHOLD+5 MAX 999 MINS @V2B2698 00682000 LR R1,R2 SECS IN R1 FOR CONVERT @V2B2698 00683000 BAL R8,CONVERT @V2B2698 00684000 MVC TSECS,TEMPHOLD+6 MAX 59 SECS OF COURSE @V2B2698 00685000 L R1,VMIOCNT-VMBLOK(R9) TOTAL VIRTUAL DISK I/O @V2B2698 00686000 BAL R8,CONVERT @V2B2698 00687000 MVC SIO,TEMPHOLD+2 6 CHARS @V2B2698 00688000 L R1,VMCRDS-VMBLOK(R9) TOTAL VIRTUAL CARDS READ @V2B2698 00689000 BAL R8,CONVERT @V2B2698 00690000 MVC RDR,TEMPHOLD+2 @V2B2698 00691000 L R1,VMLINS-VMBLOK(R9) TOTAL VIRT LINE PRINTED @V2B2698 00692000 BAL R8,CONVERT @V2B2698 00693000 MVC PRT,TEMPHOLD+2 @V2B2698 00694000 L R1,VMPNCH-VMBLOK(R9) TOTAL VIRT CARDS PUNCHED @V2B2698 00695000 BAL R8,CONVERT @V2B2698 00696000 MVC PCH,TEMPHOLD+2 @V2B2698 00697000 LA R0,USRMSG2C BYTE COUNT OF 2ND LINE OF REPLY @V2B2698 00698000 LR R1,R4 LOCATION OF BUFFER @V2B2698 00699000 LA R3,USRMSG1L DOUBLE WORD SIZE OF LARGEST BUFF @V2B2698 00700000 CALL DMKQCNWT,PARM=NORET+DFRET FRET BUFF, DONT WAIT @V2B2698 00701000 B THIEXIT @V2B2698 00702000 DROP R4 @V2B2698 00703000 EJECT 00704000 THIQUE LA R0,QUEMSGL 68 BYTES OR 2 23 BYTE + 1 22 @V2B2698 00705000 CALL DMKFREE GET BUFFER @V2B2698 00706000 ST R1,SAVEWRK1 START OF EACH REPLY @V2B2698 00707000 LA R3,68(R1) END OF MAX REPLY MESSAGE @V2B2698 00708000 ST R3,SAVEWRK2 SAVE FOR LATER COMPARE @V2B2698 00709000 LR R4,R1 @V2B2698 00710000 SR R10,R10 @V2B2698 00711000 ST R10,SAVEWRK3 CLEAR STACK COUNTER @V2B2698 00712000 L R10,PREFIXB GET OTHER PROC'S PREFIX ADDRESS @V4M0174 00712100 L R10,RUNUSER(R10) GET RUNUSER ON OTHER PROCESSOR @V4M0174 00712200 ST R10,SAVEWRK4 SAVE RUNUSER ON OTHER PROCESSOR @V4M0174 00712300 L R9,=A(DMKSCHRL) START BY SCANNING THE RUNLIST @V407577 00713100 MORERL L R9,VMQFPNT-VMBLOK(,R9) POINT TO THE NEXT VMBLOK @V407577 00713200 C R9,=A(DMKSCHRL) END OF THE RUNLIST? @V407577 00713300 BE TRYE1 GO TRY ELIGIBLE LIST E1 @V407577 00713400 BAL R6,BLDMSMSG ADD THIS USER TO THE RESPONSE @V407577 00713500 B MORERL TRY FOR MORE USERS @V407577 00713600 TRYE1 L R9,=A(DMKSCHEL) NOW SCAN ELIGIBLE LIST E1 @V407577 00713700 MOREE1 L R9,VMQFPNT-VMBLOK(,R9) POINT TO NEXT USER @V407577 00713800 C R9,=A(DMKSCHEL) AT END OF ELIGIBLE LIST E1? @V407577 00713900 BE TRYE2 YES...TRY E2 @V407577 00714000 BAL R6,BLDMSMSG ADD THIS USER TO THE RESPONSE @V407577 00714100 B MOREE1 GO LOOK FOR MORE E1 USERS @V407577 00714200 TRYE2 L R9,=A(DMKSCHEL+8) POINT TO THE ANCHOR FOR E2 @V407577 00714300 MOREE2 L R9,VMQFPNT-VMBLOK(,R9) POINT TO NEXT USER @V407577 00714400 C R9,=A(DMKSCHEL+8) AT END OF ELIGIBLE LIST E2? @V407577 00714500 BE LASTQ YES...END OF SCAN @V407577 00714600 BAL R6,BLDMSMSG ADD THIS USER TO THE RESPONSE @V407577 00714700 B MOREE2 GO BACK FOR MORE E2 @V407577 00714800 LASTQ EQU * @V407577 00714900 C R4,SAVEWRK1 ALL DONE, DID WE GET ANYTHING @V2B2698 00720000 BE FRET NO, NO LAST LINE TO STACK UP @V2B2698 00721000 BAL R6,STACK YES, STACK PARTIALLY FILLED LINE @V2B2698 00722000 FRET LA R0,QUEMSGL AND FREE INTERMEDIATE BUFFER @V2B2698 00723000 L R1,SAVEWRK1 BUFFER POINTER @V2B2698 00724000 CALL DMKFRET @V2B2698 00725000 L R10,SAVEWRK3 CNT OF PASSES THROUGH STACK RTN @V2B2698 00726000 LTR R10,R10 IF NONE, SEND SPECIAL REPLY @V2B2698 00727000 BNZ THIEXIT AT LEAST ONE @V2B2698 00728000 LA R0,NOINQML MESSAGE LENGTH AND LOCATION @V2B2698 00729000 LA R1,NOINQM @V2B2698 00730000 CALL DMKQCNWT,PARM=NORET @V2B2698 00731000 B THIEXIT @V2B2698 00732000 SPACE 00733000 USING QUEMSGD,R4 @V2B2698 00734000 BLDMSMSG MVC QUSERID,VMUSER-VMBLOK(R9) USERID AS ALWAYS @V2B2698 00735000 TM VMDSTAT-VMBLOK(R9),VMELIG WHICH Q IS HE IN @V2B2698 00736000 BZ USERINQ NOT IN ELIG LIST MUST BE IN Q @V2B2698 00737000 TM VMQLEVEL-VMBLOK(R9),VMQ1 IS IT Q1 @V2B2698 00738000 BZ ELIGQ2 NO, MUST BE ELIG FOR Q2 @V2B2698 00739000 MVC QQUEUE,=C' E1 ' PATCH MESSAGE @V2B2698 00740000 B GETSTAT @V2B2698 00741000 ELIGQ2 MVC QQUEUE,=C' E2 ' @V2B2698 00742000 B GETSTAT @V2B2698 00743000 USERINQ TM VMQLEVEL-VMBLOK(R9),VMQ1 IS HE IN Q1 @V2B2698 00744000 BZ INQ2 NO, MUST BE IN Q2 @V2B2698 00745000 MVC QQUEUE,=C' Q1 ' @V2B2698 00746000 B GETSTAT @V2B2698 00747000 INQ2 MVC QQUEUE,=C' Q2 ' @V2B2698 00748000 GETSTAT MVC QSTATUS,=C'-- ' THIS STATUS WILL DO FOR MANY @V2B2698 00749000 L R8,RUNUSER HIGHEST PRIORITY IS RUNUSER @V2B2698 00750000 SLR R7,R7 POINT TO THIS PROCESSOR'S PREFIX @V407577 00752100 CR R8,R9 IS THIS USER RUNUSER ON THIS @V407577 00752200 * PROCESSOR? 00752300 BE SETRU YES...GO TEST WHETHER CPU OR APU @V407577 00752400 TRYAPU TM APSTAT1,APUOPER IS THE APU OPERATIONAL? @V407577 00752500 BNO TRYPGW NO...TEST FOR PAGEWAIT @V407577 00752600 L R7,PREFIXB POINT TO OTHER PROCESSOR'S @V407577 00752700 * PREFIX PAGE 00752800 C R9,SAVEWRK4 RUNUSER ON OTHER PROCESSOR? @V4M0174 00752900 BNE TRYDF NO...TRY FOR DEFERRED TASK PNDNG @V4M0174 00753000 SETRU TM APSTAT1-PSA(R7),PROCIO IS THIS THE CPU? @V407577 00753100 BNO SETRA NO...INDICATE RUNUSER ON APU @V407577 00753200 MVC QSTATUS,=C'RU ' YES...INDICATE RUNUSER CPU @V407577 00753300 B GETPRES GO FILL IN THE WORKING SET DATA @V407577 00753400 SETRA MVC QSTATUS,=C'RA ' INDICATE RUNUSER ON THE APU @V407577 00753500 B GETPRES GO FILL IN WORKING SET DATA @V407577 00753600 TRYDF DS 0H @V4M0174 00753700 TM VMPEND-VMBLOK(R9),VMDEFSTK TEST FOR DEFERRED @V4M0174 00753800 BZ TRYPGW NO...TRY FOR PAGEWAIT @V4M0174 00753900 MVC QSTATUS,=C'DF ' INDICATE DEFERRED TASK PENDING @V4M0174 00754000 B GETPRES GO FILL IN WORKING SET DATA @V4M0174 00754100 TRYPGW TM VMRSTAT-VMBLOK(R9),VMPGWAIT IS HE IN PAGEWAIT @V2B2698 00755000 BZ TRYIOW NO, I/O WAIT NEXT PRIORITY @V2B2698 00756000 MVC QSTATUS,=C'PG ' YES, PATCH STATUS FLAG @V2B2698 00757000 B GETPRES ON WITH THE SHOW @V2B2698 00758000 TRYIOW TM VMRSTAT-VMBLOK(R9),VMIOWAIT IS HE IN I/O WAIT @V2B2698 00759000 BZ TRYINW NO, INST SIMULATION WAIT NEXT @V2B2698 00760000 MVC QSTATUS,=C'IO ' I/O WAIT STATUS INDICATOR @V2B2698 00761000 B GETPRES @V2B2698 00762000 TRYINW TM VMRSTAT-VMBLOK(R9),VMEXWAIT IS HE IN INST WAIT @V2B2698 00763000 BZ TRYPSW NO, PSW WAIT LAST PRIORITY @V2B2698 00764000 MVC QSTATUS,=C'EX ' YES, INSTRUCTION WAIT INDICATOR @V2B2698 00765000 B GETPRES @V2B2698 00766000 TRYPSW TM VMRSTAT-VMBLOK(R9),VMPSWAIT ENAB WAIT IN QUEUE @V2B2698 00767000 BZ GETPRES NO, NO OTHER STATES OF INTEREST @V2B2698 00768000 MVC QSTATUS,=C'PS ' PATCH FOR PSW WAIT STATUS @V2B2698 00769000 GETPRES UNPK QPRES(4),VMPAGES-VMBLOK(3,R9) SHRT CNT, TRUNC HI@V2B2698 00770000 TR QPRES,ABX-240 CHANGE GRABBAGE TO EBCDIC @V2B2698 00771000 MVI QSEP1,C'/' FIX UP CLOBBERED CHARACTER @V2B2698 00772000 UNPK QWSS(4),VMWSPROJ-VMBLOK(3,R9) SHRT CNT, TRUNC HI@V2B2698 00773000 TR QWSS,ABX-240 CHANGE GRABBAGE TO EBCDIC @V2B2698 00774000 LR R5,R4 SAVE FOR FIELD SEPARATOR @V2B2698 00775000 LA R4,23(R4) INDEX TO NEXT FIELD @V2B2698 00776000 C R4,SAVEWRK2 SPACE FOR ANOTHER FIELD @V2B2698 00777000 BNL STACK NO, STACK THIS FIRST, RESET PTR @V2B2698 00778000 MVI QSEP2-QUEMSGD(R5),C' ' YES, ADD FIELD SEPARATOR @V2B2698 00779000 BR R6 AND CONTINUE WITH NEXT VMBLOK @V2B2698 00780000 EJECT 00781000 LODMSGSK DS 0H THI SUMMARY SKELETON REPLY @V2B2698 00782000 DC C'CPU-' @V2B2698 00783000 DC C' ' @V2B2698 00784000 DC C'% APU-' @V407577 00784100 DC C' ' @V407577 00784200 DC C'% Q1-' @V2B2698 00785000 DC C' ' @V2B2698 00786000 DC C' Q2-' @V2B2698 00787000 DC C' ' @V2B2698 00788000 DC C' STORAGE-' @V2B2698 00789000 DC C' ' @V2B2698 00790000 DC C'% RATIO-' @V2B2698 00791000 DC C' . ' @VA04300 00792500 ABX DC C'0123456789ABCDEF' @V2B2698 00793000 NOIOMSG DS 0H @V2B2698 00794000 DC C'NO USERS IN ' @V2B2698 00795000 PATCH DC C'I/O ' @V2B2698 00796000 DC C' WAIT' @V2B2698 00797000 NOIOMSGL EQU *-NOIOMSG @V2B2698 00798000 NOINQM DS 0H @V2B2698 00799000 DC C'NO USERS IN Q' @V2B2698 00800000 NOINQML EQU *-NOINQM @V2B2698 00801000 USERMSG1 DC C'PAGES: RES- ' USER SKELETON REPLY, LINE 1 @V2B2698 00802000 DC C' WS- ' @V2B2698 00803000 DC C' READS= ' @V2B2698 00804000 DC C' WRITES= ' @V2B2698 00805000 DC C' DISK- ' @V2B2698 00806000 DC C' DRUM- ' @V2B2698 00807000 USERMSG2 DC C'VTIME= : ' USER SKELETON REPLY, LINE 2 @V2B2698 00808000 DC C' TTIME= : ' @V2B2698 00809000 DC C' SIO= ' @V2B2698 00810000 DC C' RDR- ' @V2B2698 00811000 DC C' PRT- ' @V2B2698 00812000 DC C' PCH- ' @V2B2698 00813000 SPACE 00814000 TEMP2 DC D'0' CURRENT UP TO DATE VMVTIME VALUE @V2B2698 00815000 TEMPHOLD DC D'0' @V2B2698 00816000 DC C' ' BLANK SEP MUST FOLLOW TEMPHOLD @V2B2698 00817000 SPACE 00818000 LOADMSGD DSECT THI LOAD REPLY MESSAGE @V2B2698 00819000 DS CL4 CPU- @V2B2698 00820000 CPUTIL DS CL3 CPU UTILIZATION IN PERCENT @V2B2698 00821000 DS CL7 @V407577 00821100 APUTIL DS CL3 @V407577 00821200 DS CL6 % Q1 @V2B2698 00822000 NUMQ1 DS CL2 SMOOTHED NUMBER OF USERS IN Q1 @V2B2698 00823000 DS CL5 Q2- @V2B2698 00824000 NUMQ2 DS CL2 SMOOTHED NUMBER OF USERS IN Q2 @V2B2698 00825000 DS CL10 STORAGE- @V2B2698 00826000 CORUTIL DS CL3 SMOOTHED CORE UTILIZATION @V2B2698 00827000 DS CL9 RATIO @V2B2698 00828000 QUTIL DS CL2 SMOOTHED Q CONVENTION RATIO @VA04300 00829500 DS CL1 . @V2B2698 00830000 QUTILDEC DS CL1 @V2B2698 00831000 SPACE 00832000 LOADMSGL EQU (*-LOADMSGD+7)/8 LOAD REPLY MSG SIZE IN DBL WDS @V2B2698 00833000 LOADMSGC EQU *-LOADMSGD IN BYTES @V2B2698 00834000 SPACE 00835000 USRMSG1D DSECT USER REPLY MESSAGE..FIRST LINE @V2B2698 00836000 DS CL11 PAGES: RES @V2B2698 00837000 RES DS CL4 COUNT OF PAGES RESIDENT @V2B2698 00838000 DS CL4 WS- @V2B2698 00839000 WSS DS CL4 CURRENT WORKING SET VALUE @V2B2698 00840000 DS CL7 READS= @V2B2698 00841000 READS DS CL6 TOTAL PAGE READS @V2B2698 00842000 DS CL8 WRITES= @V2B2698 00843000 WRITES DS CL6 TOTAL PAGE WRITES @V2B2698 00844000 DS CL6 DISK- @V2B2698 00845000 DISK DS CL4 VIRTUAL PAGES RESIDENT ON DISK @V2B2698 00846000 DS CL6 DRUM- @V2B2698 00847000 DRUM DS CL4 VIRTUAL PAGES RESIDENT ON DRUM @V2B2698 00848000 SPACE 00849000 USRMSG1L EQU (*-USRMSG1D+7)/8 IND USER REPLY BUFFER SIZE @V2B2698 00850000 USRMSG1C EQU *-USRMSG1D IN BYTES @V2B2698 00851000 SPACE 00852000 USRMSG2D DSECT USER MESSAGE REPLY..2ND LINE @V2B2698 00853000 DS CL6 VTIME= @V2B2698 00854000 VTIME DS CL3 VTIME THIS SESSION IN MINS @V2B2698 00855000 DS CL1 : @V2B2698 00856000 VSECS DS CL2 AND SECONDS @V2B2698 00857000 DS CL7 TTIME= @V2B2698 00858000 TTIME DS CL3 VTIME+TTIME IN MINS @V2B2698 00859000 DS CL1 : @V2B2698 00860000 TSECS DS CL2 AND SECONDS @V2B2698 00861000 DS CL5 SIO= @V2B2698 00862000 SIO DS CL6 TOTAL NON MULTIPLEXOR SIO COUNT @V2B2698 00863000 DS CL5 RDR- @V2B2698 00864000 RDR DS CL6 TOTAL VIRTUAL CARDS READ @V2B2698 00865000 DS CL5 PRT- @V2B2698 00866000 PRT DS CL6 TOTAL VIRTUAL LINES PRINTED @V2B2698 00867000 DS CL5 PCH- @V2B2698 00868000 PCH DS CL6 TOTAL VIRTUAL CARDS PUNCHED @V2B2698 00869000 SPACE 00870000 USRMSG2L EQU (*-USRMSG2D+7)/8 LENGTH IN DOUBLE WORDS @V2B2698 00871000 USRMSG2C EQU *-USRMSG2D IN BYTES @V2B2698 00872000 SPACE 00873000 IOMSGD DSECT DSECT FOR REPLY TO THI I/O @V2B2698 00874000 IUSERID DS CL8 USERID AS USUAL @V2B2698 00875000 ISEP1 DS CL1 BLANK SEPARATOR @V2B2698 00876000 IRADD DS CL3 REAL DEVICE ADDRESS @V2B2698 00877000 ISEP2 DS CL1 BLANK SEPARATOR BETWEEN FIELDS @V2B2698 00878000 SPACE 00879000 PAGMSGD DSECT DSECT FOR REPLY TO THI PAGING @V2B2698 00880000 PUSERID DS CL8 USERID @V2B2698 00881000 PSEP1 DS CL1 BLANK SEPARATOR @V2B2698 00882000 PDRUM DS CL3 PAGES RESIDENT ON DRUM @V2B2698 00883000 PCOLON DS CL1 COLON SEPARATOR @V2B2698 00884000 PDISK DS CL3 PAGES RESIDENT ON DISK @V2B2698 00885000 PSEP2 DS CL1 BLANK SEPARATOR BETWEEN FIELDS @V2B2698 00886000 SPACE 00887000 IOPGMSGL EQU 9 BUFF SIZE FOR 6 I/O OR 5 PAGING @V2B2698 00888000 SPACE 00889000 QUEMSGD DSECT DSECT FOR REPLY TO THI QUEUE @V2B2698 00890000 QUSERID DS CL8 USERID @V2B2698 00891000 QQUEUE DS CL4 QUEUE OCCUPIED BY THIS USER @V2B2698 00892000 QSTATUS DS CL3 STATUS OF THIS USER @V2B2698 00893000 QPRES DS CL3 PAGES RESIDENT IN MAIN STORAGE @V2B2698 00894000 QSEP1 DS CL1 SEPARATOR '/' @V2B2698 00895000 QWSS DS CL3 CURRENT WORKING SET SIZE @V2B2698 00896000 QSEP2 DS CL1 SEPARATOR BETWEEN FIELDS @V2B2698 00897000 SPACE 00898000 QUEMSGL EQU ((*-QUEMSGD)*3+7)/8 BUFFER FOR REPLY @V2B2698 00899000 QUEMSGC EQU *-QUEMSGD REPLY LENGTH IN BYTES @V2B2698 00900000 EJECT 00901000 COPY VMBLOK @V2B2698 00902000 PSA @V2B2698 00903000 COPY SAVE @V2B2698 00904000 COPY EQU @V2B2698 00905000 SPACE 00906000 * EQUATES USED FOR COMMAND CLASSES: 00907000 A EQU VMCLASSA SYSTEM OPERATOR @V2B2698 00908000 B EQU VMCLASSB RESOURCE CONTROL OPERATOR @V2B2698 00909000 C EQU VMCLASSC SYSTEM PROGRAMMER @V2B2698 00910000 D EQU VMCLASSD SPOOL CONTROL OPERATOR @V2B2698 00911000 E EQU VMCLASSE SYSTEM EXAMINER @V2B2698 00912000 F EQU VMCLASSF PROGRAM SUPPORT REPRESENTATIVE @V2B2698 00913000 G EQU VMCLASSG GENERAL USERS @V2B2698 00914000 EJECT 00915000 COPY IOBLOKS @V2B2698 00916000 COPY VBLOKS @V2B2698 00917000 COPY RBLOKS @V2B2698 00918000 COPY DEVTYPES @V2B2698 00919000 END 00920000