 TITLE  '* * CAL Performance Monitor Report Writer F00 CP-V * *'
         SYSTEM   SIG7FDP
         SYSTEM   BPM
*
EDITPROC CSECT    1
*
#CAL11S  EQU      X'52'
#CAL12S  EQU      X'11'
#CAL13S  EQU      6
#CAL14S  EQU      7
#CAL16S  EQU      11
#CAL17S  EQU      X'E'
#CAL18S  EQU      X'1D'
#CAL19S  EQU      11
*
MONCPUD  EQU      X'3DC'
MASTCNTD EQU      X'3DD'
SLVCNTD  EQU      X'3DE'
*
CAL11CNTD EQU     0
CAL11CPUD EQU     X'5B'
CAL11IOD  EQU     X'B3'
CAL11MISCD EQU    X'16A'
*
CAL12CNTD EQU     X'29'
CAL12CPUD EQU     X'84'
CAL12IOD  EQU     X'DD'
*
CAL13CNTD EQU     X'32'
CAL13CPUD EQU     X'8C'
CAL13IOD  EQU     X'E6'
*
CAL14CNTD EQU     X'35'
CAL14CPUD EQU     X'8F'
CAL14IOD  EQU     X'E9'
*
CAL16CNTD EQU     X'39'
CAL16CPUD EQU     X'93'
CAL16IOD  EQU     X'ED'
*
CAL17CNTD EQU     X'3F'
CAL17CPUD EQU     X'98'
CAL17IOD  EQU     X'F3'
*
CAL18CNTD EQU     X'46'
CAL18CPUD EQU     X'9F'
CAL18IOD  EQU     X'FA'
*
CAL19CNTD EQU     X'55'
CAL19CPUD EQU     X'AE'
CAL19IOD  EQU     X'109'
*
CAL11UND EQU      X'10F'
CAL12UND EQU      X'138'
CAL13UND EQU      X'141'
CAL14UND EQU      X'144'
CAL16UND EQU      X'148'
CAL17UND EQU      X'14E'
CAL18UND EQU      X'155'
CAL19UND EQU      X'164'
*
*
         REF      M:LO              PRINTER OUTPUT
         REF      M:GO              HISTORY OUTPUT
         REF      M:DO              SNAPS OUTPUT
         REF      M:LL              DIAGNOSTIC MSG'S DCB
         REF      M:SI              COMMAND INPUT DCB
*
*
R0       EQU      0
R1       EQU      1
R2       EQU      2
R3       EQU      3
R4       EQU      4
R5       EQU      5
R6       EQU      6
R7       EQU      7
R8       EQU      8
R9       EQU      9
R10      EQU      10
R11      EQU      11
R12      EQU      12
R13      EQU      13
R14      EQU      14
R15      EQU      15
*
*
         PAGE
PASS     SET      S:UFV(PASS)+1
SIDING   CNAME
         PROC
         LOCAL    SIDADD
LF       DATA     BA(SIDADD)
         GEN,8,24 S:NUMC(AF),BA(PBUF)
         USECT    TEXT
SIDADD   SET      %
         TEXT     AF
         USECT    EDITPROC
         PEND
*
HEADING  CNAME
         PROC
         DO       PASS=1
LF       RES      (PBUFSIZE+3)**-2
         ELSE
I        DO       PBUFSIZE
S1(I)    SET      ' '
         FIN
I        DO       NUM(AF)/2
S2       SET      S:UT(AF(I*2))
J        DO       S:NUMC(AF(I*2))
S1(AF(I*2-1)-S:NUMC(AF(I*2))+J+1) SET S2(J)
         FIN
         FIN
LF       TEXT     S1
         FIN
         PEND
*
BIT      FNAME
         PROC
         PEND     X'80000000'**-AF
         PAGE
         DEF      ST
*
*        ASK USER IF HE WANTS TO TOTAL ALL RECORDS OR SEE EACH
*
ST       EQU      %
         CAL1,1   PROMPTX           SET THE PROMPT CHARACTER
         CAL1,1   HEADFPT           MAKE EM MOVE THE HEADER AGAIN
         CAL1,1   COUNTFPT          AND THE PAGE COUNTER
         CAL1,8   TRAPFPT
         B        SCAN              GO READ A COMMAND
         PAGE
*
*        GOT FIRST COMMAND - OPEN THE FILE AND READ RECORDS
*
RD:DATA  EQU      %
         LCI      4
         LM,R0    3Z
         STM,R0   START:TIM         CLEAR STARTING BUCKET
         STW,R0   HIT1
         STW,R0   QUAL              SUPPRESS OTHER FLAGS
         BAL,R1   CLEAR             CLEAR ALL TABLES
         LW,R0    SUMEM             WILL BE SUMMING DATA UP
         BEZ      RD:DATA1          NO
         LI,R15   RESHMSG
         CAL1,2   PRNT              ASK IF HISTORY FILE TO BE RESTORED
         LI,R1    1
         CAL1,1   READ:REC          READ A BYTE
         LB,R1    UCBUF             GET HIS REPLY
         CI,R1    'Y'               SAY YES
         BNE      RD:DATA1          NOPE
         BAL,R7   GETHISTORY        YES--> RESTORE THE HISTORY FILE NOW
RD:DATA1 EQU      %
         LH,R0    M:EI
         CI,R0    32                IS THE FILE OPEN NOW
         BANZ     %+2               YES
         CAL1,1   OPNSIFPT
         LW,R0    T1                CHECK FOR STARTING TIME IN EDIT MODE
         OR,R0    T2                AND FOR ENDING TIMES
         CI,R0    0
         BEZ      %+2               NOT IN FILE EDIT MODE
         CAL1,1   POS:FILE          POSITION BACK TO START OF FILE
RD:DATA2 EQU      %
         CAL1,1   RDTIMEFPT         READ FIRST TIMING RECORD
RD:DATA3  EQU     %
         LW,R0    ALL               ARE WE SUMMING ALL RECORDS
         BNEZ     RD:DATA4          YUP-> SEE IF WE GOT STARTED YET
         LW,R0    T1                ARE WE LOOKING FOR A START TIME
         BEZ      RD:DATA5          NOPE
RD:DATA4 EQU      %
         LW,R0    QUAL              YES--> HAVE WE FOUND IT YET
         BNEZ     RD:DATA6          YUP
RD:DATA5  EQU     %
         LCI      4
         LM,0     TIMEBUF
         STM,0    TD
         STM,R0   START:TIM         SAVE STARTING TIME OF PERIOD
         LCI      2
         LM,0     TIMEBUF+5
         STM,0    SITEID
RD:DATA6  EQU     %
         CAL1,1   RDSIFPT         **READ DATA RECORD
         LCI      2
         LM,R2    TIMEBUF           PICK UP HH:MM WORDS
         SLD,R2   -8                PUT OTHER BYTE OF MIN INTO R3
         SLS,R2   -8                DROP OFF ':' IN R2
         SLD,R2   16                R2 NOW = HHMM IN ONE WORD
         LW,R3    T1                STARTING TIME ASKED FOR
         BEZ      RD:DATA7          NOPE
         CW,R2    R3                IS TIME IN HAND .GTE. TIME IN BUSH
         BL       RD:DATA2          TOO EARLY
         MTW,1    HIT1              SET FOUND START TIME FLAG
RD:DATA7 EQU      %
         LCI      4
         LM,R0    TIMEBUF
         STM,R0   STOP:TIME         SAVE LAST TIME OF RECORD
         LW,R4    T2                GET ENDING TIME
         BEZ      RD:DATA8          NONE
         SLD,R0   -8                LAST BYTE OF MINUTES INTO R1
         SLS,R0   -8                SHIFT OUT ':'
         SLD,R0   16                NOW HHMM IN R0
         CW,R0    T2                IS TIME TO STOP READING THE FILE
         BGE      CHK:TOTAL         TIME TO STOP THEN
RD:DATA8  EQU     %
         PAGE
*
*        RECORD SEEMS TO QUALIFY HERE
*
         LW,R0    SUMEM             IN LIST MODE
         BNEZ     RD:DATA9          NOPE
         LCI      4
         LM,R0    START:TIM
         STM,R0   TD
RD:DATA9  EQU     %
         LI,R0    0
         LW,R1    TIMEBUF+4         GET TMS FROM TIME RECORD
         BLEZ     RD:DATA3          ***E R R O R *** REJECT THIS RECORD
         LD,R6    R0                MOVE TO WORK REGISTER
         AD,R6    CUM:SAMP
         STD,R6   CUM:SAMP          UPDATE CUMULATIVE SAMPLE TICKS
         AD,R0    PCUM:SAMP         AND PEAK CUMULATIVE TICKS
         STD,R0   PCUM:SAMP
         MTW,1    QUAL              SET BEEN READING RECORDS
*
*
*        READ A RECORD AND ACCUMULATE TOTALS
*
         LI,R5    9                 9 CAL TYPES
SUMM0    EQU      %
*
*        WE CURRENTLY SKIP OVER CAL1,5'S
*
         CI,R5    5                 AT 5'S YET
         BE       SUMM2             SKIP IF TRUE
         LI,R4    0
SUMM1    EQU      %
         LW,R10   FPTS,R5           GET POINTER TO FPT TABLE
         BEZ      SUMM2             NONE (CAL1,5 MAYBE)
         LB,R3    *R10,R4           GET COUNT
         LW,R1    CNTD,R5           DISPLACEMENT INTO BUFFER
         BLZ      SUMM1A            NONE FOR THIS TYPE
         AI,R1    IBUF
*
*        BUMP NUMBER OF TIMES THIS FPT CODE WAS SEEN
*
         LH,R1    *R1,R3            GET FPT COUNTER
         AND,R1   XFFFF
         CI,R1    0                 ANY OF THESE SEEN
         BEZ      SUMM1D            NOPE--> MARCH ON
         LW,R2    PCNTS,R5          POINTR TO COUNTER BUCKET
         AWM,R1   *R2,R3            UPDATE TOTAL
         AWM,R1   CUMCNT
         AWM,R1   CUMCNT,R5         # BY CAL TYPE BUMPED
         LW,R2    CALCNT,R5         ADDRESS OF TABLE
         AWM,R1   *R2,R3            UPDATE BY FPT CODE
*
*        UPDATE CPU TIME THIS FPT CODE TOOK TO DO
*
SUMM1A   EQU      %
         LW,R1    CPUD,R5
         BLZ      SUMM1B            NONE
         AI,R1    IBUF
         LH,R1    *R1,R3            ELAPSED CLOCK TICKS
         AND,R1   XFFFF
         SLS,R1   1                 CONVERT TO MILLISECONDS FORMAT
         LW,R2    PCALCPU,R5        GET TABLE ADDRESS
         AWM,R1   *R2,R3            **STORE NEW TOTAL
         AWM,R1   CUMCPU
         LW,R2    CALCPU,R5         ADDRESS OF TABLE
         AWM,R1   *R2,R3            UPDATE FPT TOTALS
*
*        UPDATE NUMBER OF I/O OPERATIONS THIS FPT CODE TOOK
*
SUMM1B   EQU      %
         LW,R1    IOD,R5
         BLZ      SUMM1C
         AI,R1    IBUF
         LH,R1    *R1,R3            I/O COUNTS
         AND,R1   XFFFF
         LW,R2    PCALIO,R5
         AWM,R1   *R2,R3            **STORE NEW TOTAL
         AWM,R1   CUMIO             INCREASE ELAPSED ACCESSES TOTAL
         LW,R2    CALIO,R5
         AWM,R1   *R2,R3            UPDATE FPT CODE TOTALS
*
*        GET UNMAPPED ELAPSED TICKS FOR THIS FPT CODE
*
SUMM1C   EQU      %
         LW,R1    UND,R5
         BLZ      SUMM1D
         AI,R1    IBUF
         LH,R1    *R1,R3            GET TICKS
         AND,R1   XFFFF
         SLS,R1   1                 CONVERT TO MILLISECONDS
         LW,R2    PCALUNT,R5
         AWM,R1   *R2,R3            BUMP PEAK TABLE
         LW,R2    CALUNT,R5
         AWM,R1   *R2,R3            BUMP RUNNING TABLE
SUMM1D   EQU      %
         AI,R4    1                 NEXT FPT CODE
         CB,R4    FPTCNTS,R5        SEE IF DONE YET
         BL       SUMM1             NOT YET
SUMM2    EQU      %
         BDR,R5   SUMM0             DO ALL CAL TYPES
         LI,R0    0
         LW,R1    IBUF+MONCPUD      GET UNMAPPED TICKS
         SLS,R1   1                 CNVRT TO MILS
         LD,R6    R0
         AD,R6    CUM:MON
         STD,R6   CUM:MON
         AD,R0    PCUM:MON
         STD,R0   PCUM:MON
         LI,R4    0
BYTES    EQU      %
         LI,R0    0
         LB,R3    CAL11FPT,R4
         LW,R1    IBUF+CAL11MISCD,R3
         LD,R6    R0
         AD,R6    PCAL11MISC,R3     ADD TO OLD TOTAL
         STD,R6   PCAL11MISC,R3
         LD,R6    CAL11MISC,R3
         AD,R6    R0
         STD,R6   CAL11MISC,R3
BYTES1   EQU      %
         AI,R4    1
         CI,R4    #CAL11FPT         AT TOP YET
         BL       BYTES             NOT YET
         LW,R1    IBUF+SLVCNTD      SLAVE CPU CAL COUNTER
         AWM,R1   SLV#              BUMP RUNNING TOTALS
         AWM,R1   PSLV#             BUMP PEAK TOTAL
         LW,R1    IBUF+MASTCNTD     MASTER CPU CAL COUNTER
         AWM,R1   MAST#
         AWM,R1   PMAST#
         CAL1,1   RDTIMEFPT         READ NEXT TIMING RECORD
         LCI      4
         LM,R0    TIMEBUF           GET TIME OF DAY FROM IT
         STM,R0   STOP:TIME         AND STORE FOR REPORT
         LW,R0    SUMEM             ARE WE SUMMING ALL RECORDS TOGETHER
         BNEZ     RD:DATA3          YUP--> READ ANOTHER ONE
         BAL,R7   REPORT0           PUT OUT REPORT FOR THIS PASS
         BAL,R1   CLEAR             CLEAR THE COUNTERS
         B        RD:DATA3          AND READ THE NEXT RECORD
         PAGE
*
*        DATA FOR ACCUMULATION ROUTINE
*
*
CNTD     EQU      %
         DATA     -1                -1
         DATA     CAL11CNTD         1
         DATA     CAL12CNTD         2
         DATA     CAL13CNTD         3
         DATA     CAL14CNTD         4
         DATA     -1   CNTD         5
         DATA     CAL16CNTD         6
         DATA     CAL17CNTD         7
         DATA     CAL18CNTD         8
         DATA     CAL19CNTD         9
*
CPUD     EQU      %
         DATA     -1                -1
         DATA     CAL11CPUD         1
         DATA     CAL12CPUD         2
         DATA     CAL13CPUD         3
         DATA     CAL14CPUD         4
         DATA     -1   CPUD         5
         DATA     CAL16CPUD         6
         DATA     CAL17CPUD         7
         DATA     CAL18CPUD         8
         DATA     CAL19CPUD         9
*
IOD      EQU      %
         DATA     -1                -1
         DATA     CAL11IOD          1
         DATA     CAL12IOD          2
         DATA     CAL13IOD          3
         DATA     CAL14IOD          4
         DATA     -1   IOD          5
         DATA     CAL16IOD          6
         DATA     CAL17IOD          7
         DATA     CAL18IOD          8
         DATA     CAL19IOD          9
*
UND      EQU      %
         DATA     -1
         DATA     CAL11UND          1
         DATA     CAL12UND          2
         DATA     CAL13UND          3
         DATA     CAL14UND          4
         DATA     -1                5
         DATA     CAL16UND          6
         DATA     CAL17UND          7
         DATA     CAL18UND          8
         DATA     CAL19UND          9
*
PCALUNT  EQU      %
         DATA     0
         DATA     PCAL11UNT         1
         DATA     PCAL12UNT         2
         DATA     PCAL13UNT         3
         DATA     PCAL14UNT         4
         DATA     0                 5
         DATA     PCAL16UNT         6
         DATA     PCAL17UNT         7
         DATA     PCAL18UNT         8
         DATA     PCAL19UNT         9
*
CALUNT   EQU      %
         DATA     0
         DATA     CAL11UNT          1
         DATA     CAL12UNT          2
         DATA     CAL13UNT          3
         DATA     CAL14UNT          4
         DATA     0
         DATA     CAL16UNT          6
         DATA     CAL17UNT          7
         DATA     CAL18UNT          8
         DATA     CAL19UNT          9
*
PCNTS    EQU      %
         DATA     0
         DATA     PCAL11CNT         1
         DATA     PCAL12CNT         2
         DATA     PCAL13CNT         3
         DATA     PCAL14CNT         4
         DATA     00    CNT         5
         DATA     PCAL16CNT         6
         DATA     PCAL17CNT         7
         DATA     PCAL18CNT         8
         DATA     PCAL19CNT         9
*
PCALCPU  EQU      %
         DATA     0                 0
         DATA     PCAL11CPU         1
         DATA     PCAL12CPU         2
         DATA     PCAL13CPU         3
         DATA     PCAL14CPU         4
         DATA     00    CPU         5
         DATA     PCAL16CPU         6
         DATA     PCAL17CPU         7
         DATA     PCAL18CPU         8
         DATA     PCAL19CPU         9
*
PCALIO   EQU      %
         DATA     0                 0
         DATA     PCAL11IO          1
         DATA     PCAL12IO          2
         DATA     PCAL13IO          3
         DATA     PCAL14IO          4
         DATA     00    IO          5
         DATA     PCAL16IO          6
         DATA     PCAL17IO          7
         DATA     PCAL18IO          8
         DATA     PCAL19IO          9
*
*
         PAGE
*
*        START NEW REPORT OUTPUT PAGE
*
NEWPAGE  EQU      %
         LW,R1    CLEARPBUF
         MBS,R0   BA(BLANK)         BLANK THE PRINT LINE
         CAL1,1   EJECTFPT          NEW PAGE
         CAL1,1   SPACE
         LW,R6    SIDTS,R5
         LD,R2    *R6
         MBS,R2   0
         CAL1,1   WTPBUFFPT
         CAL1,1   SPACE
         CAL1,1   WTHD0FPT
         CAL1,1   WTHD1FPT
         CAL1,1   TOT1FPT
         CAL1,1   SPACE
         B        *R11              AND RETURN
         PAGE
*
*        WRITE REPORT
*
REPORT   EQU      %
         LI,R7    RD:DATA3          AUTOMATIC ENTRY
REPORT0  EQU      %                 CALLER'S ENTRY
         PSW,R7   TSTACK            SAVE RETURN LINK
         LI,R5    1                 FI@ST CAL TYPE IS ONE
         LI,R6    SUM:MSG           HEADER TITLE IF SUMMING RECORDS
         LW,R0    SUMEM             ARE WE SUMMING
         BNEZ     %+2               YUP
         LI,R6    PER:MSG           NOPE
         LCI      8
         LM,R8    0,R6              GET CORRECT TITLE FOR HEADER
         STM,R8   HEADER+11         PUT NEW MSG INTO LP HEADER
         LCI      4
         LM,R0    STOP:TIME         GET ENDING TIME
         STM,R0   TD+5              AND STORE INTO PRINT LINE
         LW,R0    =' -- '
         STW,R0   TD+4
REPORT1  EQU      %
         STW,R5   CAL#              SAVE CURRENT CAL INDEX
         LW,R1    CUMCNT,R5         ANY OF THESE SEEN
         BEZ      REPORT4           NOPE
         BAL,R11  NEWPAGE           YES-> PUT OUT NEW PAGE HERE
         LI,R4    0
REPORT2  EQU      %
         LW,R1    CLEARPBUF
         MBS,R0   BA(BLANK)
         LW,R6    SIDS,R5
         LD,R2    *R6,R4
         MBS,R2   0
         LW,R3    FPTS,R5           POINTER TO FPT TABLE
         LB,R3    *R3,R4
         LW,R2    CALCNT,R5         BY CAL TYPE
         LW,R1    *R2,R3            COUNT BY FPT CODE
         BEZ      REPORT3           NONE FOR THIS ONE
         AWM,R1   CALTCNT           UPDATE TOTAL
         BAL,R7   PCNT              COUNT FOR THIS FPT CODE
         LW,R2    CALCPU,R5
         LW,R1    *R2,R3
         AWM,R1   CALTCPU           TOTAL CPU TIME FOR THIS FPT
         LI,R0    0
         STD,R0   MAPCPU            SAVE THIS CAL'S MAPPED TIME
         BAL,R7   PCPU
         LW,R2    CALIO,R5          I/O COUNTS
         LW,R1    *R2,R3
         AWM,R1   CALTIO
         BAL,R7   PIO
         LW,R6    CALMISC,R5        ARS
         BEZ      REPORT20          NOT CAL1,1 TYPE
         LD,R0    *R6,R3
         BEZ      REPORT20          NONE
         LD,R6    R0                MOVE COUNT
         AD,R6    CALTARS           INCREASE TOTAL
         STD,R6   CALTARS
         STD,R0   CALARS            SAVE THIS UNIQUE TOTAL
         BAL,R7   PMISC             PUT OUT THE AVERAGE BYTES PER CAL
REPORT20 EQU      %
         LD,R0    3Z                INIT W/ZEROES
         STD,R0   UNMAPCPU          STORE HERE FIRST
         LW,R6    CALUNT,R5         POINTER TO UNMAPPED TABLE
         BEZ      REPORT21          NONE
         LW,R1    *R6,R3            # OF UNMAPPED TICKS FOR THIS FPT CODE
         LI,R0    0
         STD,R0   UNMAPCPU          SAVE THIS CAL'S UNMAPPED CPU
         LD,R12   R0                MOVE TO
         AD,R12   CUM:UNMAP
         STD,R12  CUM:UNMAP         BUMP RUNNING TOTAL
         LD,R12   R0
         AD,R12   ALL:UNMAP
         STD,R12  ALL:UNMAP
REPORT21 EQU      %
         LI,R2    BA(PBUF)+COL11
         BAL,R7   INTEGER           PUT OUT TOTAL BYTE COUNT
         BAL,R7   FPT:TIME
         CAL1,1   NLINESFPT
         CAL1,1   WTPBUFFPT         WRITE THIS LINE OUT
         CI,R8    1                 HOW MANY LINES LEFT ON PAGE
         BNE      %+2
         BAL,R11  NEWPAGE           NEXT PAGE IF LOW..
         LD,R0    CALARS            TOTAL BYTE COUNT
         AD,R0    CUMARS            ADD INTO TOTAL OVERALL BYTE COUNT
         STD,R0   CUMARS            AND REPLACE SAME
REPORT3  EQU      %
         LW,R5    CAL#              RESTORE CAL1,X # WE'RE ON
         AI,R4    1
         CB,R4    FPTCNTS,R5        DONE YET
         BL       REPORT2           MORE TO GO YET
*
*        PRINT TOTALS BY CAL TYPE
*
         CAL1,1   TOT1FPT           PRINT SOME DASHES
         CAL1,1   SPACE
         LW,R1    CLEARPBUF         CLEAR THE PRINT BUFFER
         MBS,R0   BA(BLANK)
         LD,R2    CALTOT
         MBS,R2   0
         LW,R1    CALTCNT           TOTAL CALS FOR THIS TYPE
         STW,R1   TOT:COUNT         PRESERVE ALL CAL COUNT
         BAL,R7   PCNT              PUT OUT INFO
*
         LW,R1    CALTCPU           CPU TIME FOR THESE CALS
         BAL,R7   PCPU              PRINT INFO
*
         LW,R1    CALTIO            TOTAL I/O COUNT FOR THESE
         BAL,R7   PIO               PRINT INFO ON I/O
*
         LD,R0    CALTARS           GET BYTE COUNT FOR THESE CAL'S
         BAL,R7   PMISC             AND SHOW ON PRINT LINE
         LD,R0    CUM:UNMAP         TOTAL UNMAPPED MILS FOR THIS GRP
         LI,R2    BA(PBUF)+COL11
         BAL,R7   INTEGER           TOTAL ARS IN SUMMARY LINE
         BAL,R7   CAL:TIME
         CAL1,1   WTPBUFFPT         PRINT IT ALL
REPORT4  EQU      %
         LCI      3
         LM,R0    3Z
         STM,R0   CALTCNT
         STD,R0   CALTARS
         STD,R0   CUM:UNMAP
         LW,R5    CAL#              GET CURRENT CAL INDEX
         AI,R5    1
         CI,R5    10
         BL       REPORT1           NOT DONE YET
*
*        SHOW TOTALS FOR ALL CALS COMBINED NOW
*
         CAL1,1   SPACE
         CAL1,1   TOT1FPT           PRINT SOME DASHES
         CAL1,1   SPACE
         CAL1,1   SPACE
         LW,1     CLEARPBUF         BLANK THE ENTIRE BUF
         MBS,0    BA(BLANK)         WITH BLANKS
         LD,2     GRANDTOT          GET 'GRAND TOTAL' LOC
         MBS,2    0                 AND MOVE IT
*
         LW,R1    CUMCNT            TOTAL CAL COUNT FOR ALL CALS
         BAL,R7   PCNT              PRINT INFO ON CAL COUNTS
*
         LW,R1    CUMCPU            TOTAL CPU TIME FOR ALL CALS
         BAL,R7   PCPU              PRINT INFO ON CPU TIME
*
         LW,R1    CUMIO             I/O COUNT FOR ALL CALS
         BAL,R7   PIO               PRINT INFO ON I/O ACTIVITY
*
         LD,R0    CUMARS            OVERALL BYTE COUNT
         BAL,R7   PMISC             OUTPUT
*
         LD,R0    ALL:UNMAP         OVERALL UNMAPPED TIME
         LI,R2    BA(PBUF)+COL11    PRINT LINE LOC
         BAL,R7   INTEGER           PUT HIM OUT ALSO
         LD,R0    ALL:UNMAP
         STD,R0   CUM:UNMAP         RE-INIT FOR LAST DISPLAY
         LW,R1    CUMCPU
         STW,R1   CALTCPU           AND THESE ONE ALSO
         LW,R1    TOT:COUNT
         STW,R1   CALTCNT           REPLACE # FOR AVERAGE'S
         BAL,R7   CAL:TIME          PUT OUT GRAND TOTAL AVERAGE
         LD,R0    3Z
         STD,R0   CUM:UNMAP
         STW,R0   CUMCPU
         STW,R0   CALTCNT           CLEAR IT AGAIN
*
*
         CAL1,1     WTPBUFFPT       PRINT EVERYTING
*
*        WRITE OVERALL TOTALS NOW
*
         CAL1,1   SPACE
         CAL1,1   SPACE
         CAL1,1   WTHD2FPT
         CAL1,1   WTHD3FPT          WRITE HEADING LINES
         CAL1,1   WTHD4FPT
         CAL1,1   SPACE             AND A SPACE
         LW,1     CLEARPBUF
         MBS,0    BA(BLANK)
         LD,R0    CUM:SAMP
         LI,R5    1000*60
         BAL,R7   SCALE             SCALE IF NECESSARY
         CD,R0    R4                WATCH OUT FOR DIVISION ERROR
         BL       REPORT41          OUT OF RANGE...
*
*        PUT OUT THESE NUMBERS ONLY IF MILS EXCEED 1 MINUTE
*
         DW,R0    R5                CALCULATE ELAPSED MINUTES
         STW,R1  TMINUTES           AND SAVE
         CW,R0    R5                CHECK REMAINDER FOR ROUNDING
         BL       %+2
         AI,R1    1                 ROUNT UP
         LI,R0    0
         DW,R0    =60               CALCULATE HOURS
         STW,R1   HOURS             SAVE EM
         STW,R0   MINUTES           SAVE REMAINING MINUTES TO SHOW
         LI,R2    BA(PBUF)+SAMPX
         LW,R1    MINUTES           GET MINUTES VALUE
         BAL,R7   INTEGER
         LI,R0    '0'
         LW,R1    MINUTES
         CI,R1    10                WAS TWO DIGITS
         BGE      %+3               YUP
         STB,R0   0,R2              NO-> LEAD ZERO REQUIRED HERE
         BDR,R2   %+1               READJUST LP BUFFER PTR
         LI,R1    ':'
         STB,R1   0,R2
         LW,R1    HOURS
         AI,R2    -1                ADJUST INDEX FOR HOURS FIELD
         BAL,R7   INTEGER
REPORT41 EQU      %
         LI,R2    BA(PBUF)+CNTSLVX
         LW,R1    SLV#              NUMBER OF SLAVE CPU CALS
         STW,R1   HOURS             REMEMBER IT
         BAL,R7   INTEGER
*
         LI,R2    BA(PBUF)+CNTMASTX
         LW,R1    MAST#             NUMBER OF MASTER CPU CALS
         AWM,R1   HOURS             ADD TO SLAVE CPU CAL COUNT
         BAL,R7   INTEGER
*
         LD,R0    CUM:MON           ACCUMULATIVE UNMAPPED TICKS
         LI,R2    BA(PBUF)+TOTUNMAPX
         LW,R5    HOURS             REAL OVERALL CAL COUNTER
         BAL,R7   REAL              AND DISPLAY AS FACTORED #
*
*        CALCULATE CAL RATE PER MINUTE
*
         LD,R0    3Z                GET SOME ZEROES
         LW,R5    TMINUTES          GET ELAPSED MINUTES VALUE
         BLEZ     REPORT42          NO GOOOOO--->
         LI,0     0
         LW,1     CUMCNT
         BLEZ     REPORT6           ***ERROR - BUT GET OUT ANYWAY ***
         DW,R0    R5                DIVIDE CAL COUNT BY # OF MINUTES
         SLS,R0   1                 REMAINDER*2
         CW,R0    R5
         BL       %+2
         AI,R1    1
REPORT42 EQU      %
         PSW,R1   TSTACK
         LI,R2    BA(PBUF)+AVGCMINX
         BAL,R7   INTEGER
         PLW,R1   TSTACK
*
*        CALCULATE CAL RATE PER HOUR
*
         MI,1     60
         LI,2     BA(PBUF)+AVGCHRX
         BAL,7    INTEGER
         CAL1,1    WTPBUFFPT
REPORT6  EQU      %
         LCI      4
         LM,R0    BLANK
         STM,R0   TD+5              CLEAR STOP TIME AWAY
         PLW,R7   TSTACK
         B        0,R7              AND RETURN
         PAGE
*
*        DATA FOR REPORT WRITER
*
SIDS     EQU      %
         DATA     0                 0
         DATA     CAL11SID          1
         DATA     CAL12SID          2
         DATA     CAL13SID          3
         DATA     CAL14SID          4
         DATA     0    SID          5
         DATA     CAL16SID          6
         DATA     CAL17SID          7
         DATA     CAL18SID          8
         DATA     CAL19SID          9
#SIDS    EQU      %-SIDS-1
*
FPTS     EQU      %
         DATA     0                 0
         DATA     CAL11FPT          1
         DATA     CAL12FPT          2
         DATA     CAL13FPT          3
         DATA     CAL14FPT          4
         DATA     0    FPT          5
         DATA     CAL16FPT          6
         DATA     CAL17FPT          7
         DATA     CAL18FPT          8
         DATA     CAL19FPT          9
#FPTS    EQU      %-FPTS-1
*
CALCNT   EQU      %
         DATA     0                 0
         DATA     CAL11CNT          1
         DATA     CAL12CNT          2
         DATA     CAL13CNT          3
         DATA     CAL14CNT          4
         DATA     0    CNT          5
         DATA     CAL16CNT          6
         DATA     CAL17CNT          7
         DATA     CAL18CNT          8
         DATA     CAL19CNT          9
*
CALCPU   EQU      %
         DATA     0                 0
         DATA     CAL11CPU          1
         DATA     CAL12CPU          2
         DATA     CAL13CPU          3
         DATA     CAL14CPU          4
         DATA     0    CPU          5
         DATA     CAL16CPU          6
         DATA     CAL17CPU          7
         DATA     CAL18CPU          8
         DATA     CAL19CPU          9
*
CALMISC  EQU      %
         DATA     0                 * 0
         DATA     CAL11MISC         * 1
         DATA     0000              * 2
         DATA     0000              * 3
         DATA     0000              * 4
         DATA     0                 * 5
         DATA     0000              * 6
         DATA     0000              * 7
         DATA     0000              * 8
         DATA     0000              * 9
*
CALIO    EQU      %
         DATA     0                 0
         DATA     CAL11IO           1
         DATA     CAL12IO           2
         DATA     CAL13IO           3
         DATA     CAL14IO           4
         DATA     0    IO           5
         DATA     CAL16IO           6
         DATA     CAL17IO           7
         DATA     CAL18IO           8
         DATA     CAL19IO           9
*
FPTCNTS  EQU      %
         DATA,1   0,;               0
                  #CAL11FPT,;       1
                  #CAL12FPT,;       2
                  #CAL13FPT,;       3
                  #CAL14FPT,;       4
                  0,;               5 (NO CAL1,5'S)
                  #CAL16FPT,;       6
                  #CAL17FPT,;       7
                  #CAL18FPT,;       8
                  #CAL19FPT         9
         BOUND    4
*
SIDTS    EQU      %
         DATA     0
         DATA     CI1
         DATA     CI2
         DATA     CI3
         DATA     CI4
         DATA     0
         DATA     CI6
         DATA     CI7
         DATA     CI8
         DATA     CI9
*
*
*
SUM:MSG  EQU      %
         TEXT     '****'
         TEXT     ' SUM'
         TEXT     'MARY'
         TEXT     ' STA'
         TEXT     'TIST'
         TEXT     'ICS '
         TEXT     '****'
         TEXT     '    '
*
PER:MSG  TEXT     '****'
         TEXT     ' PER'
         TEXT     'IODI'
         TEXT     'C ST'
         TEXT     'ATIS'
         TEXT     'ICS '
         TEXT     '****'
         TEXT     '    '
*
         PAGE
*
*        ABNORMAL FROM M:EI DCB
*
RDSIABN  EQU      %
         LB,R3    R10               MOVE ABN/ERR CODE
         CI,R3    6                 IS EOD
         BE       SI:END            YUP
         CI,R3    5                 IS EOF
         BNE      MAKEKEY           SNAP IT
SI:END   EQU      %
         LW,R3    SUMEM             OR SUMMING THEM..
         BEZ      CHK:TOTAL         NO-> PROBABLY LIST MODE
         LI,R7    SCAN              LOAD RETURN ADDRESS
         LW,R1    QUAL              FIND ANY RECORDS IN THAT RANGE
         BNEZ     REPORT0           OK-> DO A REPORT
         LI,R15   NONEMSG
         CAL1,2   PRNT              SAY WE DIDNT FIND ANY
         B        SCAN              GO GET NEW COMMAND
         PAGE
*
*        IN LIST MODE CHECK TO SEE IF USER WANTS TOTALS DISPLAYED
*
CHK:TOTAL EQU     %
         LI,R15   SHOWTOT
         CAL1,2   PRNT              ASK EM
         LI,R1    1
         CAL1,1   READ:REC          READ REPLY
         LB,R1    UCBUF
         CI,R1    'Y'               SAY YES
         BNE      SCAN              NO-> GET NEXT COMMAND
         B        RES:GO            MOVE TOTALS AND DISPLAY THEN
*
NONEMSG  TEXTC    '** NO RECORDS FOUNT FOR THAT TIME FRAME '
RESHMSG  TEXTC    '** RESTORE THE HISTORY FILE AND ADD TO IT ? '
SHOWTOT  TEXTC    '** DISPLAY TOTALS FROM THIS LIST RUN ? '
*
PRNT     GEN,8,24 1,0
         PZE      *0
         PZE      *R15              MSG ADDRS IN R15
         PAGE
*
*        CANT OPEN M:EI
*
OPNSIABN EQU      %
         LH,R3    R10               GET I/O ERROR CODE
         LB,R2    R10               GET MAJOR PART OF CODE
         AND,R8   =X'1FFFF'         SCREEN PLACE WHERE CAL IS
         CI,R2    X'2E'             IS DCB ALREADY OPEN NOW
         BE       *R8               YES--> GO ON BOUT YOUR BUSINESS
         CI,R3    X'1402'           IS FILE BUSY
         BNE      MAKEKEY           NO--> ABORT
         CAL1,8   WAITFPT           WAIT IF FILE IS BUSY
         B        RD:DATA           GO TRY AGAIN
*
MAKEKEY  EQU      %
         M:SNAP   'SIABN'
         CAL1,9   3
         PAGE
*
*        PUT OUT FPT FREQUENCY COUNTS
*
PCNT     EQU      %
         LCI      5
         PSM,R3   TSTACK
         STW,R1   CURCNT            SVE CURRENT VALUE
         LI,R2    BA(PBUF)+COL1
         BAL,R7   INTEGER
         LW,R1    CURCNT
         MI,R0    100               FACTOR
         LW,R5    CUMCNT
         BAL,R7   SCALE
         LI,R2    BA(PBUF)+COL2
         BAL,R7   REAL
         LCI      5
         PLM,R3   TSTACK
         B        0,R7
         PAGE
*
*        CALCULATE CPU TIMES
*
PCPU     EQU      %
         LCI      5
         PSM,R3   TSTACK
         STW,R1   CURCPU
         LI,R2    BA(PBUF)+COL3
         BAL,R7   INTEGER
         LW,R1    CURCPU
         MI,R0    100
         LW,R5    CUMCPU
         BAL,R7   SCALE
         LI,R2    BA(PBUF)+COL4
         BAL,R7   REAL
         LW,R1    CURCPU
         LD,R4    CUM:SAMP
*
         MI,R0   100                FACTOR R1 FOR PERCENTAGE
         BAL,R7   SCALE0            SCALE EM IF NECESSARY
         LI,2     BA(PBUF)+COL5     PRINT LINE INDEX
         BAL,7    REAL
*
*        PRINT AVERAGE CPU PER CAL
*
         LW,1     CURCPU
         LW,5     CURCNT
         LI,2     BA(PBUF)+COL6
         BAL,7    REAL
         LCI      5
         PLM,R3   TSTACK
         B        0,7
         PAGE
*
*        PRINT I/O COUNTS
*
PIO      EQU      %
         LCI      5
         PSM,R3   TSTACK
*
*        PRINT I/O COUNT AS AN INTEGER
*
         STW,1    CURIO
         LI,2     BA(PBUF)+COL7
         BAL,7    INTEGER
*
*        PRINT I/O COUNT AS A PER CENT OF ALL I/O COUNTS
*
         LW,1     CURIO
         MI,0     100
         LW,5     CUMIO
         BAL,R7   SCALE
         LI,2     BA(PBUF)+COL8
         BAL,7    REAL
*
*        PRINT I/O AVERAGE PER CAL
*
         LW,1     CURIO
         LW,5     CURCNT
         LI,2     BA(PBUF)+COL9
         BAL,7    REAL
         LCI      5
         PLM,R3   TSTACK
         B        0,7
         PAGE
*
*        PUT OUT BYTE COUNTS
*
PMISC    EQU      %
         LCI      5
         PSM,R3   TSTACK
         LW,5     CURCNT
         BAL,R7   SCALE
         LI,2     BA(PBUF)+COL10
         BAL,7    REAL
         LCI      5
         PLM,R3   TSTACK
         B        0,7
         PAGE
*
*        SCALING PERFORMED HERE
*
SCALE    EQU      %
         LI,R4    0
SCALE0   EQU      %
         CD,R0    MAXNSCALE         CHK R0/R1
         BG       SCALE1            NEEDS SCALING DOWN A BIT
         CD,R4    MAXNSCALE         R0/R1 IS OK - HOW BOUT R4/R5
         BL       0,R7              OK TO DIVIDE
         LD,R8    R4                MOVE TO WORK REGISTERS
         B        SCALE2
SCALE1   EQU      %
         LD,R8    R0
SCALE2   EQU      %
         LI,R6    0
         AI,R6    1
         SLD,R8   1
         BNOV     %-2
         SLD,R0   -33,R6
         SLD,R4   -33,R6            FACTOR R4/R5 ALSO
         B        0,R7
         PAGE
*
*        HEX CONVERSION TO REAL NUMBERS
*
REAL     EQU      %
         CI,R1    0                 ANYTHING TO DO
         BEZ      REAL:7            NONE
         CI,R5    0                 IS DIVISOR ZERO
         BEZ      REAL:8            PROBLEM THERE
         MI,R0    100
         PSW,R7   TSTACK
         BAL,R7   SCALE             CHECK FOR SCALING AGAN
         PLW,R7   TSTACK
         CI,R0    0
         BNEZ     REAL:8            OUT OF RANGE #
         CI,R5    0                 DID SCALING CLOBBER DIVISOR
         BLEZ     REAL:8            YES-> # WAS HUGE THEN...
         DW,R0    R5                CALCULATE PER CENT
         SLS,R0   1                 CHK FOR ROUNDING
         CW,R0    R5                NEED IT...
         BL       %+2               NO
         AI,R1    1                 YES-> ROUNT UP
         CI,R1    0                 # DIVIDE OK
         BEZ      INTEGER2          NO-> SHOW A ZERO
         CW,R1    ONEMIL            IS VALUE INTO THE MILLIONS...
         BLE      REAL:5            NO
REAL:0   EQU      %
         STW,R1   SCALED            SAVE ORIGINAL VALUE
         LI,R6    0
         DW,R1    =1000000          HOW MANY MILLIONS
         AI,R6    1
         DH,R1    =10**16
         BNEZ     %-2
         AI,R6   -1+4+'0'
         STB,R6   0,R2              STORE EXPONENT #
         LW,R1    SCALED
         AI,R6    -4-'0'
         LI,R0    0
         DW,R0    SCL,R6
         SLS,R0   1
         CW,R0    SCL,R6            REQUIRES ROUNDING
         BL       REAL:4            NO
         AI,R1    1
         CI,R1    1000
         BL       REAL:4            IS OK-> JUMP
*
*        BOOST SCALE FACTOR
*
         MTB,1    0,R2
         LI,R1    100
REAL:4    EQU     %
         AI,R2    -1
         LI,R3    'E'
         STB,R3   0,2
         AI,R2    -1
REAL:5    EQU     %
         LI,R8    2
REAL:6   EQU      %
         LI,R0    0
         DW,R0    =10
         AI,R0    '0'
         STB,R0   0,R2
         AI,R2    -1
         BDR,R8   REAL:6            LOOP ON FOR DECIMAL PLACES
         LI,R3    '.'
         STB,R3   0,2
         CI,R1    0                 ANYTHING LEFT
         BEZ      0,R7
         BDR,R2   INTEGER           PUT OUR REMAINDER AS INTERGER
*
REAL:7    EQU     %
         LI,R3    '-'
         STB,R3   0,R2
         BDR,R2   0,R7              RETURN TO CALLER ALIGNING INDEX
*
REAL:8    EQU     %
         LI,R3    '*'
         STB,R3   0,R2              FLAG THOSE DIVISOR ERRORS
         BDR,R2   0,R7              AND RETURN TO CALLER
         PAGE
*
*        HEX TO INTEGER
*
INTEGER  EQU      %
         CI,R1    0
         BEZ      INTEGER2          PUT OUT ZERO AND RETURN
         CW,R1    HUNMIL            HOW BIG IS THE INTEGER
         BL       INTEGER0          GO DO IT
         LI,R5    1
         B        REAL:0            CONVERT TO X.X TYPE
INTEGER0 EQU      %
         LI,R3    3                 # OF CHARS BEFORE COMMA INSERTED
INTEGER1 EQU      %
         LI,R0    0
         DW,R0    =10               CONVERT # TO BASE 10
         AI,R0    '0'               INSERT LEADING BITS FOR EBCDIC
         STB,R0   0,R2              MOVE TO PRINT LINE
         AI,R2    -1                NEXT PRINT LINE INDEX
         CI,R1    0                 WILL THERE BE AN ADDITIONAL VALUE
         BEZ      0,R7              NOPE--> EXIT
         BDR,R3   INTEGER1          CONTINUE TO NEXT CHAR
         LI,R3    ','
         STB,R3   0,R2              MOVE A COMMA
         BDR,R2   INTEGER0          CONTINUE PAST COMMA
INTEGER2 EQU      %
         LI,R3    '0'
         STB,R3   0,R2
         BDR,R2   0,R7              RETURN TO CALLER ALIGNING PBUF INDEX
         PAGE
*
*        PUT OUT AVERAGE OF ALL (MAP+UNMAP) CPU TIME
*        FOR A SPECIFIC FPT CODE
*
FPT:TIME EQU      %
         LCI      5
         PSM,R3   TSTACK            SAVE WORK AREA
         LW,R5    CURCNT            # TIMES FPT SEEN
         LD,R0    MAPCPU
         AD,R0    UNMAPCPU
         LI,R2    BA(PBUF)+COL12
         BAL,R7   REAL
         LCI      5
         PLM,R3   TSTACK
         B        0,R7
         PAGE
*
*        PUT OUT AVERAGE OF ALL (MAP+UNMAP) CPU TIME
*        FOR ALL OF A GROUP OF CAL FPT CODES
*
CAL:TIME EQU      %
         LCI      5
         PSM,R3   TSTACK
         LD,R0    CUM:UNMAP
         LI,R4    0
         LW,R5    CALTCPU
         AD,R0    R4
         LW,R5    CALTCNT
         LI,R2    BA(PBUF)+COL12
         BAL,R7   REAL
         LCI      5
         PLM,R3   TSTACK
         B        0,R7              RETURN
         PAGE
*
*        WE TRAPPED
*
TRAPPED  EQU      %
         M:SNAP   'TRAPPED'
         CAL1,9   5
         PAGE
*
*        READ A COMMAND AND PUT AWAY THE VARIOUS FIELDS
*
SCAN     EQU      %
         LI,R1    0
         STW,R1   SUMEM             CLEAR SUM MODE
         STW,R1   ALL               CLEAR ALL MODE
         STW,R1   QUAL
         LI,R1    1
         STW,R1   FIELD#            SET FIELD# 1 ACTIVE NOW
         LI,R1    80                LENGTH OF INPUT COMMAND
         CAL1,1   READ:REC          READ A COMMAND
         LI,R2    -(DECOTOP-FIELD1)
         LD,R0    ZEROS             GET SOME ZEROS
         STW,R0   FIELD1+(DECOTOP-FIELD1),R2
         BIR,R2   %-1               ZAP ALL VARIABLES
         LI,7     0                 FIELD COUNT
         LI,1     -1                PTR INTO UCBUF
SCAN1    EQU      %
         LI,R2    0
         AI,1     1
         LW,5     FIELDS,7          GET FIELD
         BEZ      ENDCOM            RAN OUT OF FIELDS TO BREAK DOWN
SCAN2    EQU      %
         LB,R3    UCBUF,R1          GET NEXT CHARACTER
         LI,R4    CHRSIZE           # OF SPECIAL CHARACTERS
         CB,3     CHRS,4            PICK OFF SEPARATORS
         BE       SVEC,4
         BDR,4    %-2
         CI,R2    MAXFLD            HAVE ACCUMULATED MAX FIELD
         BGE      %+2               AT MAX
         STB,3    *5,2              STORE IT AWAY
         MTW,0    SPFLAG
         BEZ      %+2
         MTW,-1   SPFLAG
         AI,2     1
SCAN3    EQU      %
         AI,R1    1
         CI,R1    80                AT END OF CARD
         BGE      ENDCOM            YES..ALL STOP
         CI,2     MAXFLD            AT MAX COUNT
         BGE      %+2               AT MAX
         STB,R2   FLDCNTS,R7        STORE FIELD COUNT AWAY
SCAN4    EQU      %
         B        SCAN2
         PAGE
*
*        SPECIAL CHARACTERS (FIELD BREAKERS)
*
CHRS     EQU      %
         DATA,1   X'40'             0
         DATA,1   X'15'             1
         DATA,1   X'D'              2
         DATA,1   ','               3
         DATA,1   '+'               4
         DATA,1   '-'               5
         DATA,1   '*'               6
         DATA,1   ' '               7
         DATA,1   '='               8
         DATA,1   '.'               9
         DATA,1   '#'               10
         DATA,1   '('               11
         DATA,1   '/'               12
         DATA,1   '%'               13
         DATA,1   '%'               14
         DATA,1   ')'               15
CHRSIZE  EQU      BA(%)-BA(CHRS)
         BOUND    4
*
SVEC     EQU      %
         B        SEPR              0
         B        ENDCOM            1 NEW LINE
         B        ENDCOM            2 NEW LINE
         B        SEPR              3 COMMA
         B        SEPR              4 PLUS SIGN
         B        SEPR              5 DASH
         B        SEPR              6 ASTERISK
         B        BLNK              7 BLANK
         B        SEPR              8 EQUAL SIGN
         B        SEPR              9 DOT
         B        SEPR              10 NUMBER SIGN
         B        SEPR              11 LEFT PAREN
         B        SEPR              12 SLASH
         B        SEPR              13 PER CENT SIGN
         B        SEPR              14 DOLLAR SIGN
         B        SEPR              15 RIGHT PAREN
*
*
         BOUND    8
FLDSTOP  DATA     13,64             ((( NEW LINE AND BLANK CHAR )))
*
         PAGE
*
*        ACCOUNT FOR BLANKS IN INCOMING FIELD
*
BLNK     EQU      %
         MTW,0    SPFLAG            IS FIRST BLANK IN FIELD
         BNEZ     SCAN3             CONSEC BLANKS DONT MATTER
         MTW,1    SPFLAG            SET FIRST TIME BLANK HIT FLAG
SEPR     EQU      %
         AI,R7    1                 BUMP FIELD # TO NEXT POSITION
         B        SCAN1             SPLIT TO NEW FIELD
         PAGE
*
*        CLEAR WORKING ACCUMULATORS
*
CLEAR    EQU      %
         LW,R0    SUMEM             SUMMING ALL RECORDS IN THE FILE
         BNEZ     0,R1              YES-> EXIT TO CALLER
         LI,R7    -(MAST#-CAL11CNT+1)
         LI,R6    0
         STW,R6   CAL11CNT+(MAST#-CAL11CNT+1),R7
         BIR,R7   %-1               CLEAR WORKING SPACE
         B        0,R1              AND RETURN
         PAGE
*
*        END OF INPUT - GO TO COMMAND ADDRESS
*
ENDCOM   EQU      %
         LI,R1    0
         STW,R1   T1
         STW,R1   T2                CLEAR TIME FILTERS
         STW,R1   HIT1              CLEAR FOUNT T1
         LH,R1    FIELD1            WAS FIRST FIELD A DELIMITER....
         BEZ      NOTCOM
         LI,2     COMSIZE
         CH,1     COMMANDS,2
         BE       SCREEN,R2         VECTOR IF FOUNT
         BDR,2    %-2
NOTCOM   EQU      %
         CAL1,1   BADCOMFPT
         B        SCAN              GET A NEW COMMAND THEN
*
COMMANDS EQU      %
         DATA,2   0
         DATA,2   'SU'              SUM UP ALL RECORDS IN FILE
         DATA,2   'NE'              OPEN NEXT FILE LOOKING FOR CAL DATA
         DATA,2   'RE'              RESTORE PREVIOUS HISTORY FILE
         DATA,2   'WR'              WRITE OUT HISTORY FILE
         DATA,2   'EN'              END COMMAND
         DATA,2   'PR'              PRINT (SUPER CLOSE)
         DATA,2   'LI'              LIST ALL RECORDS IN THE FILE
COMSIZE  EQU      HA(%)-HA(COMMANDS)-1
*
         BOUND    4
*
SCREEN   EQU      %
         B        NOTCOM     * 0 - NOT A COMMAND
         B        SUMMARY    * 1 - READ AND SUM ALL DATA IN FILE
         B        NEXTFILE   * 2 - OPEN NEXT DATA FILE
         B        HISTORY    * 3 - RESTORE THE HISTORY FILE
         B        CRE:GO     * 4 - WRITE THE HISTORY FILE
         B        EXIT       * 5 - EXIT TO TEL/CCI
         B        PRINT      * 6 - PRINT SYMBIONT FILE
         B        LIST       * 7 - LIST ALL RECORDS IN DATA FILE
         PAGE
*
*        RESTORE THE CAL HISTORY FILE AND REPORT ON DATA IN IT
*
HISTORY  EQU      %
         LW,R0    HIST:IN           IS HISTORY INCORE NOW
         BNEZ     %+2               YES-> DONT HAVE TO READ IT BACK
         BAL,R7   GETHISTORY        OPEN FILE / READ IT IN
         LCI      10
         LM,R0    BLANK             GET SOME BLANKS
         STM,R0   TD                CLEAR THE PRINT LINE HEADER
         M:TIME   TD                PUT TODAYS TIME INTO HEADER
         CAL1,1   HEADFPT
         CAL1,1   COUNTFPT
         B        RES:GO            MOVE THE DATA AND PRODUCE A REPORT
         PAGE
*
*        SET UP TO PRINT EVERY RECORD IN FILE WITH INDIVIDUAL
*        SUMMARIES FOR EACH RECORD
*
LIST     EQU      %
         LI,R0    0
         STW,R0   SUMEM             NOT A SUMMARY PASS THO
         B        SUMMARY0          MERGE W/COMMON PATH
PROMPTX  GEN,8,24 X'2C','<'
*
READ:REC GEN,8,24 16,M:SI
         GEN,4,28 15,16
         DATA     EXIT,EXIT
         DATA     UCBUF             BUFFER FOR COMMAND STRINGS
         PZE      *R1               LENGTH OF STRING TO GET IN R1
*
*
         PAGE
*
*        SET UP FOR SUMMARY
*
SUMMARY  EQU      %
         MTW,1    SUMEM             TURN ON 'SUM' MODE
SUMMARY0 EQU      %
         LI,R1    1                 SET FIELD#1
         STW,R1   FIELD#            ACTIVE
         LW,R2    FIELD2            ANY SUB-OPTION
         BNEZ     FROMCHK           YUP
         MTW,1    ALL               SET FLAG
         B        RD:DATA           OPEN SI AND REPORT
         PAGE
*
*        SEE IF TIME FILTERS ESTABLISHED
*
*        POSSIBLE COMMANDS ARE;
*
*        <LIST FROM XXXX
*        <SUM  FROM XXXX
*        <LIST (OR SUM) FROM XXXX TO ZZZZ
*        <LIST (OR SUM) TO ZZZZ
*        <LIST (OR SUM)
*
FROMCHK  EQU      %
         SLS,R2   -16
         CI,R2    'FR'              SAYS 'FROM'
         BNE      TOCHK             NOPE
         MTW,1    FIELD#            ADVANCE FIELD POINTER IF 'FROM' SET
         LW,R1    FIELD#            GET ACTIVE FIELD#
         LW,R5    FIELDS,R1         PICK UP POINTER
         LW,R2    0,R5              GET TIME
         LH,R3    R2
         AND,R3   XFFFF
         CLM,R3   NUMCHK            IS HH FIELD
         BCS,9    TOCHK             NO
         STW,R2   T1                SET STARTING TIME AWAY
         MTW,1    FIELD#            STEP OVER FIRST TIME
TOCHK    EQU      %
         LW,R1    FIELD#            GET FIELD # THATS ACTIVE
         LW,R5    FIELDS,R1         GET ADDRS
         LH,R2    *R5               GET FIRST TWO BYTES THERE
         AND,R2   XFFFF             SCREEN 16 BITS WORTH
         CI,R2    'TO'              DID HE SAY 'TO'
         BNE      %+2               NOPE
         MTW,1    FIELD#            YES-> STEP OVER THAT FIELD THEN
         MTW,0    SUMEM             IN SUM MODE
         BEZ      %+2               NOPE-> LIST SO DONT SET ALL FLAG
         MTW,1    ALL               SET TO DO 'ALL' BETWEEN TIMES
         LW,R1    FIELD#            GET NEXT FIELD POINTER
         LW,R5    FIELDS,R1         PICK UP ADDRESS
         LW,R2    0,R5              GET VALUE THERE
         BEZ      RD:DATA           GO-> NO STOP GIVEN (LIST MODE)
         LH,R3    R2
         AND,R3   XFFFF
         CLM,R3   NUMCHK            IS HH FIELD
         BCS,9    RD:DATA           NO
         STW,R2   T2                SET ENDING TIME AWAY
         B        RD:DATA           AND GO OPEN FILE
         PAGE
*
*        OPEN FILES LOOKING FOR CAL DATA FILES
*
NEXTFILE EQU      %
         LH,R0    M:EI
         CI,R0    32                IS M:EI OPEN..
         BAZ      %+2               NOPE
         CAL1,1   CLSSIFPT          IF SO - CLOSE ITUP
         CAL1,1   NEXFILES          OPEN TO NEXT FILES
         LW,R6    6+M:EI            GET FLP FROM DCB
         AND,R6   =X'1FFFF'
         LW,R7    1,R6              GET WORD ONE OF FILE NAME
         CLM,R7   DATANAMES         DOES NAME FIT SCHEME
         BCS,9    NEXTFILE          NO-> DO NEXT ONE
         LW,R7    2,R6              GET WORD TWO
         CLM,R7   DATANAME2         CHECK IT
         BCS,9    NEXTFILE          BAD
         LW,R15   R6                POINTER TO VLP'S
         AI,R15   1                 POINT TO FILE NAME
         CAL1,2   PRNT              PRINT THE FILE NAME
         LI,R1    SCAN              SET RETURN
         B        CLEAR             CLEAR WORKING COUNTERS NOW
         BOUND    8
DATANAMES DATA    X'09F0F0F0'
          DATA    X'09F9F9F9'
*
DATANAME2 DATA    X'7AF0F07A'
          DATA    X'7AF2F37A'
*
*
         PAGE
*
*        ABNORMAL FROM OPEN NEXT FILE
*
NEXCHK   EQU      %
         LB,R3    R10               GET I/O ERROR CODE
         CI,R3    X'2E'             ATTEMPT TO OPEN AND IS OPEN
         BE       CLS:SI            YES
         CI,R3    X'02'             END OF ALL FILES
         BE       END:SI            YS
         CI,R3    X'08'             HIT SYNON FILE
         BE       CLS:SI            YES
         CI,R3    X'14'             WONT LET US OPEN IT
         BE       CLS:SI            YES-> GO TO NEXT FILE THEN
         CI,R3    X'03'             FILE DOESNT EXITST CODE
         BE       CLS:SI            YES--> DO NEXT ONE
         M:SNAP   'NEXTERR'         HUM--> PROBLEM HERE
         CAL1,9   3
*
CLS:SI   EQU      %
         LH,R0    M:EI
         CI,R0    32                IS DCB OPEN NOW
         BAZ      %+2               NOPE-> HOP
         CAL1,1   CLSSIFPT          CLOSE M:EI UP THEN
         B        NEXTFILE          AND DO NEXT FILE
*
END:SI   EQU      %
         LI,R15   ENDFILES
         CAL1,2   PRNT
         B        SCAN
*
ENDFILES TEXTC    '** END OF ALL FILES IN ACCOUNT REACHED'
*
         PAGE
*
*        MOVE HISTORY FILE CONTENTS INTO WORKING COUNTERS
*
RES:GO   EQU      %
         BAL,R1   CLEAR             CLEAR WORKING COUNTERS
         LW,R0    PSLV#
         STW,R0   SLV#
         LW,R0    PMAST#
         STW,R0   MAST#
         LD,R0    PCUM:MON
         STD,R0   CUM:MON
         LD,R0    PCUM:SAMP
         STD,R0   CUM:SAMP
         LD,R0    3Z
         STD,R0   ALL:UNMAP
         STD,R0   CUM:UNMAP
         LI,R5    9                 NINE CAL TYPES
MOVE0    EQU      %
         LI,R4    0
MOVE1    EQU      %
         LW,R10   FPTS,R5
         BEZ      MOVE2             NONE FOR THIS ONE
         LB,R3    *R10,R4           GET INDEX
         LW,R2    PCNTS,R5          POINTER TO BUCKET
         LW,R1    *R2,R3            GET VALUE
         LW,R2    CALCNT,R5         POINTER TO NEW BUCKET
         STW,R1   *R2,R3            STORE PEAK VALUE
         AWM,R1   CUMCNT
         AWM,R1   CUMCNT,R5
*
*
         LW,R2    PCALCPU,R5
         LW,R1    *R2,R3
         LW,R2    CALCPU,R5
         STW,R1   *R2,R3
         AWM,R1   CUMCPU
*
*
         LW,R2    PCALIO,R5
         LW,R1    *R2,R3
         LW,R2    CALIO,R5
         STW,R1   *R2,R3
         AWM,R1   CUMIO
*
*
         LW,R2    PCALUNT,R5
         LW,R1    *R2,R3            GET UNMAPPED MILS
         LW,R2    CALUNT,R5
         STW,R1   *R2,R3            AND STORE
*
*
         AI,R4    1
         CB,R4    FPTCNTS,R5
         BL       MOVE1             MORE TO GO YET
MOVE2    EQU      %
         BDR,R5   MOVE0             FINISH ALL CAL TYPES
*
         LI,R4    0
MOVE3    EQU      %
         LB,R3    CAL11FPT,R4
         LD,R0    PCAL11MISC,R3
         STD,R0   CAL11MISC,R3
MOVE4    EQU      %
         AI,R4    1
         CI,R4    #CAL11FPT         AT TOP YET
         BL       MOVE3             FINISH UP
         MTW,1    SUMEM             THIS IS A SUMMARY PASS
         BAL,R7   REPORT0           PUT OUT THE REPORT NOW
         BAL,R1   CLEAR             CLEAR ALL WORKING VARIABLES
         B        SCAN              AND THEN ASK FOR NEXT COMMAND
*
         PAGE
*
*        ERROR/ABNORMAL FROM THE CAL HISTORY FILE
*
OPNGOABN EQU      %
         STW,R8   GORETURN          SAVE LINK
         LB,R3    R10               MOVE ABN CODE
         CI,R3    3                 IS 'FILE DOESNT EXIST' CODE
         BNE      MAKEKEY           NOPE
CRE:GO   EQU      %
         LH,R0    M:GO
         CI,R0    32
         BANZ     %+2               IS OPEN NOW...
         CAL1,1   OPNGOOUTFPT       OPEN IT IN 'OUTPUT' MODE
         CAL1,1   WTGOFPT           WRITE IT
         CAL1,1   CLSGOFPT          CLOSE IT
         LI,R8    0
         STW,R8   HIST:IN           CLEAR DAT FLAG
         LW,R8    GORETURN
         AND,R8   =X'1FFFF'
         AI,R8    -1
         B        *R8               GO EXECUTE THE OPEN AGAIN
         PAGE
*
*        OPEN HISTORY FILE AND READ IT BACK
*
GETHISTORY EQU    %
         MTW,0    HIST:IN           IS INCORE NOW
         BNEZ     0,R7              YES
         CAL1,1   OPNGOFPT          OPEN IT IN UPDATE MODE
         CAL1,1   RDGOFPT           READ IT IN
         CAL1,1   GOBOF             POSITION IT AT BOF
         MTW,1    HIST:IN           SET FLAG SAYS HISTORY DATA INCORE
         B        0,R7              RETURN TO CALLER
         PAGE
*
*        GOT ABNORMAL READING M:GO FILE
*
RDGOABN  EQU      %
         LI,R15   RDGOMSG
         CAL1,2   PRNT
         M:SNAP   'GOABN'
         CAL1,9   3
RDGOMSG  TEXTC    '** ERROR/ABNORMAL READING THE CAL HISTORY FILE'
         PAGE
*
*        PRINT COMMAND
*
PRINT    EQU      %
         CAL1,9   6                 SUPER CLOSE THE PRINTER FILE
         B        SCAN              GO GET ANOTHER COMMAND
*
SUBOP    EQU      %
         DATA,2   '0'               0
         DATA,2   'FR'              1 FROM
         DATA,2   'TO'              2 TO
#SUBOPS  EQU      HA(%)-HA(SUBOP)-1
         BOUND    4
*
         PAGE
*
*        EXIT TO TEL/CCI
*
EXIT     EQU      %
         LH,R0    M:EI
         CI,R0    32                IS M:EI OPEN NOW
         BAZ      %+2               NOPE
         CAL1,1   CLSSIFPT          CLOSE M:EI DCB
         CAL1,1   CLSLOFPT          CLOSE M:LO DCB
         CAL1,1   GOBOF             BACK TO BOF IN FILE
         CAL1,1   WTGOFPT           WRITE OUT RECORD
         CAL1,1   CLSGOFPT          AND CLOSE IT
         CAL1,9   1                 AND LEAVE
         PAGE
*
*        PATCH AREA
*
         DEF      PATCHS
PATCHS   DO1      32
         DATA     0
         PAGE
*
BADCOMFPT M:WRITE,L  M:LL,(BUF,NOCOMSG),(SIZE,COMSGIZ)
POS:FILE M:PFIL,L M:EI,(BOF)
*
OPNSIFPT  M:OPEN,L M:EI,IN,(ABN,OPNSIABN)
OPNGOFPT  M:OPEN,L M:GO,INOUT,(ABN,OPNGOABN),(FILE,'CALHISTORY')
OPNGOOUTFPT    M:OPEN,L M:GO,OUT,(SAVE),(FILE,'CALHISTORY')
RDTIMEFPT M:READ,L M:EI,(BUF,TIMEBUF),(ABN,RDSIABN),(SIZE,4*7)
RDSIFPT  M:READ,L M:EI,(BUF,IBUF),(ABN,RDSIABN),(SIZE,1024*4),(WAIT)
RDGOFPT  M:READ,L M:GO,(BUF,HISTDATA),(ABN,RDGOABN),(SIZE,HISTSIZE*4),;
                        (WAIT),(ERR,RDGOABN)
CLSGOFPT  M:CLOSE,L M:GO,SAVE
CLSSIFPT  M:CLOSE,L M:EI
CLSLOFPT M:CLOSE,L M:LO,SAVE
EJECTFPT M:DEVICE,L M:LO,PAGE
NLINESFPT M:DEVICE,L M:LO,(NLINES)
WTPBUFFPT M:WRITE,L M:LO,(BUF,PBUF),(SIZE,PBUFSIZE)
WTDOFPT   M:WRITE,L M:DO,(BUF,PBUF),(SIZE,PBUFSIZE)
WTGOFPT  M:WRITE,L M:GO,(BUF,HISTDATA),(SIZE,HISTSIZE*4),(WAIT)
WTHD0FPT M:WRITE,L M:LO,(BUF,HEAD0),(SIZE,PBUFSIZE)
WTHD1FPT M:WRITE,L M:LO,(BUF,HEAD1),(SIZE,PBUFSIZE)
WTHD2FPT M:WRITE,L M:LO,(BUF,HEAD2A),(SIZE,PBUFSIZE)
WTHD3FPT M:WRITE,L M:LO,(BUF,HEAD2B),(SIZE,PBUFSIZE)
WTHD4FPT M:WRITE,L M:LO,(BUF,TOTAL2),(SIZE,PBUFSIZE)
WTTOTFPT M:WRITE,L M:LO,(BUF,TOTAL),(SIZE,PBUFSIZE)
TOT1FPT  M:WRITE,L  M:LO,(BUF,TOTAL3),(SIZE,PBUFSIZE)
HEADFPT  M:DEVICE,L M:LO,(HEADER,1,HEADER)
COUNTFPT M:DEVICE,L M:LO,(COUNT,105)
TRAPFPT  M:TRAP,L TRAPPED,(TRAP,FX)
GOBOF    M:PFIL,L M:GO,(BOF)
WAITFPT  M:WAIT,L 1
SPACE    M:WRITE,L   M:LO,(BUF,BLANK),(SIZE,1)
NEXFILES M:OPEN,L M:EI,(NXTF),(ABN,NEXCHK),(ERR,NEXCHK),(IN)
         PAGE
CLEARPBUF GEN,8,24 PBUFSIZE,BA(PBUF)
BLANK    EQU      %
         DO1      10
         TEXT     '    '
XFFFF    DATA     X'FFFF'
         BOUND    8
*
NUMCHK   EQU      %
         DATA     X'F0F0'
         DATA     X'F2F3'
*
MAXNSCALE EQU     %
         DATA     0,X'3B9ACA00'     0 THRU 1,000,000,000
*
P10      RES      0
         DATA     1
         DATA     10
         DATA     100
         DATA     1000
SCL      DATA     10000
         DATA     100000
ONEMIL   EQU      %
         DATA     1000000
TENMIL   EQU      %
         DATA     10000000
HUNMIL   EQU      %
         DATA     100000000
         DATA     1000000000
         PAGE
*
*        COLUMN POSITIONS RIGHT JUSTIFIED
*
COL1     EQU      20                LENGTH 10 BYTES
COL2     EQU      27                6 BYTES
COL3     EQU      38                10
COL4     EQU      45                6
COL5     EQU      52                6
COL6     EQU      61                8 BYTES
COL7     EQU      72                10
COL8     EQU      79                6
COL9     EQU      86                6
COL10    EQU      97                10
COL11    EQU      108               10
COL12    EQU      120               11 BYTES LONG...
*
*
PBUFSIZE EQU      132
IBUFSIZE EQU      512
*
SAMPX    EQU      10
TOTUNMAPX EQU     25
AVGCMINX EQU      40
AVGCHRX  EQU      55
CNTSLVX  EQU      70
CNTMASTX EQU      85
BYTCOL1  EQU      100
*
         PAGE
*
*        COLUMN HEADINGS
*
HEAD0    EQU      %
         HEADING  COL1,'CAL',;
                  COL2,'% OF',;
                  COL3,'MAP CPU',;
                  COL4,'% CAL',;
                  COL5,'% ALL',;
                  COL6,'MAP CPU',;
                  COL7,'I/O',;
                  COL8,'% CAL',;
                  COL9,'I/O',;
                  COL10,'AVG ARS',;
                  COL11,'UNMAP CPU',;
                  COL12,'OVERALL CPU'
*
HEAD1    EQU      %
         HEADING  COL1,'COUNT',;
                  COL2,'CALS',;
                  COL3,'DURING CAL',;
                  COL4,'TIME',;
                  COL5,'TIME',;
                  COL6,'PER CAL',;
                  COL7,'COUNT',;
                  COL8,'I/O',;
                  COL9,' /CAL',;
                  COL10,'PER CAL',;
                  COL11,'DURING CAL',;
                  COL12,'AVG PER CAL'
*
TOTAL    EQU      %
TOTAL3   EQU      %
         HEADING  COL1,'----------',;
                  COL2,'------',;
                  COL3,'----------',;
                  COL4,'------',;
                  COL5,'------',;
                  COL6,'--------',;
                  COL7,'----------',;
                  COL8,'------',;
                  COL9,'------',;
                  COL10,'----------',;
                  COL11,'----------',;
                  COL12,'-----------'
*
TOTAL2   HEADING  SAMPX,'----------',;
                  TOTUNMAPX,'----------',;
                  AVGCMINX,'----------',;
                  AVGCHRX,'----------',;
                  CNTSLVX,'----------',;
                  CNTMASTX,'----------'
*
HEAD2A   HEADING  SAMPX,'SAMPLE',;
                  TOTUNMAPX,'UNMAPPED',;
                  AVGCMINX,'CAL RATE',;
                  AVGCHRX,'CAL RATE',;
                  CNTSLVX,'SLAVE CPUS',;
                  CNTMASTX,'MASTER CPU'
*
HEAD2B   HEADING  SAMPX,'TIME',;
                  TOTUNMAPX,'CPU/CAL',;
                  AVGCMINX,'P/MIN',;
                  AVGCHRX,'P/HOUR',;
                  CNTSLVX,'CAL CNT',;
                  CNTMASTX,'CAL CNT'
         PAGE
*
*        COMMAND BUCKETS..ETC...
*
FIELDS   DATA     FIELD1
         DATA     FIELD2
         DATA     FIELD3
         DATA     FIELD4
         DATA     FIELD5
         DATA     FIELD6
         DATA     FIELD7
         DATA     FIELD8
         DATA     0
*
NOCOMSG TEXT      '*** UNRECOGNIZED COMMAND'
COMSGIZ  EQU      BA(%)-BA(NOCOMSG)
*
         BOUND    8
3Z       EQU      %
ZEROS    DO1      16
         DATA     0
*
         PAGE
TEXT     CSECT    1
         USECT    EDITPROC
         BOUND    8
CAL11SID RES      0
         SIDING   'REW'
         SIDING   'WEOF'
         SIDING   'CVOL'
         SIDING   'DEV PAGE'
         SIDING   'DEV VFC'
         SIDING   'SETDCB'
         SIDING   'DEV DRC'
         SIDING   'DELREC'
         SIDING   'MOVE'
         SIDING   'TFILE'
         SIDING   'READ FILE'
         SIDING   'READ LBL TP'
         SIDING   'READ DEV'
         SIDING   'READ COC'
         SIDING   'READ SYMB'
         SIDING   'WRT FILE'
         SIDING   'WRT LBL TP'
         SIDING   'WRT DEV'
         SIDING   'WRT COC'
         SIDING   'WRT SYMB'
         SIDING   'TRUNC'
         SIDING   'OPN FILE'
         SIDING   'OPN LBL TP'
         SIDING   'OPN DEV'
         SIDING   'OPN COC'
         SIDING   'OPN SYMB'
         SIDING   'OPN TST-FIL'
         SIDING   'CLS FILE'
         SIDING   'CLS LBL TP'
         SIDING   'CLS DEV'
         SIDING   'CLS COC'
         SIDING   'CLS SYMB'
         SIDING   'RD TP LINE'
         SIDING   'WRT TP LINE'
         SIDING   'OPN TP LINE'
         SIDING   'CLS TP LINE'
         SIDING   'RD FILE CON-0'
         SIDING   'RD FILE CON-1'
         SIDING   'RD FILE KEYED'
         SIDING   'RD FILE RANDOM'
         SIDING   'WRIT FIL CON-0'
         SIDING   'WRIT FIL CON-1'
         SIDING   'WRIT FIL KEYED'
         SIDING   'WRIT FIL RANDOM'
         SIDING   'POS-FILE'
         SIDING   'POS. RECORD'
         SIDING   'DEV LINES'
         SIDING   'DEV FORM'
         SIDING   'DEV SIZE'
         SIDING   'DEV DATA'
         SIDING   'DEV CNT'
         SIDING   'DEV SPACE'
         SIDING   'DEV HEADER'
         SIDING   'DEV SEQ'
         SIDING   'DEV TAB'
         SIDING   'CHECK'
         SIDING   'DEV NLINES'
         SIDING   'DEV CORRES'
         SIDING   'PC'
         SIDING   'RAMR'
         SIDING   'WAMR'
         SIDING   'JOB'
CAL12SID RES      0
         SIDING   'MESSAGE'
         SIDING   'PRINT'
         SIDING   'TYPE'
         SIDING   'KEYIN'
         SIDING   'ENQ'
         SIDING   'DEQ'
         SIDING   'MERC'
CAL13SID RES      0
         SIDING   'SNAP'
         SIDING   'SNAPC'
         SIDING   'IF'
         SIDING   'AND'
         SIDING   'OR'
         SIDING   'COUNT'
CAL14SID RES      0
         SIDING   'SAVE'
         SIDING   'GET'
         SIDING   'LIBRARY ASSO.'
         SIDING   'LIBRARY DASSO.'
         SIDING   'R/SET FLAGS'
CAL16SID RES      0
         SIDING   'READ ERR-LOG'
         SIDING   'WRT ERR-LOG'
         SIDING   'MAP'             2
         SIDING   'SIO'             3
         SIDING   'LOCK'            4
         SIDING   'DOPEN'           5
         SIDING   'GJOB'            6
         SIDING   'DCLOSE'          7
         SIDING   'SYS'             8
         SIDING   'BLIST'           9
         SIDING   'DMOD'            10
CAL17SID RES      0
         SIDING   'GETLINE'
         SIDING   'RLSLINE'
         SIDING   'BUFSTAT'
         SIDING   'PURGE'
         SIDING   'MDFLST'
         SIDING   'ECBCHECK'
         SIDING   'QUEUE UNLOCK'
         SIDING   'QUEUE DEF LIST'
         SIDING   'QUEUE PUT'
         SIDING   'QUEUE GET'
         SIDING   'QUEUE STATS'
         SIDING   'QUEUE PURGE'
         SIDING   'QUEUE LOCK'
         SIDING   'GETID'
CAL18SID RES      0
         SIDING   'SEGLD'
         SIDING   'LINK'
         SIDING   'LDTRC'
         SIDING   'GVP'
         SIDING   'FVP'
         SIDING   'CT/TS/CAC'
         SIDING   'CVM'
         SIDING   'GP'
         SIDING   'FP'
         SIDING   'SMPRT'
         SIDING   'GL'
         SIDING   'GCP'
         SIDING   'FCP'
         SIDING   'INT'
         SIDING   'WAIT'
         SIDING   'TIME'
         SIDING   'STIMER'
         SIDING   'TTIMER'
         SIDING   'DISPLAY'
         SIDING   'TRAP'
         SIDING   'REL. RESOURCE'
         SIDING   'REL. RESOURCE'
         SIDING   'LDEV'
         SIDING   'GDDL'
         SIDING   'GPP'
CAL19SID RES      0
         SIDING   'EXIT'            FPT=1
         SIDING   'ERR'             FPT=2
         SIDING   'XXX'             FPT=3
         SIDING   'STRAP'           FPT=4
         SIDING   'TRTN'            FPT=5
         SIDING   'SUPCLS'          FPT=6
         SIDING   'INTRTN'          FPT=X'A'
TRAP     SIDING   'TRAPPED @        '''
GRANDTOT SIDING   'GRAND TOTALS'
CALTOT   SIDING   'CAL TOTALS:'
CI1      SIDING   '   CAL1,1 REPORTS '
CI2      SIDING   '   CAL1,2 REPORTS '
CI3      SIDING   '   CAL1,3 REPORTS '
CI4      SIDING   '   CAL1,4 REPORTS '
CI6      SIDING   '   CAL1,6 REPORTS '
CI7      SIDING   '   CAL1,7 REPORTS '
CI8      SIDING   '   CAL1,8 REPORTS '
CI9      SIDING   '   CAL1,9 REPORTS '
CAL11FPT RES      0
         DATA,1   1,2,3,4,5,6,X'B',X'D',X'E',X'F',X'30',X'31',X'32',;
 X'33',X'34',X'35',X'36',X'37',X'38',X'39',X'12',X'3A',X'3B',X'3C',;
 X'3D',X'3E',X'44',X'3F',X'40',X'41',X'42',X'43',;
                  X'45',X'46',X'47',X'48',X'49',X'4A',X'4B',X'4C',;
                    X'4D',X'4E',X'4F',X'50',;
 X'1C',X'1D',X'20',X'21',X'22',X'23',X'24',X'25',X'26',X'27',;
 X'28',X'29',X'2A',X'2B',X'2C',X'2D',X'2E',X'2F'
#CAL11FPT EQU     BA(%)-BA(CAL11FPT)
         BOUND    4
CAL12FPT RES      0
         DATA,1   0,1,2,4,8,9,X'10'
#CAL12FPT EQU     BA(%)-BA(CAL12FPT)
         BOUND    4
CAL13FPT RES      0
         DATA,1   0,1,2,3,4,5
#CAL13FPT EQU     BA(%)-BA(CAL13FPT)
         BOUND    4
CAL14FPT RES      0
         DATA,1   2,3,4,5,6
#CAL14FPT EQU     BA(%)-BA(CAL14FPT)
         BOUND    4
CAL16FPT RES      0
         DATA,1   0,1,2,3,4,5,6,7,8,9,10
#CAL16FPT EQU     BA(%)-BA(CAL16FPT)
         BOUND    4
CAL17FPT RES      0
         DATA,1   0,1,2,3,4,5,6,7,8,9,X'A',X'B',X'C',X'D'
#CAL17FPT EQU     BA(%)-BA(CAL17FPT)
         BOUND    4
CAL18FPT RES      0
         DATA,1   1,2,3,4,5,6,7,8,9,X'A',X'B',X'C',X'D',;
                  X'E',X'F',X'10',X'11',X'12',X'13',X'14',X'15',;
                  X'19',X'1A',X'1B',X'1C'
#CAL18FPT EQU     BA(%)-BA(CAL18FPT)
         BOUND    4
CAL19FPT RES      0
         DATA,1   1,2,3,4,5,6,10
#CAL19FPT EQU     BA(%)-BA(CAL19FPT)
         BOUND    4
HEX      TEXT     '0123456789ABCDEF'
         PAGE
*
*        DATA SECTION
*
EDITDATA CSECT    0
*
*
         DEF      EDITDATA
SPFLAG   DATA     0
FIELD#   DATA     0
         BOUND    8
FIELD1   DATA     0,0
FIELD2   DATA     0,0
FIELD3   DATA     0,0
FIELD4   DATA     0,0
FIELD5   DATA     0,0
FIELD6   DATA     0,0
FIELD7   DATA     0,0
FIELD8   DATA     0,0
*
MAXFLD   EQU      8                 MAX LENGTH OF ANY FIELD
FLDCNTS  EQU      %
         DO1      18
         DATA,1   0
         BOUND    4
*
*        FOLLOWING SYMBOL MUST BE PHYSICALLY LAST BEYOND THESE
*        COMMAND DECODING TABLES
*
         BOUND    4
DECOTOP  EQU      %
*
*
*
*
IBUF     RES      1024
*
*
         BOUND    8
TSTACK   DATA     %+1
         GEN,16,16 16,1
         RES      16
*
*
PBUF     EQU      %
         DO1      33
         TEXT     '    '
*
*
ALL      DATA     0
CURCNT   DATA     0
CURCPU   DATA     0
CURIO    DATA     0
CURMISC  DATA     0
KEY      DATA     0
TIMEBUF  RES      10
HEADER   GEN,8,24 HEADSIZE*4,'   '
TD       EQU      %
         DO1      4
         TEXT     '    '
         DO1      7
         DATA     '    '
         TEXT     ' CAL STATISTICS'
         DO1      4
         TEXT     ' '
SITEID   TEXT     'AFC560  '
         TEXT     '  '
HEADSIZE EQU      %-HEADER-1
*
UCBUF    RES      20
REP      DATA     0
         PAGE
*
*
HISTDATA EQU      %
*
*        FOLLOWING TABLES ARE FOR THE HISTORY FILE
*
PCAL11CNT DO1    2+#CAL11S
         DATA     0
PCAL12CNT DO1    2+#CAL12S
         DATA     0
PCAL13CNT DO1    2+#CAL13S
         DATA     0
PCAL14CNT DO1    2+#CAL14S
         DATA     0
PCAL16CNT DO1    2+#CAL16S
         DATA     0
PCAL17CNT DO1    2+#CAL17S
         DATA     0
PCAL18CNT DO1    2+#CAL18S
         DATA     0
PCAL19CNT DO1    2+#CAL19S
         DATA     0
PCAL11CPU DO1    2+#CAL11S
         DATA     0
PCAL12CPU DO1    2+#CAL12S
         DATA     0
PCAL13CPU DO1    2+#CAL13S
         DATA     0
PCAL14CPU DO1    2+#CAL14S
         DATA     0
PCAL16CPU DO1    2+#CAL16S
         DATA     0
PCAL17CPU DO1    2+#CAL17S
         DATA     0
PCAL18CPU DO1    2+#CAL18S
         DATA     0
PCAL19CPU DO1    2+#CAL19S
         DATA     0
PCAL11IO DO1     2+#CAL11S
         DATA     0
PCAL12IO DO1     2+#CAL12S
         DATA     0
PCAL13IO DO1     2+#CAL13S
         DATA     0
PCAL14IO DO1     2+#CAL14S
         DATA     0
PCAL16IO DO1     2+#CAL16S
         DATA     0
PCAL17IO DO1     2+#CAL17S
         DATA     0
PCAL18IO DO1     2+#CAL18S
         DATA     0
PCAL19IO DO1     2+#CAL19S
         DATA     0
PCAL11UNT EQU     %
         DO1      #CAL11S+2
         DATA     0
*
PCAL12UNT EQU     %
         DO1      #CAL12S+2
         DATA     0
*
PCAL13UNT EQU     %
         DO1      #CAL13S
         DATA     0
*
PCAL14UNT EQU     %
         DO1      #CAL14S+1
         DATA     0
*
PCAL16UNT EQU     %
         DO1      #CAL16S+1
         DATA     0
*
PCAL17UNT EQU     %
         DO1      #CAL17S+1
         DATA     0
*
PCAL18UNT EQU     %
         DO1      #CAL18S+1
         DATA     0
*
PCAL19UNT EQU     %
         DO1      #CAL19S+1
         DATA     0
*
         BOUND    8
PCAL11MISC DO1   2+#CAL11S
         DATA,8   0
*
         DATA     0,0,0,0
PCUM:SAMP DATA    0,0
PCUM:MON  DATA    0,0
*
ALL:UNMAP DATA    0,0
*
*
PSLV#    DATA     0
PMAST#   DATA     0
         DATA     0,0,0,0
HISTSIZE EQU      %-HISTDATA+2
         DATA     0,0,0
         PAGE
*
*        FOLLOWING CELLS ARE FOR RUNNING TOTALS
*
CAL11CNT DO1     2+#CAL11S
         DATA     0
CAL12CNT DO1     2+#CAL12S
         DATA     0
CAL13CNT DO1     2+#CAL13S
         DATA     0
CAL14CNT DO1     2+#CAL14S
         DATA     0
CAL16CNT DO1     2+#CAL16S
         DATA     0
CAL17CNT DO1     2+#CAL17S
         DATA     0
CAL18CNT DO1     2+#CAL18S
         DATA     0
CAL19CNT DO1     2+#CAL19S
         DATA     0
CAL11CPU DO1     2+#CAL11S
         DATA     0
CAL12CPU DO1     2+#CAL12S
         DATA     0
CAL13CPU DO1     2+#CAL13S
         DATA     0
CAL14CPU DO1     2+#CAL14S
         DATA     0
CAL16CPU DO1     2+#CAL16S
         DATA     0
CAL17CPU DO1     2+#CAL17S
         DATA     0
CAL18CPU DO1     2+#CAL18S
         DATA     0
CAL19CPU DO1     2+#CAL19S
         DATA     0
CAL11IO  DO1     2+#CAL11S
         DATA     0
CAL12IO  DO1     2+#CAL12S
         DATA     0
CAL13IO  DO1     2+#CAL13S
         DATA     0
CAL14IO  DO1     2+#CAL14S
         DATA     0
CAL16IO  DO1     2+#CAL16S
         DATA     0
CAL17IO  DO1     2+#CAL17S
         DATA     0
CAL18IO  DO1     2+#CAL18S
         DATA     0
CAL19IO  DO1     2+#CAL19S
         DATA     0
*
CAL11UNT EQU      %
         DO1      #CAL11S+1
         DATA     0
*
CAL12UNT EQU      %
         DO1      #CAL12S+1
         DATA     0
*
CAL13UNT EQU      %
         DO1      #CAL13S+1
         DATA     0
*
CAL14UNT EQU      %
         DO1      #CAL14S+1
         DATA     0
*
CAL16UNT EQU      %
         DO1      #CAL16S+1
         DATA     0
*
CAL17UNT EQU      %
         DO1      #CAL17S+1
         DATA     0
*
CAL18UNT EQU      %
         DO1      #CAL18S+1
         DATA     0
*
CAL19UNT EQU      %
         DO1      #CAL19S+1
         DATA     0
*
         BOUND    8
CAL11MISC  DO1   2+#CAL11S
         DATA,8   0
*
CAL#     DATA     1
CALTCNT  DATA     0
CALTIO   DATA     0
CALTCPU  DATA     0
CUMCNT   DATA     0,0,0,0,0,0,0,0,0,0
TOT:COUNT DATA    0
CUMIO    DATA     0
CUMCPU   DATA     0
GORETURN DATA     0
         BOUND    8
CUMARS   DATA     0,0
CALTARS  DATA     0,0
*
CALARS   DATA     0,0
*
CUM:MON  DATA     0,0
*
CUM:SAMP DATA     0,0
CUM:UNMAP DATA    0,0
MAPCPU   DATA     0,0
UNMAPCPU DATA     0,0
*
*
*
SLV#     DATA     0
MAST#    DATA     0,0,0
         PAGE
*
*        FOLLOWING DATA IS NOT WORKING STORAGE AND SHOULD
*        NOT BE CLEARED
*
HIST:IN  DATA     0                 SET IF HISTORY FILE INCORE NOW
*
TMINUTES DATA     0                 ELAPSED MINUTES IN SAMPLE PERIOD
*
T1       DATA     0
T2       DATA     0
*
SUMEM    DATA     0
HIT1     DATA     0
MINUTES  DATA     0
QUAL     DATA     0
HOURS    DATA     0
SCALED   DATA     0                 SCALING FACTOR USED ON CURRENT #'S
START:TIM DATA    0,0,0,0
STOP:TIME DATA    0,0,0,0
         PAGE
*
*        FILE INPUT DCB
*
M:EI     DSECT    1
M:EI     M:DCB    (FILE,'000:00:00',8),(IN),(SAVE)
         USECT    EDITPROC
         END      ST
