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