!***********************************************************************
!*
!*                 EMAS performance monitoring package
!*
!***********************************************************************
!
ENDOFLIST 
INCLUDE  "ERCC07.CTOPT"
LIST 
!
!***********************************************************************
!*
!*          Record formats
!*
!***********************************************************************
!
RECORDFORMAT  COMF(INTEGER  OCPTYPE,IPLDEV,SBLKS,SEPGS,NDISCS,
         DLVNADDR,GPCTABSIZE,GPCA,SFCTABSIZE,SFCA,SFCK,DIRSITE,
         DCODEDA,SUPLVN,TOJDAY,DATE0,DATE1,DATE2,
         TIME0,TIME1,TIME2,EPAGESIZE,USERS,CATTAD,SERVAAD,
         BYTEINTEGER  NSACS,RESV1,SACPORT1,SACPORT0,
         NOCPS,RESV2,OCPPORT1,OCPPORT0,
         INTEGER  ITINT,CONTYPEA,GPCCONFA,FPCCONFA,SFCCONFA,
         BLKADDR,RATION,SMACS,TRANS,LONGINTEGER  KMON,
         INTEGER  DITADDR,SMACPOS,SUPVSN,PSTVA,SECSFRMN,SECSTOCD,
         SYNC1DEST,SYNC2DEST,ASYNCDEST,MAXPROCS,INSPERSEC,ELAPHEAD,
         COMMSRECA,STOREAAD,PROCAAD,SFCCTAD,DRUMTAD,TSLICE,FEPS,
         MAXCBT,PERFORMAD,SP1,SP2,SP3,SP4,SP5,SP6,
         LSTL,LSTB,PSTL,PSTB,HKEYS,HOOT,SIM,CLKX,CLKY,CLKZ,
         HBIT,SLAVEOFF,INHSSR,SDR1,SDR2,SDR3,
         SDR4,SESR,HOFFBIT,BLOCKZBIT,BLKSHIFT,BLKSIZE,END)
RECORDFORMAT  PERFORMF(INTEGER  RECAPN,PTURNN,PSHAREN,NEWPAGEN,
                       PAGEOUTN,PAGEZN,SNOOZN,ABORTN,SNOOZOK,
                       SNOOZTO,SNOOZAB,
                       LONGINTEGER  CLOCK,
                       LONGINTEGERARRAY  SERVIT,SERVIC(0:LOCSN0+3),
                       INTEGERARRAY  SERVN(0:LOCSN0+3))
RECORDFORMAT  RF(INTEGER  CONAD,FILETYPE,DATASTART,DATAEND)
RECORDFORMAT  CATTABF(BYTEINTEGER  PRIORITY,EPLIM,RTLIM,MOREP,MORET,
      LESSP,SP0,SUSP,RQTS1,RQTS2,STROBEI,SP2)
                                        ! Scheduling category tables
RECORDFORMAT  PROCF(STRING (6) USER,
      BYTEINTEGER  INCAR,CATEGORY,P4TOP4, RUNQ,ACTIVE,
      INTEGER  ACTW0,LSTAD,BYTEINTEGER  EPA,EPN,HALFINTEGER  LAMTX,
      INTEGER  STACK,STATUS)
                                        ! Process information, etc.
                                        !     2**0 = Holds a semaphore
                                        !     2**1 = On a page fault
                                        !     2**2 = A background job
                                        !     2**3 = Deallocating AMT (&drum) only
                                        !     2**4 = AMT lost
                                        !     2**5 = Had time on fly
                                        !     2**6 = Had epages on fly
                                        !     2**7 = Snoozing
                                        !     2**8 = LC stack read failure
                                        !     2**9 = State X(LC stk snoozed)
                                        !     Remainder unused
RECORDFORMAT  TABF(STRING (15) S,INTEGER  PERCENT)
!
OWNRECORD (PROCF)ARRAYFORMAT  PROCAF(0:MAXPROCS)
!
!
!***********************************************************************
!*
!*          Constants
!*
!***********************************************************************
!
CONSTANTSTRING (10) PFILE = "T#PERF"
CONSTANTSTRING (4) ARRAY  PROCESSOR TYPE(1:6) = C 
"2950","2960","2970","2980","2972","2976"
CONSTANTSTRING (31) ARRAY  STATES(0:9)= C 
"holds sema",
"page fault",
"",
"dealloc AMT",
"AMT lost  ",
"Time on fly",
"Pages on fly",
"snoozing  ",
"LC failed ",
"LC snoozed"
CONSTANTSTRING (15)ARRAY  SERVROUT(0:LOCSN0+3) = "Idle time",
  "Nowork time","Deadlock rcvry","Schedule",
  "Pageturn","Get epage","Return epage","File semaphore","Active mem",
  "","ElapsedInt","Update time","DPONputonq","Turnon ER",
  "Activemem(Poll)","Schedule(Oper)","Overalloc Cntrl",""(15),
  "Disc","Disc transfers","Disc interrupt","","Move requests",
  "Move transfers",""(2),
  "Drum transfers","","Drum interrupt",""(5),"GPC requests","Tape",
  "Oper","LP adaptor","CR adaptor","CP adaptor","Printer",
  "Comms control","Combine","FEP adaptor","GPC interrupt",
  ""(2),"BMrep","COMrep",""(2),"Local control","Foregrnd users",
  "Backgrnd users"
CONSTANTRECORD (COMF)NAME  COM = X'80C00000'
!
!
!***********************************************************************
!*
!*          Subsystem references
!*
!***********************************************************************
!
EXTERNALSTRINGFUNCTIONSPEC  INTERRUPT
SYSTEMROUTINESPEC  CONNECT(STRING (31) FILE,INTEGER  MODE,HOLE,
                           PROT,RECORD (RF)NAME  R,INTEGERNAME  FLAG)
EXTERNALSTRINGFUNCTIONSPEC  DATE
SYSTEMSTRINGFUNCTIONSPEC  FAILUREMESSAGE(INTEGER  MESS)
SYSTEMROUTINESPEC  FILL(INTEGER  LENGTH,FROM,FILLER)
SYSTEMSTRINGFUNCTIONSPEC  ITOS(INTEGER  N)
SYSTEMROUTINESPEC  MOVE(INTEGER  LENGTH,FROM,TO)
SYSTEMROUTINESPEC  OUTFILE(STRING (31) FILE,INTEGER  SIZE,HOLE,
                           PROT,INTEGERNAME  CONAD,FLAG)
EXTERNALROUTINESPEC  PRINTCHS(STRING (255) S)
EXTERNALROUTINESPEC  PROMPT(STRING (255) S)
SYSTEMINTEGERFUNCTIONSPEC  PSTOI(STRING (63) S)
EXTERNALSTRINGFUNCTIONSPEC  TIME
EXTERNALSTRINGFUNCTIONSPEC  UCSTRING(STRING (255) S)
EXTERNALSTRINGFUNCTIONSPEC  VDUS(INTEGER  I)
!
!
!***********************************************************************
!*
!*          Director references
!*
!***********************************************************************
!
EXTERNALINTEGERFUNCTIONSPEC  DDELAY(INTEGER  SECS)
!
!
!***********************************************************************
!*
!*          Own variables
!*
!***********************************************************************
!
OWNRECORD (PERFORMF)NAME  OLDTIMES,PERFORM
!
!
!***********************************************************************
!*
!*          Service routines
!*
!***********************************************************************
!
LONGINTEGERFUNCTION  CLOCK
LONGINTEGER  L
!
*RRTC_  0
*ST_    L
RESULT  = (L >> 33 << 32!L & X'0FFFFFFFF') << 1
END ;   ! of CLOCK
!
!
ROUTINE  GET SUPERVISOR TIME
INTEGER  I,FLAG,CONAD
RECORD (RF) RR
RECORD (PERFORMF) NEWTIMES
!
I = SIZEOF(OLDTIMES) + SIZEOF(PERFORM)
CONNECT(PFILE,3,0,0,RR,FLAG)
IF  FLAG = 218 THEN  START 
   OUTFILE(PFILE,I+32,0,X'20000000',CONAD,FLAG)
                                        ! Make 'very temporary'
   IF  FLAG = 0 THEN  START 
      RR_CONAD = CONAD
      FILL(I,CONAD+32,0)
   FINISH 
FINISH 
IF  FLAG # 0 THEN  START 
   PRINTSTRING(FAILUREMESSAGE(FLAG))
   STOP 
FINISH 
OLDTIMES == RECORD(RR_CONAD+32)
PERFORM == RECORD(RR_CONAD+32+SIZEOF(OLDTIMES))
MOVE((11+2+5*68)*4,COM_PERFORMAD,ADDR(NEWTIMES))
PERFORM_CLOCK = CLOCK
OLDTIMES_CLOCK = NEWTIMES_CLOCK IF  OLDTIMES_CLOCK = 0
NEWTIMES_CLOCK = PERFORM_CLOCK
PERFORM_RECAPN = NEWTIMES_RECAPN - OLDTIMES_RECAPN
PERFORM_PTURNN = NEWTIMES_PTURNN - OLDTIMES_PTURNN
PERFORM_PSHAREN = NEWTIMES_PSHAREN - OLDTIMES_PSHAREN
PERFORM_NEWPAGEN = NEWTIMES_NEWPAGEN - OLDTIMES_NEWPAGEN
PERFORM_PAGEOUTN = NEWTIMES_PAGEOUTN - OLDTIMES_PAGEOUTN
PERFORM_PAGEZN = NEWTIMES_PAGEZN - OLDTIMES_PAGEZN
PERFORM_SNOOZN = NEWTIMES_SNOOZN - OLDTIMES_SNOOZN
PERFORM_ABORTN = NEWTIMES_ABORTN - OLDTIMES_ABORTN
PERFORM_SNOOZOK = NEWTIMES_SNOOZOK - OLDTIMES_SNOOZOK
PERFORM_SNOOZTO = NEWTIMES_SNOOZTO - OLDTIMES_SNOOZTO
PERFORM_SNOOZAB = NEWTIMES_SNOOZAB - OLDTIMES_SNOOZAB
PERFORM_CLOCK = NEWTIMES_CLOCK - OLDTIMES_CLOCK
FOR  I = 0,1,LOCSN0+3 CYCLE 
  PERFORM_SERVIT(I) = NEWTIMES_SERVIT(I) - OLDTIMES_SERVIT(I)
  PERFORM_SERVIC(I) = NEWTIMES_SERVIC(I) - OLDTIMES_SERVIC(I)
  PERFORM_SERVN(I) = NEWTIMES_SERVN(I) - OLDTIMES_SERVN(I)
REPEAT 
PERFORM_SERVIC(0) = PERFORM_SERVN(0)
PERFORM_SERVIC(1) = PERFORM_SERVN(1)
OLDTIMES = NEWTIMES
END ;   ! of GET SUPERVISOR TIME
!
!
ROUTINE  PRINT TABLE(RECORD (TABF)ARRAYNAME  TABLE,INTEGER  N,LIMIT,
                     STRING (255) T)
INTEGER  I,J
RECORD (TABF) TEMP
!
CYCLE 
   J = 0
   FOR  I = 0,1,N-1 CYCLE 
      IF  TABLE(I)_PERCENT<TABLE(I+1)_PERCENT THEN  START 
         TEMP = TABLE(I)
         TABLE(I) = TABLE(I+1)
         TABLE(I+1) = TEMP
         J = 1
      FINISH 
   REPEAT 
   EXIT  IF  J = 0
REPEAT 
!
N = 20 IF  N > 20
SPACES((72-LENGTH(T))//2)
PRINTSTRING(T)
NEWLINE
SPACES(17)
WRITE(I,4) FOR  I = 0,10,100
NEWLINE
FOR  I = 0,1,N CYCLE 
   EXIT  IF  TABLE(I)_PERCENT < LIMIT
   PRINTSTRING(TABLE(I)_S)
   SPACES(16-LENGTH(TABLE(I)_S))
   WRITE(TABLE(I)_PERCENT,2)
   PRINTSTRING("% ")
   PRINTSYMBOL('*') FOR  J = 0,1,TABLE(i)_PERCENT//2
   NEWLINE
REPEAT 
END ;   ! of PRINT TABLE
!
!
ROUTINE  TIMEOUT
INTEGER  I,K
LONGREAL  PERIOD,TOTAL,SERVTIME
STRING  (255) S,TITLE
RECORD (TABF)ARRAY  TABLE(0:LOCSN0+4)
!
TITLE="EMAS2900 SUP".STRING(ADDR(COM_SUPVSN))." Measurements ". C 
    DATE." ".TIME." Period=".ITOS(PERFORM_CLOCK//1000000)." secs"
PERIOD = PERFORM_CLOCK*COM_NOCPS
K = -1
TOTAL = 0
CYCLE  I = 0,1,LOCSN0+3
   S = SERVROUT(I)
   SERVTIME = COM_ITINT*PERFORM_SERVIT(I)
   IF  S # "" AND  PERFORM_SERVN(I) # 0 AND  100*SERVTIME/PERIOD > 1.0 THEN  START 
      K = K + 1
      TABLE(K)_S = S
      TABLE(K)_PERCENT = INT(100*SERVTIME/PERIOD)
   FINISH 
   TOTAL = TOTAL + SERVTIME
REPEAT 
K = K + 1
TABLE(K)_S = "INT/ACT/SEMA"
TABLE(K)_PERCENT = INT(100*(PERIOD-TOTAL)/PERIOD)
PRINTCHS(VDUS(1))
PRINT TABLE(TABLE,K,1,TITLE)
END ;   ! of TIMEOUT
!
!
ROUTINE  PAGEING OUT
STRING (255) TITLE
RECORD (TABF)ARRAY  TABLE(0:3)
!
TITLE = "EMAS2900 SUP".STRING(ADDR(COM_SUPVSN))." Page ins ". C 
    DATE." ".TIME." Period=".ITOS(PERFORM_CLOCK//1000000)." secs"
TABLE(0)_S = "Transfers"
TABLE(0)_PERCENT = 100*(PERFORM_PTURNN-PERFORM_RECAPN-PERFORM_PSHAREN C 
     -PERFORM_NEWPAGEN)//PERFORM_PTURNN
TABLE(1)_S = "Recaptures"
TABLE(1)_PERCENT = 100*PERFORM_RECAPN//PERFORM_PTURNN
TABLE(2)_S = "Shared"
TABLE(2)_PERCENT = 100*PERFORM_PSHAREN//PERFORM_PTURNN
TABLE(3)_S = "Newpages"
TABLE(3)_PERCENT = 100*PERFORM_NEWPAGEN//PERFORM_PTURNN
PRINTCHS(VDUS(1))
PRINT TABLE(TABLE,3,0,TITLE)
END ;   ! of PAGEING OUT
!
!
!***********************************************************************
!*
!*          P R I N T   C A T E G O R Y   T A B L E
!*
!***********************************************************************
!
EXTERNALROUTINE  PRINT CATEGORY TABLE(STRING (255) PARMS)
INTEGER  MAXCAT
!
MAXCAT = INTEGER(COM_CATTAD)
!
RECORD (CATTABF)ARRAYFORMAT  CATTABAF(0:MAXCAT)
RECORD (CATTABF)ARRAYNAME  CATTAB
INTEGER  I
!
CATTAB == ARRAY(COM_CATTAD+4,CATTABAF)
PRINTCHS(VDUS(1));                      ! Clear VDU screen
PRINTSTRING(STRING(ADDR(COM_SUPVSN))." ")
PRINTSTRING("Dual ") IF  COM_NOCPS # 1
PRINTSTRING(PROCESSOR TYPE(COM_OCPTYPE))
PRINTSTRING("  Store=")
WRITE(COM_SBLKS*128,0)
PRINTSTRING("K  Page size=")
WRITE(COM_EPAGESIZE,0)
PRINTSTRING("K  Time slice=")
PRINT(COM_TSLICE/1000000,1,4)
PRINTSTRING("s ")
PRINTSTRING(DATE." ".TIME)
NEWLINE
PRINTSTRING(C 
"Category  Priority  Store Time  More  More  Less  Wait  RQueue  RQueue  Strobe")
NEWLINE
PRINTSTRING(C 
"            queue   limit limit store time  store       slice1  slice2  time")
NEWLINE
FOR  I = 1,1,MAXCAT CYCLE 
   WRITE(I,2)
   IF  CATTAB(i)_SP0 = 'B' THEN  PRINTSTRING(" Back") ELSE  PRINTSTRING(" Fore")
   WRITE(CATTAB(I)_PRIORITY,6)
   WRITE(CATTAB(I)_EPLIM*COM_EPAGESIZE,7); PRINTSYMBOL('K')
   PRINT((CATTAB(I)_RTLIM*COM_TSLICE)/1000000,2,2); PRINTSYMBOL('s')
   WRITE(CATTAB(I)_MOREP,4)
   WRITE(CATTAB(I)_MORET,5)
   WRITE(CATTAB(I)_LESSP,5)
   WRITE(CATTAB(I)_SUSP,4)
   WRITE(CATTAB(I)_RQTS1,6)
   WRITE(CATTAB(I)_RQTS2,6)
   IF  CATTAB(I)_STROBEI # 0 THEN  START 
      PRINT((CATTAB(I)_STROBEI*COM_TSLICE)/1000000,5,2); PRINTSYMBOL('s')
   FINISH 
  NEWLINE
REPEAT 
PROMPT("")
READSYMBOL(I) WHILE  I # NL
END ;   ! of PRINT CATEGORY TABLE
!
!
!***********************************************************************
!*
!*          P R I N T   P R O C E S S   L I S T
!*
!***********************************************************************
!
EXTERNALROUTINE  PRINT PROCESS LIST(STRING (255) PARMS)
INTEGER  MAXCAT
RECORD (PROCF)ARRAYNAME  PROCA
!
PROCA == ARRAY(COM_PROCAAD,PROCAF)
!
MAXCAT = INTEGER(COM_CATTAD)
RECORD (CATTABF)ARRAYFORMAT  CATTABAF(0:MAXCAT)
RECORD (CATTABF)ARRAYNAME  CATTAB
!
CATTAB == ARRAY(COM_CATTAD+4,CATTABAF)
!
RECORD (PROCF)NAME  PROC
INTEGER  I,J
!
FOR  I = 1,1,MAXPROCS CYCLE 
   PROC == PROCA(I)
   IF  PROC_USER # "" AND  (PARMS = "" OR  PROC_USER = PARMS) THEN  START 
      WRITE(I,3)
      IF  PROC_STATUS & 4 # 0 THEN  PRINTSYMBOL('*') ELSE  SPACE
      PRINTSTRING(PROC_USER)
      WRITE(PROC_CATEGORY,2)
      IF  PROC_P4TOP4 # 0 THEN  WRITE(PROC_P4TOP4,3) ELSE  SPACES(4)
      IF  PROC_ACTIVE = 255 THEN  START 
         IF  PROC_STATUS & 2 = 0 THEN  START 
            IF  PROC_STATUS & 8 = 0 THEN  START 
               IF  PROC_RUNQ # 0 THEN  START 
                  PRINTSTRING("   run Q")
                  WRITE(PROC_RUNQ,1)
               FINISH  ELSE  START 
                  PRINTSTRING(" Store Q")
                  WRITE(CATTAB(PROC_CATEGORY)_PRIORITY,1)
               FINISH 
               SPACE
            FINISH  ELSE  PRINTSTRING(" ".STATES(3))
         FINISH  ELSE  PRINTSTRING(" ".STATES(1))
         SPACES(7)
      FINISH  ELSE  START 
         FOR  J = 0,1,9 CYCLE 
            IF  J # 0 AND  J # 1 AND  J # 3 AND  J # 5 AND  J # 6 AND  C 
              PROC_STATUS & (1<<J) # 0 AND  STATES(J) # "" THEN  START 
               PRINTSTRING(" ".STATES(J))
               EXIT 
            FINISH 
         REPEAT 
         IF  PROC_ACTIVE # 0 THEN  START 
           WRITE(PROC_ACTIVE*20,4)
           PRINTSTRING(" s")
         FINISH  ELSE  SPACES(7)
      FINISH 
      IF  PROC_EPA # 0 THEN  START 
         PRINTSTRING(" pages")
         WRITE(PROC_EPA,3)
         PRINTSTRING(" used")
         WRITE(PROC_EPN,3)
      FINISH  ELSE  SPACES(19)
      IF  PROC_ACTIVE = 255 THEN  START 
         PRINTSTRING(" ".STATES(0)) IF  PROC_STATUS & 1 # 0
         PRINTSTRING(" ".STATES(5)) IF  PROC_STATUS & 32 # 0
         PRINTSTRING(" ".STATES(6)) IF  PROC_STATUS & 64 # 0
         PRINTSTRING(" ".STATES(7)) IF  PROC_STATUS & 128 # 0
         PRINTSTRING(" ".STATES(9)) IF  PROC_STATUS & 512 # 0
      FINISH 
      NEWLINE
      EXIT  IF  PARMS = PROC_USER
   FINISH 
REPEAT 
END ;   ! of PRINT PROCESS LIST
!
!
!***********************************************************************
!*
!*          W A T C H
!*
!***********************************************************************
!
EXTERNALROUTINE  WATCH(STRING (255) PARMS)
INTEGER  SECONDS,I
STRING (15) INT
STRING (255) USER,TEMP
!
IF  PARMS -> USER.(",").TEMP THEN  START 
   SECONDS = PSTOI(TEMP)
FINISH  ELSE  START 
   USER = PARMS
   SECONDS = 2
FINISH 
SECONDS = 2 IF  SECONDS < 0
CYCLE 
   PRINTPROCESSLIST(USER)
   I = DDELAY(SECONDS)
   INT = UCSTRING(INTERRUPT)
   EXIT  IF  INT = "STOP"
REPEAT 
END ;   ! of WATCH
!
!
!***********************************************************************
!*
!*          P R I N T   S U P E R V I S O R   T I M E
!*
!***********************************************************************
!
EXTERNALROUTINE  PRINT SUPERVISOR TIME(STRING (255) PARMS)
INTEGER  I
LONGREAL  PERIOD,TOTAL,SERVTIME
STRING  (15) S
!
GET SUPERVISOR TIME
PRINTCHS(VDUS(1));                      ! Clear screen
I = ADDR(COM_DATE0) + 3
PRINTSTRING("
EMAS2900 SUP".STRING(ADDR(COM_SUPVSN))." Timing ". C 
STRING(I)." ".STRING(I+12)."  Period=")
PRINT(PERFORM_CLOCK/1000000,1,1)
PRINTSTRING(" secs")
PERIOD = PERFORM_CLOCK*COM_NOCPS
PRINTSTRING("
  Service            Calls       Time(secs)    Average(msecs)  %Of total")
   NEWLINE
TOTAL = 0
CYCLE  I = 0,1,LOCSN0+3
   S = SERVROUT(I)
   SERVTIME = COM_ITINT*PERFORM_SERVIT(I)
   IF  S # "" AND  PERFORM_SERVN(I) # 0 THEN  START 
      PRINTSTRING(S)
      SPACES(16-LENGTH(S))
      PRINT(PERFORM_SERVN(I),9,0)
      PRINT(SERVTIME/1000000,11,3)
      PRINT((SERVTIME/1000)/PERFORM_SERVN(I),10,3)
      PRINT(100*SERVTIME/PERIOD,8,1)
      PRINTSTRING("%"); NEWLINE
   FINISH 
   TOTAL = TOTAL + SERVTIME
REPEAT 
PRINTSTRING("Int/Act/Sema etc.")
SPACES(9)
PRINT((PERIOD-TOTAL)/1000000,11,3)
SPACES(20)
PRINT(100*(PERIOD-TOTAL)/PERIOD,2,1)
PRINTSTRING("%"); NEWLINE
END ;   ! of PRINT SUPERVISOR TIME
!
!
!***********************************************************************
!*
!*          P R I N T   S U P E R V I S O R   P A G I N G
!*
!***********************************************************************
!
EXTERNALROUTINE  PRINT SUPERVISOR PAGING(STRING (255) PARMS)
GET SUPERVISOR TIME
PRINTCHS(VDUS(1));                      ! Clear screen
PRINTSTRING("
EMAS2900 SUP".STRING(ADDR(COM_SUPVSN))." Paging ".DATE." ".TIME."  Period=")
PRINT(PERFORM_CLOCK/1000000,1,3)
PRINTSTRING(" secs")
PRINTSTRING("
Pageins=".ITOS(PERFORM_PTURNN)."
Recaptures=".ITOS(PERFORM_RECAPN)."
Shared pages=".ITOS(PERFORM_PSHAREN)."
New pages=".ITOS(PERFORM_NEWPAGEN)."
Writeouts=".ITOS(PERFORM_PAGEOUTN)."
Pages zeroed=".ITOS(PERFORM_PAGEZN)."
Pages snoozed=".ITOS(PERFORM_SNOOZN)."
Pages aborted=".ITOS(PERFORM_ABORTN))
PRINTSTRING("
Snoozes complete =".ITOS(PERFORM_SNOOZOK)."
Snoozes timedout =".ITOS(PERFORM_SNOOZTO)."
Snoozes abandoned=".ITOS(PERFORM_SNOOZAB)."
")
END ;   ! of PRINT SUPERVISOR PAGING
!
!
!***********************************************************************
!*
!*          P R I N T   T I M E
!*
!***********************************************************************
!
EXTERNALROUTINE  PRINT TIME(STRING (255) PARMS)
GET SUPERVISOR TIME
TIMEOUT
END ;   ! of PRINT TIME
!
!
!***********************************************************************
!*
!*          P R I N T   P A G I N G
!*
!***********************************************************************
!
EXTERNALROUTINE  PRINT PAGING(STRING (255) PARMS)
GET SUPERVISOR TIME
PAGEING OUT
END ;   ! of PRINT PAGING
ENDOFFILE