*
*        THIS PROGRAM DESIGNED TO BE RUN
*        AS A GHOST PROVIDES THE OPERATOR
*        WITH KNOWLEDGE OF HIS USERS HERETOFORE
*        UNAVAILABLE IN UTS.  THE VALUES
*        DISPLAYED FOR EACH USER ARE:
*        USER     INTERNAL USER NUMBER
*        ACCOUNT  LOGGED ON ACCOUNT
*        NAME     LOGGED ON NAME
*        TIME USED CPU TIME USED THUS FAR
*        TIME LEFT TIME REMAINING TO A BATCH JOB
*                  BEFORE IT WILL BE ABORTED FOR
*                  MAX TIME
*        LINE/SYSID LINE NUMBER FOR ON-LINE USERS,
*                   SYSID FOR BATCH USERS
*        TYPE     USER TYPE
*        MEAN SIZE  AVERAGE SIZE THROUGHOUT THE JOB
*        MAX USER   MAX SIZE USED COMPARED AGAINST
*                   THE !LIMIT CARD
*        CURR SIZE  USER'S CURRENT ACTUAL SIZE (UB:PCT)
*        I/O INTENSITY  NUMBER OF I/O OPERATIONS
*                       DIVIDED BY THE TOTAL CPU TIME USED
*
*
*        THIS PROGRAM USES A SERIES OF GENERALIZED
*        ROUTINES WHICH MAKES THE ADDITION OF MORE
*        DISPLAYS TRIVIAL.
*
*
*************** W A R N I N G ***************
*
*        THIS PROGRAM WILL NOT RUN ON DISC-
*        SWAPPING SYSTEMS.  THE ROUTINE PHYS%TO%REL
*        MUST BE MODIFIED TO ACCOMMODATE THEM.
*
*********************************************
*
*        THE GENERAL OUTLINE OF ACTIVITY IS TO
*        LOCATE THE JIT OF EACH ACTIVE USER,
*        MOVE IT TO THE BUFFER CALLED "PAGE",
*        AND PRINT THE APPROPRIATE STUFF
*
*        THE PROGRAM MUST BE RUN WITH PRIV='C0'
*        AS IT MAKES LAVISH USE OF THE M:SYS CAL
*
         PAGE
         SYSTEM   BPM
         SYSTEM   SIG7FDP
CHECKOUT SET      0
         REF      M:LO
         REF      SMUIS,NEWQ
         REF      UB:SWAPI,MB:GPT,UH:JIT,MB:GAM5,;
                  MB:SDI,J:ACCN,J:JIT,J:UNAME
         REF      UH:FLG,UX:JIT
         REF      UB:US
         REF      JB:PNR,M:UC,J:MRT,J:UTIME,J:PTIME
         REF      UB:PCT,JB:VLH,DCACCESS,TPACCESS
         REF      SB:GJOBUN,S:GJOBTBL,MAXG
         SPACE    5
TICS%PER%SEC EQU  500
TICS%PER%MIN EQU  30000
BTD      EQU      0
Z        EQU      0
X1       EQU      1
USR      EQU      2
CNT      EQU      3
X4       EQU      4
X5       EQU      5
X6       EQU      6
X7       EQU      7
BUF      EQU      8
SIZE     EQU      9
LINK     EQU      11
DA0      EQU      12
DA1      EQU      13
DA2      EQU      14
DA3      EQU      15
LIST     TEXT     '0123456789ABCDEF'
         DO       CHECKOUT=0
PD       SET      PAGE-J:JIT      USE YOUR OWN JIT
         ELSE                      FOR CHECKOUT OF
PD       SET      0                 FORMAT ROUTINES
         FIN
         SPACE    5
ENTER    CNAME
         PROC
         LCI      5
         PSM,X1   STACK
         PSW,LINK STACK
         PEND
RETURN   CNAME    1
RETURNTO CNAME    2
         PROC
LF(1)    PLW,LINK STACK
         LCI      5
         PLM,X1   STACK
         DO       NAME=1
         B        *LINK
         ELSE
         B        AF(1)
         FIN
         PEND
         SPACE    5
HEX      EQU      0               PROC FOR GENERATING
TEXT     EQU      1                TABLES OF ACTIONS AND
DEC      EQU      2                 TABS. IF THE ACTION IS
TYPETAB  CSECT    1                  A LOAD, THE TYPE OF VARIABLE
OPTAB    CSECT    1                   IS SUPPLIED IN ANOTHER TABLE
TABTAB   CSECT    1
LOP      CNAME    1
BOP      CNAME    2
         PROC
A        SET      %
         USECT    OPTAB
         DO       NAME=1
         LI,X6    AF(1)
         ELSE
         DO       NAME=2
         B        AF(1)
         FIN
         FIN
TABMAX   SET      %-OPTAB
         USECT    TABTAB
         DATA,1   AF(2)
         USECT    TYPETAB
         DATA,1   AF(3)
         USECT    A
         PEND
         SPACE    5
         LOP      USR,6,HEX
         BOP      PRINT%ACN,19
         BOP      PRINT%NAME,32
         BOP      TIME%USED,37
         BOP      TIME%LEFT,48
         BOP      PRINT%LINE,58
         BOP      PRINT%TYPE,68
         BOP      MEAN%SIZE,74
         BOP      MAX%SIZE,80
         BOP      CURRENT%SIZE,86
         BOP      IO%RATE,92
         SPACE    5
         CSECT    0
NEWQ%INSTR DATA X'223000FF'
NEWQARG  EQU      %
         DATA     X'FE0A00'
         DATA     BA(PAGE)
         DATA     X'800'
SEEK     DATA     0
EA       DATA     0
EAI      DATA     0
         SPACE    5
VIR%PAGE EQU      %
         DATA     0
PATCH    EQU      %
         RES      10
TIME     DATA     0
LINE%PTR DATA     0
LINE     RES      30
TEN      DATA     10
         BOUND    8
ACCUM%SAVE DATA   X'40404040',X'40404040'
ACCUM    DATA     0,0,0
         BOUND    8
STACK    EQU      %               BIG STACK FOR FUTURE
         DATA     %+1              EXPANSION
         DATA     X'320000'
         RES      X'32'
         SPACE    5
         BOUND    8
PAGE     RES      512             BUFFER TO HOLD JITS
         PAGE
         CSECT    1
START    EQU      %               THIS CODE IS INITIALIZATION,
         M:GP     1                ASCERTAINING THE ADDRESS
         M:FP     1                 OF A FREE PAGE, FORCING
         STW,9    VIR%PAGE           TOP-OF-FORM ON THE PRINTER
         M:DEVICE M:LO,(PAGE)         AND PRINTING THE HEADERS.
         LI,BUF   HEADER
         BAL,LINK MESSAGE
         LI,BUF   HEADER1
         BAL,LINK MESSAGE
         LI,USR   0
         SPACE    5
PRINT%USR EQU     %
         LI,Z     0
         STW,Z    LINE%PTR        THIS IS THE MAIN DRIVER
         AI,USR   1                ROUTINE WHICH CYCLES
         CI,USR   SMUIS             THROUGH ALL USERS ON
         BG       ALL%DONE            THE SYSTEM, PRINTING
         DO       CHECKOUT=0           JIT INFORMATION SELECTED
         BAL,LINK GET%JIT               BY THE BOP/LOP TABLES
         FIN
         LI,CNT   0               USR: THE REGISTER CONTAINING
P1       EQU      %                     THE USER NUMBER
         BAL,LINK GET%VAL         CNT: THE REGISTER CONTAINING
         AI,CNT   1                     THE ITEM NUMBER TO BE
         CI,CNT   TABMAX                 PRINTED NEXT
         BL       P1
         BAL,LINK WRITE%LINE
         B        PRINT%USR
         SPACE    5
ALL%DONE EQU      %               EXIT ROUTINE DOING NOTHING
         M:DEVICE M:LO,(PAGE)      MORE THAN ANOTHER PAGE
         CAL1,9   6                 HEADING ON THE LINE PRINTER
         M:EXIT
         SPACE    5
WRITE%LINE EQU    %               GENERAL WRITE ROUTINE
         LI,BUF   LINE             USING THE OBVIOUS REGISTERS
         LW,SIZE  LINE%PTR
         LI,BTD   0
WRITE    M:WRITE  M:LO,(BUF,*BUF),(SIZE,*SIZE),(BTD,*BTD)
         LI,SIZE  0
         STW,SIZE LINE%PTR
         B        *LINK
         SPACE    5
MESSAGE  EQU      %               PRINTS A MESSAGE ON M:LO
         LB,SIZE  *BUF
         LI,BTD   1               IN:  BUF CONTAINS MESSAGE ADDRESS
         EXU      WRITE
         B        *LINK
         SPACE    5
GET%JIT  EQU      %               ONE WAY OR ANOTHER,
         ENTER                     THIS ROUTINE RETURNS
         BAL,LINK PHYS%TO%REL       TO THE CALLER (VIA LINK)
         B        RETURNX            WITH THE JIT IN THE
         STW,DA0  SEEK                BUFFER "PAGE"
         LI,X6    3
         STB,X7   NEWQARG,X6      IF THE USER IS IN CORE
         LCI      6                HIS JIT IS MOVED TO PAGE;
         LM,12    NEWQARG           OTHERWISE, IT IS READ
         BAL,LINK  NEWQ              IN FROM THE SWAP DEVICE
         NOP
         BAL,Z    SL1
G1       EQU      %
         RETURN
         SPACE    5
RETURNX  EQU      %
         BAL,Z    SL1
         RETURNTO PRINT%USR
         SPACE    5
PHYS%TO%REL EQU   %
         M:SYS
         NOP                       THIS ROUTINE DETERMINES
         CI,10    NEWQ              WHETHER OR NOT THIS
         BNE      NOT%HERE          USER SHOULD BE OUTPUT
         LB,X6    UB:US,USR
         BEZ      *LINK
         CI,X6    X'1E'
         BE       *LINK
         BEZ      *LINK           IF HIS STATE IS NON-ZERO
         AI,LINK  1                AND HIS JIT IN CORE,
         LH,X6    UH:FLG,USR        THEN HIS JIT IS MOVED
         CI,X6    X'200'             TO PAGE VIA MOVE%IT%IN
         BANZ     MOVE%IT%IN
         LB,X6    UB:SWAPI,USR    OTHERWISE, THE ADDRESS OF
         LB,X5    MB:GPT,X6        HIS JIT IS CALCULATED FROM
         SLS,X5   1                 UH:JIT AND CONTROL
         LI,DA1   0                  RETURNED TO THE GET%JIT
         LH,DA0   UH:JIT,USR           ROUTINE  TO READ IT IN
         LB,X7    MB:GAM5,X6
         AND,X7   =X'7F'          OBVIOUSLY, THIS WILL NOT
         OR,X7    =X'100'          WORK FOR DISC-SWAPPING
         S,DA0    *X7               SYSTEMS, AND THE LOGIC TO
         MW,X5    DA0                SUPPORT THEM MUST BE ADDED
         EOR,X7   =X'37F'              HERE. SORRY ABOUT THAT.
         AI,X7    1
         S,DA1    *X7
         AW,X5    DA1
         LW,DA0   X5
         LB,X7    MB:SDI,X6
         STH,X7   DA0
         B        *LINK
         SPACE    5
NOT%HERE EQU      %               HERE IF THE MONITOR ISN'T
         BAL,Z    SL1              WHAT WE EXPECT
         LI,BUF   NOT%HERE%MSG
         BAL,LINK MESSAGE
         M:XXX
NOT%HERE%MSG TEXTC 'PROGRAM DOES NOT MATCH SYSTEM',;
                   ', RELOAD WITH MONSTK OR J1'
         SPACE    5
GET%VAL  EQU      %               DRIVER FOR THE TABLE ROUTINES
         ENTER
         LB,X5    TABTAB,CNT
         BAL,LINK SPACES
         EXU      OPTAB,CNT
         LB,X7    TYPETAB,CNT
         BAL,LINK CONVERT,X7
         RETURN
         SPACE    5
MOVE%IT%IN EQU    %               MOVE A USER'S JIT WHICH
         LB,X7    UX:JIT,USR       IS IN CORE TO THE
         LW,X6    VIR%PAGE          BUFER PAGE BY MAPPING
         BAL,Z    SL1                ONTO HIS JIT, THEN
         SLS,X7   9                    USING MBS TO MOVE
         M:FVP    *VIR%PAGE            TO PAGE.
         M:CVM    *X7,*X6
         SLS,X6   2               CAUTION IS REQUIRED HERE
         LW,X7    =X'FF000000'+BA(PAGE)  WHEN ADDING ADDITIONAL
         MBS,X6   0                 DISPLAYS, AS ONLY 1/4
         MTB,-1   X7                 OF THE JIT IS MOVED.
         MBS,X6   0                   JUST ADD A FEW MORE MBSSES
         B        G1                   HERE
         SPACE    5
SL1      EQU      %               RETURN TO MASTER CALLER SLAVE
         LPSD,0   SL2              NOTE USES Z AS LINK
         B        *Z
         BOUND    8
SL2      GEN,12,20 X'C',SL1+1
         DATA     0
         SPACE    5
*
PRINT%ACN EQU     %
         LI,LINK  G1
         LI,X5    8
         LI,X6    BA(J:ACCN+PD)
         B        CT1
         SPACE    5
PRINT%NAME EQU    %               PRINT HIS NAME OR
         LW,X6    J:UNAME+PD       THE NAME OF THE GHOST
         BEZ      PN2               JOB GOING MASTER MODE
         CW,X6    ACCUM%SAVE         TO PICK UP THE ENTRY
         BE       RETURNX+1           IN S:GJOBTBL
PN1      EQU      %
         LI,X5    12
         LI,LINK  G1
         LI,X6    BA(J:UNAME+PD)
         B        CT1
PN2      EQU      %
         LC       J:JIT+PD
         BCR,4    RETURNX+1
         LI,X5    MAXG
         M:SYS
         CB,USR   SB:GJOBUN,X5
         BE       %+2
         BDR,X5   %-2
         LD,X6    S:GJOBTBL,X5
         SLD,X6   8
         AI,X7    X'40'
         STW,X6   J:UNAME+PD
         STW,X7   J:UNAME+PD+1
         LW,X6    ACCUM%SAVE
         STW,X6   J:UNAME+PD+2
         LI,Z     PN1
         B        SL1
         SPACE    5
PRINT%LINE EQU    %               PRINT LINE NUMBER
         LC       J:JIT+PD         FOR ON LINE OR SYSID
         BCS,8    LINE1             FOR BATCH. GHOST
         BCS,4    G1                 GETS NOTHING
         LI,DA1   X'1FFFF'
         LS,DA1   J:JIT+PD
         B        PL1
LINE1    EQU      %
         LI,DA1   X'FF'
         LS,DA1   M:UC+1+PD
PL1      EQU      %
         LI,X6    DA1
         LI,LINK  G1
         B        CONVERT%HEX
         SPACE    5
*
*        MOST OF THE FOLLOWING ROUTINES
*        YOU CAN GET FROM THE TITLE.
*        ONLY THE INTERESTING
*        REGISTERS ARE COMMENTED ON.
*
         SPACE    5
TIME%LEFT EQU     %
         LW,DA1   J:MRT+PD
         B        MIN%SEC
         SPACE    5
TIME%USED EQU     %
         LW,DA1   J:UTIME+PD
         AW,DA1   J:UTIME+1+PD
         AW,DA1   J:PTIME+PD
         AW,DA1   J:PTIME+1+PD
         STW,DA1  TIME
         B        MIN%SEC
         SPACE    5
MIN%SEC  EQU      %               IN:  DA1 CONTAINS THE
         LI,DA0   0                    VALUE IN TICS TO BE TRANSLATED
         DW,DA0   =TICS%PER%MIN
         LI,X6    DA1
         BAL,LINK CONVERT%DEC
         LB,X5    TABTAB,CNT
         AI,X5    4
         BAL,LINK SPACES
         LI,X6    DA1
         LW,DA1   DA0
         AI,DA1   TICS%PER%SEC/2
         LI,DA0   0
         DW,DA0   =TICS%PER%SEC
         BAL,LINK CONVERT%DEC
         RETURN
         SPACE    5
PRINT%TYPE EQU    %
         LC       J:JIT+PD
         LI,X6    BATCH
         BCR,8    %+3
         LI,X6    ON%LINE
         B        %+3
         BCR,4    %+2
         LI,X6    GHOST
         LI,LINK  G1
         B        CONVERT%TEXT
*
ON%LINE  TEXTC    'ON-LINE'
BATCH    TEXTC    'BATCH'
GHOST    TEXTC    'GHOST'
         SPACE    5
MEAN%SIZE EQU     %               CORE*TIME/TIME
         LW,DA1   J:PTIME+2+PD     CALCULATION WITH A
         AW,DA1   J:UTIME+2+PD      DECIMAL RESULT
         BLEZ     G1
         LW,DA2   TIME
         LI,DA0   0
         DW,DA0   DA2
MEAN1    EQU      %
         LI,LINK  G1
         LI,X6    DA1
         B        CONVERT%DEC
         SPACE    5
MAX%SIZE EQU      %               JB:PEAK, IF YOU HADN'T GUESSED
         LI,X5    1
         LB,DA1   JB:VLH+PD,X5
         B        MEAN1
         SPACE    5
CURRENT%SIZE EQU  %
         M:SYS
         LB,DA1   UB:PCT,USR
         BAL,Z    SL1
         B        MEAN1
         SPACE    5
IO%RATE  EQU      %               CPU TIME/ACCESSES
         LI,DA3   X'1FFFF'         BOTH TAPE AND DISC TO
         LS,DA3   J:JIT+DCACCESS+PD  PRODUCE MILLISECONDS
         AW,DA3   J:JIT+TPACCESS+PD  BETWEEN I/O OPERATIONS
         AND,DA3  =X'1FFFF'
         LI,DA0   0
         LW,DA1   TIME
         DW,DA0   DA3
         B        MEAN1
         SPACE    5
*
CONVERT  EQU      %
         B        CONVERT%HEX
         B        CONVERT%TEXT
         B        CONVERT%DEC
         SPACE    5
*
CONVERT%HEX EQU   %               MAIN HEX TRANSLATE
         LD,X4    ACCUM%SAVE       ROUTINE WHICH RIGHT-JUSTIFYS
         STD,X4   ACCUM             THE RESULT SUPPRESSING
         LI,Z     0                  LEADING ZEROS
         LW,X7    *X6
         LI,X5    -8              IN:  X6 CONTAINS THE ADDRESS
         B        C2                   OF THE WORD TO BE TRANSLATED
C1       EQU      %
         BIR,X5   C2              USE: Z CONTAINS BOTH THE
         LI,X6    BA(ACCUM+2)          CHARACTER COUNT AND
         LI,X5    X'FF'                CONDITION CODES, PREVENTING
         LS,X5    Z                    PRINTING LEADING ZEROS
         BNEZ     C15
         LI,X5    1
         LI,Z     X'F0'
         STW,Z    ACCUM+1
C15      EQU      %
         SW,X6    X5
         B        CT1
C2       EQU      %
         LI,X6    0
         SCD,X6   4
         LC       Z
         BNEZ     C3
         LW,X6    X6
         BEZ      C1
         STCF     Z
C3       EQU      %
         LB,X6    LIST,X6
         MTW,1    Z
         STB,X6   ACCUM+2,X5
         AI,X4    1
         B        C1
         SPACE    5
CONVERT%TEXT EQU  %               IN:  X6 CONTRINS THE ADDRESS
         LB,X5    *X6                  OF THE TEXTC LINE TO BE
         SLS,X6   2                    ADDED TO THE BUFFER.
         AI,X6    1                    IN THE CASE OF ENTRY
CT1      EQU      %                    AT CT1, X6 HAS THE STRING
         LI,X7    BA(LINE)             BYTE ADDRESS AND X5 THE
         AW,X7    LINE%PTR             COUNT OF THE STRRING
         SW,X7    X5
         STB,X5   X7
         MBS,X6  0
         B        *LINK
         SPACE    5
CONVERT%DEC EQU   %               IN:  AGAIN, X6 CONTAINS THE
         ENTER                         ADDRESS OF THE WORD
         LD,X4    ACCUM%SAVE           TO BE TRANSLATED TO
         STD,X4   ACCUM                DECIMAL, SUPPRESSING
         LI,X5    0                    LEADING ZEROS
         LI,X4    BA(ACCUM)+7
         LW,X7    0,X6
CD1      EQU      %
         LI,X6    0
         DW,X6    TEN
         AI,X6    X'F0'
         STB,X6   0,X4
         AI,X5    1
         CI,X7    0
         BE       CD2
         BDR,X4   CD1
CD2      EQU      %
         LW,X6    X4
         BAL,LINK CT1
         RETURN
         SPACE    5
SPACES   EQU      %               IN:  AGAIN, X5 CONTAINS THE
         SW,X5    LINE%PTR             TAB TO WHICH TO SPACE
         LI,X1    BA(LINE)             AND TO WHICH THE OTHER
         AW,X1    LINE%PTR             ROUTINES RIGHT-JUSTIFY
         STB,X5   X1
         MBS,Z    BA(ACCUM%SAVE)
         AWM,X5   LINE%PTR
         B        *LINK
         SPACE    5
HEADER   TEXTC    '   USER    ACCOUNT  NAME          ',;
                  'TIME USED  TIME LEFT LINE/    TYPE',;
                  '  MEAN   MAX  CURR   I/O'
HEADER1  TEXTC    '                                   ',;
                  'MIN SEC    MIN SEC  SYSID',;
                  '          SIZE  USER  SIZE INTENSITY'
         END      START
