//KIMUA   JOB CLASS=F,MSGCLASS=0,NOTIFY=KIMU,TIME=1440
//* -----------------------------------------------------------
//*
//* DISK BENCHMARK TEST - CACHE ANALYZER PROGRAM.
//*
//*  This program gets cash information before and after the
//*  BENCHMARK test of the disk.
//*  and, a report during the BENCHMARK.
//*
//* -- EXPLANATION OF STEP --
//*  A      : ASSEMBLE
//*  L      : LKED
//*  DEL    : WORK DATASET SCRATCH
//*  G1     : COLLECT CACHE INFORMATION BEFORE NEXT TEST.
//*  LISTD1 : DEBUG...
//*  TEST   : ANY BENCHMARK TEST PROGRAM
//*  SORT   : DEBUG...
//*  LISTD2 : DEBUG...
//*  G2     : CACHE REPORT ( LAST TEST )
//*  G3     : CACHE REPORT ( ALL TEST )
//*  ALTER  : OUTPUT FILE RENAME.
//*
//* -----------------------------------------------------------
//JOBCAT   DD  DSN=USER.CATALOG,DISP=SHR
//A       EXEC PGM=ASMA90,PARM='OBJECT',REGION=2000K
//SYSIN    DD  *
         START
         DC   C'<< LISTDATA : Cache analyzer >> '
VER      DC   CL6'v0r0m0'
         PRINT NOGEN
* -----------------------------------------------------------------
* -----------------------------------------------------------------
@LISTD   CSECT
         SAVE  (14,12),T,*
         BALR  R03,0
         USING *,R03,R04                   Base Reg. R03
         LA    R04,2048(R03)
         LA    R04,2048(R04)               2ND BASE REG. R04
         ST    R13,SAVEAREA+4              Save A(OLD SaveArea)
         LR    R12,R13
         LA    R13,SAVEAREA
         ST    R13,8(R12)                  Save A(NEW SaveArea)
*
*--- initialize ---
         MVI   PARMWA,X'40'             space clear
         MVC   PARMWA+1(L'PARMWA-1),PARMWA
         MVI   PARMVOL,X'40'
         MVC   PARMVOL+1(L'PARMVOL-1),PARMVOL
*
         L     R01,0(R01)
         LH    R02,0(R01)
         LTR   R02,R02
         BZ    PRM_EXIT
         BCTR  R02,0
*--> PARMMVC  MVC   PARMWA(0),2(R01)
         EX    R02,PARMMVC
*
         MVI   PROCFLAG,X'F0'            DEFAULT ALL PROCESS
*
         EXTRACT ANSWERA,FIELDS=(ASID)
*
         L     R01,CVTPTR                CVT
         USING CVTMAP,R01
         L     R01,CVTASVT               ASVT
         USING ASVT,R01
         LA    R02,ASVTFRST
         LH    R15,ASID
         SLL   R15,2
         LA    R02,0(R02,R15)
         L     R01,0(R02)                ASCB
         USING ASCB,R01
         L     R01,ASCBJBNI
         LTR   R01,R01
         BZ    INITSKP1
         MVC   OUTJOB(8),0(R01)
INITSKP1 EQU   *
         DROP  R01
*--- parameter ---
         LA    R01,PARMWA
         LA    R02,L'PARMWA
PRM_LOP1 EQU   *
         CLC   0(04,R01),=CL04'VOL('
         BNE   PRM_SKP1
         LA    R15,PARMVOL
         LA    R01,4(R01)
         B     PRM_LOP2
PRM_SKP1 EQU   *
         CLC   0(09,R01),=CL09'NOHISTORY'      NOHISTORY
         BNE   PRM_SKP2
         NI    PROCFLAG,X'FF'-PROCHIST
         LA    R01,9(R01)
         B     PRM_LOPN
PRM_SKP2 EQU   *
         CLC   0(08,R01),=CL08'NOREPORT'       NOREPORT,NOINTERVAL
         BNE   PRM_SKP3
         NI    PROCFLAG,X'FF'-PROCREPT-PROCINTV
         LA    R01,8(R01)
         B     PRM_LOPN
PRM_SKP3 EQU   *
         CLC   0(10,R01),=CL10'NOINTERVAL'     NOINTERVAL
         BNE   PRM_SKP4
         NI    PROCFLAG,X'FF'-PROCINTV
         LA    R01,10(R01)
         B     PRM_LOPN
PRM_SKP4 EQU   *
PRM_LOPN EQU   *
         LA    R01,1(R01)
         BCT   R02,PRM_LOP1
         B     PRM_EXIT
*
PRM_LOP2 EQU   *
         CLI   0(R01),C')'
         BE    PRM_SKP20
         MVC   0(1,R15),0(R01)
         LA    R15,1(R15)
         LA    R01,1(R01)
         BCT   R02,PRM_LOP2
         B     PRM_EXIT
PRM_SKP20 EQU  *
         LA    R01,1(R01)
         BCT   R02,PRM_LOP1
         B     PRM_EXIT
*
PRM_EXIT EQU   *
* --- Parameter Check ---
PCHK     EQU   *
         L     R01,=A(PARMVOL)
PCHKLOP1 EQU   *
         CLI   0(R01),C' '
         BE    PCHKLOP1Q
         LA    R01,1(R01)
         B     PCHKLOP1
PCHKLOP1Q EQU  *
         S     R01,=A(PARMVOL)
         CL    R01,=F'6'
         BNH   PCHKLOP1X
         WTO   'LISTD : PARM ERROR.'
         B     TERMCODE1
PCHKLOP1X EQU  *
         MVC   MSG#0000(14),=CL14'LISTD : VOL ='
         MVC   MSG#0000+14(06),PARMVOL
         TM    PROCFLAG,PROCHIST
         BO    PCHKSKP11
         MVC   MSG#0000+21(09),=CL09'NOHISTORY'
         B     PCHKSKP12
PCHKSKP11 EQU  *
         MVC   MSG#0000+21(09),=CL09'  HISTORY'
PCHKSKP12 EQU  *
         TM    PROCFLAG,PROCREPT
         BO    PCHKSKP21
         MVC   MSG#0000+31(08),=CL08'NOREPORT'
         B     PCHKSKP22
PCHKSKP21 EQU  *
         MVC   MSG#0000+31(08),=CL08'  REPORT'
PCHKSKP22 EQU  *
         TM    PROCFLAG,PROCINTV
         BO    PCHKSKP31
         MVC   MSG#0000+40(10),=CL10'NOINTERVAL'
         B     PCHKSKP32
PCHKSKP31 EQU  *
         MVC   MSG#0000+40(10),=CL10'  INTERVAL'
PCHKSKP32 EQU  *
         WTO   TEXT=MSG#A000,MF=(E,WTOINFO)
* --- MAIN LOOP ------------------------------------------------------
*
*  +---------+
*  | ucb chk |
*  +---------+
*       | ? VOLSER match
*  +---------+
*  |listdata |
*  +---------+
*       | ? no report
*  +---------+
*  |matching |
*  |  history|
*  +---------+
*       | ? match ?no interval
*  +---------+
*  | report  |
*  +---------+
*       | ? no history
*  +---------+
*  | write   |
*  |  history|
*  +---------+
*
* --- Loop Initial ---
         OPEN  (HISTDCBI,(INPUT))
         TM    PROCFLAG,PROCHIST
         BNO   OPENSKP0
         OPEN  (HISTDCBO,(OUTPUT))
OPENSKP0 EQU   *
         TM    PROCFLAG,PROCREPT
         BNO   OPENSKP1
         OPEN  (REPDCB,(OUTPUT))
         PUT   REPDCB,REPHEAD
OPENSKP1 EQU   *
         XC    UCBAREA,UCBAREA
         XC    USCNWORK,USCNWORK
*
         GET   HISTDCBI,INAREA
NEXTUCB  EQU   *
         UCBSCAN COPY,WORKAREA=USCNWORK,UCBAREA=UCBAREA,               *
               DEVCLASS=DASD,RANGE=ALL
         LTR   R15,R15
         BZ    UCB_OK
         B     ENDOFUCB
*        WTO   'LISTD : VOLUME NOT FOUND ??'
*        B     TERMCODE1
UCB_OK   EQU   *
         USING UCBOB,R12
         LA    R12,UCBAREA
*
         TM    UCBSTAT,UCBONLI
         BNO   NEXTUCB
*
         LA    R01,PARMVOL
         LA    R02,UCBVOLI
         LA    R14,6
VOLUMECHK EQU  *
         CLI   0(R01),C'*'
         BE    VC_X
         CLI   0(R01),C'%'
         BE    VC_N
         CLI   0(R01),C'+'
         BE    VC_N
         CLC   0(R01,1),0(R02)
         BNE   NEXTUCB
VC_N     EQU   *
         LA    R01,1(R01)
         LA    R02,1(R02)
         BCT   R14,VOLUMECHK
VC_X     EQU   *
         MVC   @U_SER,UCBVOLI                  VOLSER
         MVC   @U_TYP,UCBTYP                   DEVICE TYPE
         MVC   @U_ADR,UCBCHAN                  UNIT ADDRESS ( BIN )
         DROP  R12
* --- LISTDATA Parm Set ( status ) ---
         MVI   LD#BUFF,X'00'                   Clear LISTDATA Buffer
         LA    R00,LD#BUFF
         LA    R01,LLD#BUFF-1
         LA    R14,LD#BUFF+1
         MVCL  R00,R14
         XC    SSGARGL(SSGARGLL),SSGARGL       Clear SSGARGL
         LA    R01,@U_SER                      Copy Volume Serial
         ST    R01,SSGAVOL
         MVC   SSGUNIT,@U_TYP                  Copy Unit Type
         LA    R01,LLD#BUFF                    Copy Buffer Length
         ST    R01,SSGOLN
         LA    R01,LD#BUFF                     Copy Buffer Address
         ST    R01,SSGOADR
         XR    R01,R01
         IC    R01,=BL1'01000000'              Option Set
*        IC    R01,=BL1'10000000'
*                                              '01000000'b = STATUS
*                                              '10000000'b = COUNTS
         STC   R01,SSGOPT1
         XC    SSGOPT2,SSGOPT2                 Clear SSGOPT2
         XC    SSGMDLID,SSGMDLID                     SSGMDLID
         XC    SSGRCIOS,SSGRCIOS                     SSGRCIOS
* --- LISTDATA Execute ---
         LA    R01,LDPARM
         LINK  EP=IDCSS01
* --- LISTDATA Edit ---
         LA    R01,LD#BUFF                     R11 <- SSGDA Base Reg.
         USING SSGDA,R01
*        LA    R12,SSGDADA
*        USING SSGDASS,R12                     R12 <- SSGDASS Base Reg.
         MVC   OUTSTATS(80),SSGDADA
         DROP  R01
* --- LISTDATA Parm Set ( counts ) ---
         MVI   LD#BUFF,X'00'                   Clear LISTDATA Buffer
         LA    R00,LD#BUFF
         LA    R01,LLD#BUFF-1
         LA    R14,LD#BUFF+1
         MVCL  R00,R14
         XC    SSGARGL(SSGARGLL),SSGARGL       Clear SSGARGL
         LA    R01,@U_SER                      Copy Volume Serial
         ST    R01,SSGAVOL
         MVC   SSGUNIT,@U_TYP                  Copy Unit Type
         LA    R01,LLD#BUFF                    Copy Buffer Length
         ST    R01,SSGOLN
         LA    R01,LD#BUFF                     Copy Buffer Address
         ST    R01,SSGOADR
         XR    R01,R01
*        IC    R01,=BL1'01000000'              Option Set
         IC    R01,=BL1'10000000'
*                                              '01000000'b = STATUS
*                                              '10000000'b = COUNTS
         STC   R01,SSGOPT1
         XC    SSGOPT2,SSGOPT2                 Clear SSGOPT2
         XC    SSGMDLID,SSGMDLID                     SSGMDLID
         XC    SSGRCIOS,SSGRCIOS                     SSGRCIOS
* --- LISTDATA Execute ---
         LA    R01,LDPARM
         LINK  EP=IDCSS01
* --- LISTDATA Edit ---
         LA    R01,LD#BUFF                     R11 <- SSGDA Base Reg.
         USING SSGDA,R01
*        LA    R12,SSGDADA
*        USING SSGDASS,R12                     R12 <- SSGDASS Base Reg.
         MVC   OUTCOUNT(96),SSGDADA
         MVC   OUTADR(2),@U_ADR
         MVC   OUTSER(6),@U_SER
* -----------------------------------------------------------------
         TIME  DEC,TIMERSLT,DATETYPE=YYYYMMDD,LINKAGE=SYSTEM
         MVC   OUTTIME,TIMERSLT
* -----------------------------------------------------------------
         XC    CPTIME,CPTIME
         XC    CPTIME2,CPTIME2
READLOP1 EQU   *
         TM    PROCFLAG,EOFHIST
         BO    R_GREAT
         CLC   INADR,OUTADR
         BE    R_MATCH
         BL    R_LESS
         B     R_GREAT
R_GREAT  EQU   *
         TM    PROCFLAG,PROCREPT         if no report ?
         BNO   R_GREAT3
         TM    PROCFLAG,PROCINTV         if Interval ?
         BO    R_GREAT2
         CLC   CPADR,OUTADR              if compare area address equal
         BNE   R_GREAT2
         LA    R11,CPAREA                old area
         LA    R12,OUTAREA               new area
         BAL   R10,RPTPROC               report process
         B     R_GREAT3
R_GREAT2 EQU   *
         CLC   CPTIME,=XL16'0'           if compare area active
         BE    R_GREAT3
         LA    R11,CPAREA                old area
         LA    R12,OUTAREA               new area
         BAL   R10,RPTPROC               report process
R_GREAT3 EQU   *
         TM    PROCFLAG,PROCHIST         if no history ?
         BNO   R_GREAT4
         PUT   HISTDCBO,OUTAREA          write new record
R_GREAT4 EQU   *
         B     NEXTUCB
R_MATCH  EQU   *
         TM    PROCFLAG,PROCREPT         if no report ?
         BNO   R_MATCH3
         TM    PROCFLAG,PROCINTV         if no interval ?
         BNO   R_MATCH2
         CLC   CPTIME,=XL16'0'           if first ?
         BE    R_MATCH1
         MVC   CPAREA2,CPAREA            copy old compare area
         MVC   CPAREA,INAREA             copy compare area
         LA    R11,CPAREA2               old area
         LA    R12,CPAREA                new area
         BAL   R10,RPTPROC               report process
         B     R_MATCH3
R_MATCH1 EQU   *
         MVC   CPAREA,INAREA
         B     R_MATCH3
R_MATCH2 EQU   *
* +++
*        MVC   MSG#0000(80),=CL80'DEBUG :'
*        UNPK  EDWORK(9),CPTIME+8(5)
*        TR    EDWORK(8),=C'0123456789ABCDEF'-X'F0'
*        MVC   MSG#0000+8(8),EDWORK
*        UNPK  EDWORK(9),CPTIME(5)
*        TR    EDWORK(8),=C'0123456789ABCDEF'-X'F0'
*        MVC   MSG#0000+17(8),EDWORK
*        UNPK  EDWORK(9),INTIME+8(5)
*        TR    EDWORK(8),=C'0123456789ABCDEF'-X'F0'
*        MVC   MSG#0000+30(8),EDWORK
*        UNPK  EDWORK(9),INTIME(5)
*        TR    EDWORK(8),=C'0123456789ABCDEF'-X'F0'
*        MVC   MSG#0000+39(8),EDWORK
*        WTO   TEXT=MSG#A000,MF=(E,WTOINFO)
* +++
         CLC   CPTIME+8(4),INTIME+8
         BH    R_MATCH3
         BL    R_MATCH21
         CLC   CPTIME(8),INTIME
         BNL   R_MATCH3
R_MATCH21 EQU  *
         MVC   CPAREA,INAREA
R_MATCH3 EQU   *
         TM    PROCFLAG,PROCHIST         if no history ?
         BNO   R_MATCH4
         PUT   HISTDCBO,INAREA
R_MATCH4 EQU   *
         GET   HISTDCBI,INAREA
         B     READLOP1
R_LESS   EQU   *
         TM    PROCFLAG,PROCHIST         if no history ?
         BNO   R_LESS1
         PUT   HISTDCBO,INAREA
R_LESS1  EQU   *
         GET   HISTDCBI,INAREA
         B     READLOP1
EOF      EQU   *
         OI    PROCFLAG,EOFHIST
         TM    PROCFLAG,ENDUCBF
         BO    BYE
         B     READLOP1
* -----------------------------------------------------------------
* -----------------------------------------------------------------
* -----------------------------------------------------------------
* --- REPORT PROCESS ( RETURN : R10 )------------------------------
RPTPROC  EQU   *
*        LA    R11,CPCOUNT               old area
*        LA    R12,OUTCOUNT              new area
* --- volume serial -----------------------------------------------
         CLC   OAJOB(8,R11),=XL8'0'
         BE    JOBSKP1
         MVC   REPJOB(8),OAJOB(R11)
         B     JOBSKP2
JOBSKP1  EQU   *
         MVC   REPJOB(8),=CL8'-NONE-'
JOBSKP2  EQU   *
* --- address -----------------------------------------------------
         UNPK  EDWORK(5),OAADR(3,R11)
         TR    EDWORK(4),=C'0123456789ABCDEF'-X'F0'
         MVC   REPADR(4),EDWORK
* --- volume serial -----------------------------------------------
         MVC   REPVOL(6),OASER(R11)
* --- start date --------------------------------------------------
         UNPK  EDWORK(9),OATIME+8(5,R11)
         TR    EDWORK(8),=C'0123456789ABCDEF'-X'F0'
         MVC   REPSDATE+0(4),EDWORK+0
         MVI   REPSDATE+4,C'/'
         MVC   REPSDATE+5(2),EDWORK+4
         MVI   REPSDATE+7,C'/'
         MVC   REPSDATE+8(2),EDWORK+6
* --- start time --------------------------------------------------
         UNPK  EDWORK(9),OATIME(5,R11)
         TR    EDWORK(8),=C'0123456789ABCDEF'-X'F0'
         MVC   REPSTIME+0(2),EDWORK+0
         MVI   REPSTIME+2,C':'
         MVC   REPSTIME+3(2),EDWORK+2
         MVI   REPSTIME+5,C':'
         MVC   REPSTIME+6(2),EDWORK+4
* --- interval time -----------------------------------------------
         XR    R06,R06                   date
         CLC   OATIME+8(4,R12),OATIME+8(R11)
         BE    IVT_SKP1
         L     R06,=A(60*60*24)
IVT_SKP1 EQU   *
         XR    R01,R01                   hh
         XR    R02,R02
         IC    R01,OATIME+0(R11)
*
*        ST    R01,REPADR
*
         SLL   R01,4
         O     R01,=X'0000000F'
         XC    PK_AREA,PK_AREA
         ST    R01,PK_AREA+4
         CVB   R01,PK_AREA
         IC    R02,OATIME+0(R12)
         SLL   R02,4
         O     R02,=X'0000000F'
         XC    PK_AREA,PK_AREA
         ST    R02,PK_AREA+4
         CVB   R02,PK_AREA
         SR    R02,R01
         MH    R02,=AL2(60*60)
         LA    R06,0(R02,R06)
         XR    R01,R01                   mm
         XR    R02,R02
         IC    R01,OATIME+1(R11)
         SLL   R01,4
         O     R01,=X'0000000F'
         XC    PK_AREA,PK_AREA
         ST    R01,PK_AREA+4
         CVB   R01,PK_AREA
         IC    R02,OATIME+1(R12)
         SLL   R02,4
         O     R02,=X'0000000F'
         XC    PK_AREA,PK_AREA
         ST    R02,PK_AREA+4
         CVB   R02,PK_AREA
         SR    R02,R01
         MH    R02,=AL2(60)
         LA    R06,0(R02,R06)
         XR    R01,R01                   ss
         XR    R02,R02
         IC    R01,OATIME+2(R11)
         SLL   R01,4
         O     R01,=X'0000000F'
         XC    PK_AREA,PK_AREA
         ST    R01,PK_AREA+4
         CVB   R01,PK_AREA
         IC    R02,OATIME+2(R12)
         SLL   R02,4
         O     R02,=X'0000000F'
         XC    PK_AREA,PK_AREA
         ST    R02,PK_AREA+4
         CVB   R02,PK_AREA
         SR    R02,R01
         LA    R06,0(R02,R06)
*
         SRDA  R06,32
         D     R06,=F'60'    R07 <- 1min = 1s * 60
         CVD   R06,PK_AREA
         UNPK  UPK_AREA(8),PK_AREA(8)
         OI    UPK_AREA+7,X'F0'
         MVI   REPINTV+5,C':'
         MVC   REPINTV+6(2),UPK_AREA+6
         LR    R06,R07
         SRDA  R06,32
         D     R06,=F'60'    R07 <- 1hor = 1min * 60
         CVD   R07,PK_AREA
         UNPK  UPK_AREA(8),PK_AREA(8)
         OI    UPK_AREA+7,X'F0'
         MVC   REPINTV(2),UPK_AREA+6
         CVD   R06,PK_AREA
         UNPK  UPK_AREA(8),PK_AREA(8)
         OI    UPK_AREA+7,X'F0'
         MVI   REPINTV+2,C':'
         MVC   REPINTV+3(2),UPK_AREA+6
* --- Count -------------------------------------------------------
         LA    R11,OACOUNT(R11)
         LA    R12,OACOUNT(R12)
*        WTO   'COUNT'
* --- Search or Read normal I/O requests --------------------------
         L     R01,4(R12)
         L     R01,APFNSRH(R12)
         S     R01,APFNSRH(R11)
         ST    R01,NRTOTAL
         CVD   R01,PK_AREA
         MVC   EDWORK,EDMASK
         ED    EDWORK,PK_AREA
         MVC   REPRNOR(10),EDWORK+6      Read normal
* --- Search or Read normal request hits --------------------------
         L     R01,APFNSRHH(R12)
         S     R01,APFNSRHH(R11)
         ST    R01,NRCACHE
         CVD   R01,PK_AREA
         MVC   EDWORK,EDMASK
         ED    EDWORK,PK_AREA
         MVC   REPRNORC(10),EDWORK+6     Read normal from cache
* --- Write normal I/O requests -----------------------------------
         L     R01,APFNWRI(R12)
         S     R01,APFNWRI(R11)
         ST    R01,NWTOTAL
         CVD   R01,PK_AREA
         MVC   EDWORK,EDMASK
         ED    EDWORK,PK_AREA
         MVC   REPWNOR(10),EDWORK+6      Write normal
* --- Dasd fast write I/O request hits ----------------------------
         L     R01,APFNDFWH(R12)
         S     R01,APFNDFWH(R11)
         ST    R01,NWCACHE
         CVD   R01,PK_AREA
         MVC   EDWORK,EDMASK
         ED    EDWORK,PK_AREA
         MVC   REPWNORC(10),EDWORK+6     Write normal to cache
* --- Search or Read sequential I/O requests ----------------------
         L     R01,APFSSRH(R12)
         S     R01,APFSSRH(R11)
         ST    R01,SRTOTAL
         CVD   R01,PK_AREA
         MVC   EDWORK,EDMASK
         ED    EDWORK,PK_AREA
         MVC   REPRSEQ(10),EDWORK+6      Read sequential
* --- Search or Read sequential I/O request hits ------------------
         L     R01,APFSSRHH(R12)
         S     R01,APFSSRHH(R11)
         ST    R01,SRCACHE
         CVD   R01,PK_AREA
         MVC   EDWORK,EDMASK
         ED    EDWORK,PK_AREA
         MVC   REPRSEQC(10),EDWORK+6     Read sequential from cache
* --- Write sequential I/O requests -------------------------------
         L     R01,APFSWRI(R12)
         S     R01,APFSWRI(R11)
         ST    R01,SWTOTAL
         CVD   R01,PK_AREA
         MVC   EDWORK,EDMASK
         ED    EDWORK,PK_AREA
         MVC   REPWSEQ(10),EDWORK+6      Write sequential
* --- Dasd fast write sequential request hits ---------------------
         L     R01,APFSDFWH(R12)
         S     R01,APFSDFWH(R11)
         ST    R01,SWCACHE
         CVD   R01,PK_AREA
         MVC   EDWORK,EDMASK
         ED    EDWORK,PK_AREA
         MVC   REPWSEQC(10),EDWORK+6     Write sequential to cache
* --- Search or Read cache fast write I/O requests ----------------
         L     R01,APFRCFW(R12)
         S     R01,APFRCFW(R11)
         ST    R01,CRTOTAL
         CVD   R01,PK_AREA
         MVC   EDWORK,EDMASK
         ED    EDWORK,PK_AREA
         MVC   REPRCFW(10),EDWORK+6      read CFW
* --- Search or Read cache fast write I/O request hits ------------
         L     R01,APFRCFWH(R12)
         S     R01,APFRCFWH(R11)
         ST    R01,CRCACHE
         CVD   R01,PK_AREA
         MVC   EDWORK,EDMASK
         ED    EDWORK,PK_AREA
         MVC   REPRCFWC(10),EDWORK+6     read CFW from cache
* --- Cache fast write I/O requests -------------------------------
         L     R01,APFCFW(R12)
         S     R01,APFCFW(R11)
         ST    R01,CWTOTAL
         CVD   R01,PK_AREA
         MVC   EDWORK,EDMASK
         ED    EDWORK,PK_AREA
         MVC   REPWCFW(10),EDWORK+6      Write CFW
* --- Cache fast write I/O request hits ---------------------------
         L     R01,APFCFWH(R12)
         S     R01,APFCFWH(R11)
         ST    R01,CWCACHE
         CVD   R01,PK_AREA
         MVC   EDWORK,EDMASK
         ED    EDWORK,PK_AREA
         MVC   REPWCFWC(10),EDWORK+6     Write CFW to cache
* --- Inhibit cache loading I/O requests --------------------------
         L     R01,APFINH(R12)
         S     R01,APFINH(R11)
         ST    R01,INHIBIT
         CVD   R01,PK_AREA
         MVC   EDWORK,EDMASK
         ED    EDWORK,PK_AREA
         MVC   REPINH(10),EDWORK+6
* --- Bypass cache I/O requests -----------------------------------
         L     R01,APFBYP(R12)
         S     R01,APFBYP(R11)
         ST    R01,BYPASS
         CVD   R01,PK_AREA
         MVC   EDWORK,EDMASK
         ED    EDWORK,PK_AREA
         MVC   REPBYP(10),EDWORK+6
* --- DFW operation forced ----------------------------------------
         L     R01,APFRETRY(R12)
         S     R01,APFRETRY(R11)
         ST    R01,RETRIES
         CVD   R01,PK_AREA
         MVC   EDWORK,EDMASK
         ED    EDWORK,PK_AREA
         MVC   REPRTY(10),EDWORK+6
* --- DFW normal write operation counts ---------------------------
         L     R01,APFNDFW(R12)
         S     R01,APFNDFW(R11)
         ST    R01,NWDFW
         CVD   R01,PK_AREA
         MVC   EDWORK,EDMASK
         ED    EDWORK,PK_AREA
         MVC   REPWNORD(10),EDWORK+6
* --- DFW sequential write operation counts -----------------------
         L     R01,APFSDFW(R12)
         S     R01,APFSDFW(R11)
         ST    R01,SWDFW
         CVD   R01,PK_AREA
         MVC   EDWORK,EDMASK
         ED    EDWORK,PK_AREA
         MVC   REPWSEQD(10),EDWORK+6
* --- sequential DASD to cache transfer operations ----------------
         L     R01,APFSDTOC(R12)
         S     R01,APFSDTOC(R11)
         CVD   R01,PK_AREA
         MVC   EDWORK,EDMASK
         ED    EDWORK,PK_AREA
         MVC   REPSDTOC(10),EDWORK+6
* --- DASD to cache transfer operations ---------------------------
         L     R01,APFNDTOC(R12)
         S     R01,APFNDTOC(R11)
         CVD   R01,PK_AREA
         MVC   EDWORK,EDMASK
         ED    EDWORK,PK_AREA
         MVC   REPNDTOC(10),EDWORK+6
* --- cache to DASD transfer operations ---------------------------
         L     R01,APFNCTOD(R12)
         S     R01,APFNCTOD(R11)
         CVD   R01,PK_AREA
         MVC   EDWORK,EDMASK
         ED    EDWORK,PK_AREA
         MVC   REPNCTOD(10),EDWORK+6
* --- Read Total --------------------------------------------------
         L     R01,NRTOTAL
         A     R01,SRTOTAL
         A     R01,CRTOTAL
         CVD   R01,PK_AREA
         MVC   EDWORK,EDMASK
         ED    EDWORK,PK_AREA
         MVC   REPRTTL(10),EDWORK+6
* --- Read Cache read ---------------------------------------------
         L     R01,NRCACHE
         A     R01,SRCACHE
         A     R01,CRCACHE
         CVD   R01,PK_AREA
         MVC   EDWORK,EDMASK
         ED    EDWORK,PK_AREA
         MVC   REPRTTLC(10),EDWORK+6
* --- Write Total -------------------------------------------------
         L     R01,NWTOTAL
         A     R01,SWTOTAL
         A     R01,CWTOTAL
         CVD   R01,PK_AREA
         MVC   EDWORK,EDMASK
         ED    EDWORK,PK_AREA
         MVC   REPWTTL(10),EDWORK+6
* --- Write DFW ---------------------------------------------------
         L     R01,NWDFW
         A     R01,SWDFW
         CVD   R01,PK_AREA
         MVC   EDWORK,EDMASK
         ED    EDWORK,PK_AREA
         MVC   REPWDFW(10),EDWORK+6
* --- Write Cache write -------------------------------------------
         L     R01,NWCACHE
         A     R01,SWCACHE
         A     R01,CWCACHE
         CVD   R01,PK_AREA
         MVC   EDWORK,EDMASK
         ED    EDWORK,PK_AREA
         MVC   REPWTTLC(10),EDWORK+6
* --- total i/o ---------------------------------------------------
         L     R01,NRTOTAL
         A     R01,SRTOTAL
         A     R01,CRTOTAL
         A     R01,NWTOTAL
         A     R01,SWTOTAL
         A     R01,CWTOTAL
         CVD   R01,PK_AREA
         MVC   EDWORK,EDMASK
         ED    EDWORK,PK_AREA
         MVC   REPTTLIO(10),EDWORK+6
* --- read% -------------------------------------------------------
         L     R01,NRTOTAL               total i/o
         A     R01,SRTOTAL
         A     R01,CRTOTAL
         A     R01,NWTOTAL
         A     R01,SWTOTAL
         A     R01,CWTOTAL
         LTR   R01,R01
         BZ    P_READSKP1
         L     R07,NRTOTAL               read total
         A     R07,SRTOTAL
         A     R07,CRTOTAL
         XR    R06,R06
         M     R06,=F'1000000000'        * 0.000001%
         DR    R06,R01
         B     P_READSKP2
P_READSKP1 EQU *
         XR    R07,R07
P_READSKP2 EQU *
         CVD   R07,PK_AREA
         MVC   EDWORK,EDMASK2
         ED    EDWORK,PK_AREA
         MVC   REPREADP(10),EDWORK+6
* --- write% ------------------------------------------------------
         L     R01,NRTOTAL               total i/o
         A     R01,SRTOTAL
         A     R01,CRTOTAL
         A     R01,NWTOTAL
         A     R01,SWTOTAL
         A     R01,CWTOTAL
         LTR   R01,R01
         BZ    P_WRITSKP1
         L     R07,NWTOTAL               write total
         A     R07,SWTOTAL
         A     R07,CWTOTAL
         XR    R06,R06
         M     R06,=F'1000000000'        * 0.000001%
         DR    R06,R01
         B     P_WRITSKP2
P_WRITSKP1 EQU *
         XR    R07,R07
P_WRITSKP2 EQU *
         CVD   R07,PK_AREA
         MVC   EDWORK,EDMASK2
         ED    EDWORK,PK_AREA
         MVC   REPWRITP(10),EDWORK+6
* --- inhibit% ----------------------------------------------------
         L     R01,NRTOTAL               total i/o
         A     R01,SRTOTAL
         A     R01,CRTOTAL
         A     R01,NWTOTAL
         A     R01,SWTOTAL
         A     R01,CWTOTAL
         LTR   R01,R01
         BZ    P_INHISKP1
         L     R07,INHIBIT               inhibit
         XR    R06,R06
         M     R06,=F'1000000000'        * 0.000001%
         DR    R06,R01
         B     P_INHISKP2
P_INHISKP1 EQU *
         XR    R07,R07
P_INHISKP2 EQU *
         CVD   R07,PK_AREA
         MVC   EDWORK,EDMASK2
         ED    EDWORK,PK_AREA
         MVC   REPINHP(10),EDWORK+6
* --- bypass% -----------------------------------------------------
         L     R01,NRTOTAL               total i/o
         A     R01,SRTOTAL
         A     R01,CRTOTAL
         A     R01,NWTOTAL
         A     R01,SWTOTAL
         A     R01,CWTOTAL
         LTR   R01,R01
         BZ    P_BYPASKP1
         L     R07,BYPASS                bypass
         XR    R06,R06
         M     R06,=F'1000000000'        * 0.000001%
         DR    R06,R01
         B     P_BYPASKP2
P_BYPASKP1 EQU *
         XR    R07,R07
P_BYPASKP2 EQU *
         CVD   R07,PK_AREA
         MVC   EDWORK,EDMASK2
         ED    EDWORK,PK_AREA
         MVC   REPBYPP(10),EDWORK+6
* --- cache hit% --------------------------------------------------
         L     R01,NRTOTAL               total i/o
         A     R01,SRTOTAL
         A     R01,CRTOTAL
         A     R01,NWTOTAL
         A     R01,SWTOTAL
         A     R01,CWTOTAL
         LTR   R01,R01
         BZ    P_CHSKP1
         L     R07,NWCACHE               cache write
         A     R07,SWCACHE
         A     R07,CWCACHE
         A     R07,NRCACHE               cache read
         A     R07,SRCACHE
         A     R07,CRCACHE
         XR    R06,R06
         M     R06,=F'1000000000'        * 0.000001%
         DR    R06,R01
         B     P_CHSKP2
P_CHSKP1 EQU   *
         XR    R07,R07
P_CHSKP2 EQU   *
         CVD   R07,PK_AREA
         MVC   EDWORK,EDMASK2
         ED    EDWORK,PK_AREA
         MVC   REPHITP(10),EDWORK+6
* --- read hit% ---------------------------------------------------
         L     R01,NRTOTAL               read total
         A     R01,SRTOTAL
         A     R01,CRTOTAL
         LTR   R01,R01
         BZ    P_RHSKP1
         L     R07,NRCACHE               cache read
         A     R07,SRCACHE
         A     R07,CRCACHE
         XR    R06,R06
         M     R06,=F'1000000000'        * 0.000001%
         DR    R06,R01
         B     P_RHSKP2
P_RHSKP1 EQU   *
         XR    R07,R07
P_RHSKP2 EQU   *
         CVD   R07,PK_AREA
         MVC   EDWORK,EDMASK2
         ED    EDWORK,PK_AREA
         MVC   REPRHITP(10),EDWORK+6
* --- normal cache read% ------------------------------------------
         L     R01,NRCACHE               cache read
         A     R01,SRCACHE
         A     R01,CRCACHE
         LTR   R01,R01
         BZ    P_NCRSKP1
         L     R07,NRCACHE               normal cache read
         XR    R06,R06
         M     R06,=F'1000000000'        * 0.000001%
         DR    R06,R01
         B     P_NCRSKP2
P_NCRSKP1 EQU  *
         XR    R07,R07
P_NCRSKP2 EQU  *
         CVD   R07,PK_AREA
         MVC   EDWORK,EDMASK2
         ED    EDWORK,PK_AREA
         MVC   REPRNOTP(10),EDWORK+6
* --- sequential cache read% --------------------------------------
         L     R01,NRCACHE               cache read
         A     R01,SRCACHE
         A     R01,CRCACHE
         LTR   R01,R01
         BZ    P_SCRSKP1
         L     R07,SRCACHE               sequential cache read
         XR    R06,R06
         M     R06,=F'1000000000'        * 0.000001%
         DR    R06,R01
         B     P_SCRSKP2
P_SCRSKP1 EQU  *
         XR    R07,R07
P_SCRSKP2 EQU  *
         CVD   R07,PK_AREA
         MVC   EDWORK,EDMASK2
         ED    EDWORK,PK_AREA
         MVC   REPRSEQP(10),EDWORK+6
* --- CFW cache read% ---------------------------------------------
         L     R01,NRCACHE               cache read
         A     R01,SRCACHE
         A     R01,CRCACHE
         LTR   R01,R01
         BZ    P_CCRSKP1
         L     R07,CRCACHE               CFW cache read
         XR    R06,R06
         M     R06,=F'1000000000'        * 0.000001%
         DR    R06,R01
         B     P_CCRSKP2
P_CCRSKP1 EQU  *
         XR    R07,R07
P_CCRSKP2 EQU  *
         CVD   R07,PK_AREA
         MVC   EDWORK,EDMASK2
         ED    EDWORK,PK_AREA
         MVC   REPRCFWP(10),EDWORK+6
* --- write hit% --------------------------------------------------
         L     R01,NWTOTAL               write total
         A     R01,SWTOTAL
         A     R01,CWTOTAL
         LTR   R01,R01
         BZ    P_WHSKP1
         L     R07,NWCACHE               cache read
         A     R07,SWCACHE
         A     R07,CWCACHE
         XR    R06,R06
         M     R06,=F'1000000000'        * 0.000001%
         DR    R06,R01
         B     P_WHSKP2
P_WHSKP1 EQU   *
         XR    R07,R07
P_WHSKP2 EQU   *
         CVD   R07,PK_AREA
         MVC   EDWORK,EDMASK2
         ED    EDWORK,PK_AREA
         MVC   REPWHITP(10),EDWORK+6
* --- normal cache write% -----------------------------------------
         L     R01,NWCACHE               cache write
         A     R01,SWCACHE
         A     R01,CWCACHE
         LTR   R01,R01
         BZ    P_NCWSKP1
         L     R07,NWCACHE               normal cache write
         XR    R06,R06
         M     R06,=F'1000000000'        * 0.000001%
         DR    R06,R01
         B     P_NCWSKP2
P_NCWSKP1 EQU  *
         XR    R07,R07
P_NCWSKP2 EQU  *
         CVD   R07,PK_AREA
         MVC   EDWORK,EDMASK2
         ED    EDWORK,PK_AREA
         MVC   REPWNORP(10),EDWORK+6
* --- sequential cache write% -------------------------------------
         L     R01,NWCACHE               cache write
         A     R01,SWCACHE
         A     R01,CWCACHE
         LTR   R01,R01
         BZ    P_SCWSKP1
         L     R07,SWCACHE               sequential cache write
         XR    R06,R06
         M     R06,=F'1000000000'        * 0.000001%
         DR    R06,R01
         B     P_SCWSKP2
P_SCWSKP1 EQU  *
         XR    R07,R07
P_SCWSKP2 EQU  *
         CVD   R07,PK_AREA
         MVC   EDWORK,EDMASK2
         ED    EDWORK,PK_AREA
         MVC   REPWSEQP(10),EDWORK+6
* --- CFW cache write% --------------------------------------------
         L     R01,NWCACHE               cache write
         A     R01,SWCACHE
         A     R01,CWCACHE
         LTR   R01,R01
         BZ    P_CCWSKP1
         L     R07,CWCACHE               CFW cache write
         XR    R06,R06
         M     R06,=F'1000000000'        * 0.000001%
         DR    R06,R01
         B     P_CCWSKP2
P_CCWSKP1 EQU  *
         XR    R07,R07
P_CCWSKP2 EQU  *
         CVD   R07,PK_AREA
         MVC   EDWORK,EDMASK2
         ED    EDWORK,PK_AREA
         MVC   REPWCFWP(10),EDWORK+6
* -----------------------------------------------------------------
*        WTO   'DONE'
         PUT   REPDCB,REPAREA
         BR    R10
* -----------------------------------------------------------------
* -----------------------------------------------------------------
* -----------------------------------------------------------------
ENDOFUCB EQU   *
         TM    PROCFLAG,EOFHIST
         BO    BYE
         TM    PROCFLAG,PROCHIST         if no history ?
         BNO   BYE
         OI    PROCFLAG,ENDUCBF
WRITEALL EQU   *
         PUT   HISTDCBO,INAREA
         GET   HISTDCBI,INAREA
         B     WRITEALL
BYE      EQU   *
         L     R13,SAVEAREA+4
         RETURN (14,12),RC=0
* -----------------------------------------------------------------
TERMCODE1 EQU  *
         L     R13,SAVEAREA+4
         RETURN (14,12),RC=1
* -----------------------------------------------------------------
HISTDCBI DCB   DSORG=PS,MACRF=(GM),DDNAME=HISTIN,RECFM=F,              **
               LRECL=250,BLKSIZE=0,EODAD=EOF
HISTDCBO DCB   DSORG=PS,MACRF=(PM),DDNAME=HISTOUT,RECFM=F,             **
               LRECL=250,BLKSIZE=0
REPDCB   DCB   DSORG=PS,MACRF=(PM),DDNAME=REPORT,RECFM=FB,             **
               LRECL=512,BLKSIZE=0
@U_SER   DS    CL6'VOLSER'
@U_TYP   DS    XL4'3010200F'
@U_ADR   DS    XL2
IOCHECK  DS    XL1
PROCFLAG DS    XL1
PROCHIST EQU   X'80'              X'80' : MAKE HISTORY
PROCREPT EQU   X'40'              X'40' : MAKE REPORT
PROCINTV EQU   X'20'              X'20' : ALL INTERVAL
EOFHIST  EQU   X'01'              X'01' : END OF HISTORY FILE
ENDUCBF  EQU   X'02'              X'02' : END OF UCB SCAN
*
         DS    0F
TIMERSLT DS    XL16
WK#F     DS    F
ANSWERA  DS    0F
         DS    H
ASID     DS    H
* --- MVC ---
PARMMVC  MVC   PARMWA(0),2(R01)
* --- parameter ---
PARMWA   DS    CL100
PARMVOL  DS    CL100
* --- WTO messages ---
WTOINFO  WTO   TEXT=,             WTO parameter list                   X
               DESC=(6),          descriptor code 6 is Job Status      X
               MF=L
MSG#A000 DC    AL2(L'MSG#0000)
MSG#0000 DC    CL80'R74EDIT PARM:'
*
         DS    0D
SAVEAREA DS    18F                             Reg. Save Area
PK_AREA  DS    PL16                      pack work area
PK_AREA2 DS    PL16
UPK_AREA DS    XL16
*                                1
*                    6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1
EDMASK   DC    XL16'40202020202020202020202020202120'
EDMASK2  DC    XL16'4020202020202021204B202020202020'
EDWORK   DS    XL16
* --- UCB area ----------------------------------------------------
UCBAREA  DS    XL48
USCNWORK DS    XL100
* --- OUTPUT AREA -------------------------------------------------
OUTAREA  DS    0XL250
OATIME   EQU   *-OUTAREA
OUTTIME  DS    XL16
OAJOB    EQU   *-OUTAREA
OUTJOB   DS    CL8
OAADR    EQU   *-OUTAREA
OUTADR   DS    XL2
OASER    EQU   *-OUTAREA
OUTSER   DS    CL6
OASTATS  EQU   *-OUTAREA
OUTSTATS DS    CL80
OACOUNT  EQU   *-OUTAREA
OUTCOUNT DS    CL96
         DC    CL42' '
* --- INPUT AREA --------------------------------------------------
INAREA   DS    0XL250
INTIME   DS    XL16
INJOB    DS    CL8
INADR    DS    XL2
INSER    DS    CL6
INSTATS  DS    CL80
INCOUNT  DS    CL96
         DC    CL42' '
* --- COMPARE AREA ------------------------------------------------
CPAREA   DS    0XL250
CPTIME   DS    XL16
CPJOB    DS    CL8
CPADR    DS    XL2
CPSER    DS    CL6
CPSTATS  DS    CL80
CPCOUNT  DS    CL96
         DC    CL42' '
* --- COMPARE AREA ------------------------------------------------
CPAREA2  DS    0XL250
CPTIME2  DS    XL16
CPJOB2   DS    CL8
CPADR2   DS    XL2
CPSER2   DS    CL6
CPSTATS2 DS    CL80
CPCOUNT2 DS    CL96
         DC    CL42' '
* --- REPORT HEAD -------------------------------------------------
REPHEAD  DS    0CL512
         DC    CL1' '
HEPJOB   DC    CL08'JOBNAME'
         DC    CL1' '
HEPADR   DC    CL04'ADDR'
         DC    CL1' '
HEPVOL   DC    CL06'VOLSER'
         DC    CL1' '
HEPSDATE DC    CL10'YYYY/MM/DD'
         DC    CL1' '
HEPSTIME DC    CL08'HH:MM:SS'
         DC    CL1' '
HEPINTV  DC    CL08'HH:MM:SS'
         DC    CL1' '
HEPTTLIO DC    CL10'TOTAL_I/O '
         DC    CL1' '
HEPREAD  DC    CL10'  READ%   '
         DC    CL1' '
HEPWRITE DC    CL10'  WRITE%  '
         DC    CL1' '
HEPINHP  DC    CL10' INHIBIT% '
         DC    CL1' '
HEPBYPP  DC    CL10' BYPASS%  '
         DC    CL1' '
HEPHITP  DC    CL10'CACHE_HIT%'
         DC    CL1' '
HEPRHITP DC    CL10'READ_HIT% '
         DC    CL1' '
HEPRNOTP DC    CL10'READ_NOR% '
         DC    CL1' '
HEPRSEQP DC    CL10'READ_SEQ% '
         DC    CL1' '
HEPRCFWP DC    CL10'READ_CFW% '
         DC    CL1' '
HEPWHITP DC    CL10'WRITE_HIT%'
         DC    CL1' '
HEPWNORP DC    CL10'WRITE_NOR%'
         DC    CL1' '
HEPWSEQP DC    CL10'WRITE_SEQ%'
         DC    CL1' '
HEPWCFWP DC    CL10'WRITE_CFW%'
         DC    CL1' '
HEPRNOR  DC    CL10' READ_NOR '  *
         DC    CL1' '
HEPRNORC DC    CL10'READ_NORC '  *
         DC    CL1' '
HEPRSEQ  DC    CL10' READ_SEQ '  *
         DC    CL1' '
HEPRSEQC DC    CL10'READ_SEQC '  *
         DC    CL1' '
HEPRCFW  DC    CL10' READ_CFW '  *
         DC    CL1' '
HEPRCFWC DC    CL10'READ_CFWC '  *
         DC    CL1' '
HEPRTTL  DC    CL10'READ_TOTAL'
         DC    CL1' '
HEPRTTLC DC    CL10'READ_TOT_C'
         DC    CL1' '
HEPWNOR  DC    CL10'WRITE_NOR '  *
         DC    CL1' '
HEPWNORD DC    CL10'WRITE_NORD'  *
         DC    CL1' '
HEPWNORC DC    CL10'WRITE_NORC'  *
         DC    CL1' '
HEPWSEQ  DC    CL10'WRITE_SEQ '  *
         DC    CL1' '
HEPWSEQD DC    CL10'WRITE_SEQD'  *
         DC    CL1' '
HEPWSEQC DC    CL10'WRITE_SEQC'  *
         DC    CL1' '
HEPWCFW  DC    CL10'WRITE_CFW '  *
         DC    CL1' '
HEPWCFWC DC    CL10'WRITE_CFWC'  *
         DC    CL1' '
HEPWTOT  DC    CL10'WRITE_TOT '
         DC    CL1' '
HEPWDFW  DC    CL10'WRITE_DFW '
         DC    CL1' '
HEPWCAC  DC    CL10'WRITE_CACH'
         DC    CL1' '
HEPINH   DC    CL10' INHIBIT  '  *
         DC    CL1' '
HEPBYP   DC    CL10'  BYPASS  '  *
         DC    CL1' '
HEPRTY   DC    CL10' CACHE_RTY'  *
         DC    CL1' '
HEPNDTOC DC    CL10'NOR_D_TO_C'  *
         DC    CL1' '
HEPNCTOD DC    CL10'SEQ_C_TO_D'  *
         DC    CL1' '
HEPSDTOC DC    CL10'SEQ_D_TO_C'  *
         DC    CL250' '
* --- REPORT ------------------------------------------------------
REPAREA  DS    0CL512
CRLF     DC    CL1' '
REPJOB   DS    CL08
         DC    CL1' '
REPADR   DS    XL04
         DC    CL1' '
REPVOL   DS    CL06
         DC    CL1' '
REPSDATE DS    CL10'YYYY/MM/DD'
         DC    CL1' '
REPSTIME DS    CL08'HH:MM:SS'
         DC    CL1' '
REPINTV  DS    CL08'HH:MM:SS'
         DC    CL1' '
REPTTLIO DS    CL10'1000000000'
         DC    CL1' '
REPREADP DS    CL10'100.000000'
         DC    CL1' '
REPWRITP DS    CL10'100.000000'
         DC    CL1' '
REPINHP  DS    CL10'100.000000'
         DC    CL1' '
REPBYPP  DS    CL10'100.000000'
         DC    CL1' '
REPHITP  DS    CL10'100.000000'
         DC    CL1' '
REPRHITP DS    CL10'100.000000'
         DC    CL1' '
REPRNOTP DS    CL10'100.000000'
         DC    CL1' '
REPRSEQP DS    CL10'100.000000'
         DC    CL1' '
REPRCFWP DS    CL10'100.000000'
         DC    CL1' '
REPWHITP DS    CL10'100.000000'
         DC    CL1' '
REPWNORP DS    CL10'100.000000'
         DC    CL1' '
REPWSEQP DS    CL10'100.000000'
         DC    CL1' '
REPWCFWP DS    CL10'100.000000'
         DC    CL1' '
REPRNOR  DS    CL10'1000000000'  * Read normal total
         DC    CL1' '
REPRNORC DS    CL10'1000000000'  * read normal cache read
         DC    CL1' '
REPRSEQ  DS    CL10'1000000000'  * read sequential total
         DC    CL1' '
REPRSEQC DS    CL10'1000000000'  * read sequential cache read
         DC    CL1' '
REPRCFW  DS    CL10'1000000000'  * read cache fast write total
         DC    CL1' '
REPRCFWC DS    CL10'1000000000'  * read cache fast write cache read
         DC    CL1' '
REPRTTL  DS    CL10'1000000000'    read total total
         DC    CL1' '
REPRTTLC DS    CL10'1000000000'    read total cache read
         DC    CL1' '
REPWNOR  DS    CL10'1000000000'  * write normal total
         DC    CL1' '
REPWNORD DS    CL10'1000000000'  * write normal DFW
         DC    CL1' '
REPWNORC DS    CL10'1000000000'  * write normal cache write
         DC    CL1' '
REPWSEQ  DS    CL10'1000000000'  * write sequential total
         DC    CL1' '
REPWSEQD DS    CL10'1000000000'  * write sequential DFW
         DC    CL1' '
REPWSEQC DS    CL10'1000000000'  * write sequential cache write
         DC    CL1' '
REPWCFW  DS    CL10'1000000000'  * write CFW total
         DC    CL1' '
REPWCFWC DS    CL10'1000000000'  * write CFW cache write
         DC    CL1' '
REPWTTL  DS    CL10'1000000000'    write total
         DC    CL1' '
REPWDFW  DS    CL10'1000000000'    write total DFW
         DC    CL1' '
REPWTTLC DS    CL10'1000000000'    write total cache write
         DC    CL1' '
REPINH   DS    CL10'1000000000'  *
         DC    CL1' '
REPBYP   DS    CL10'1000000000'  *
         DC    CL1' '
REPRTY   DS    CL10'1000000000'  *
         DC    CL1' '
REPNDTOC DS    CL10'1000000000'  *
         DC    CL1' '
REPNCTOD DS    CL10'1000000000'  *
         DC    CL1' '
REPSDTOC DS    CL10'1000000000'  *
         DC    CL250' '
* --- WORK --------------------------------------------------------
RTOTAL   DS    F
RCACHE   DS    F
WTOTAL   DS    F
WDFW     DS    F
WCACHE   DS    F
INHIBIT  DS    F
BYPASS   DS    F
RETRIES  DS    F
NRTOTAL  DS    F
SRTOTAL  DS    F
CRTOTAL  DS    F
NWTOTAL  DS    F
SWTOTAL  DS    F
CWTOTAL  DS    F
NRCACHE  DS    F
SRCACHE  DS    F
CRCACHE  DS    F
NWCACHE  DS    F
SWCACHE  DS    F
CWCACHE  DS    F
NWDFW    DS    F
SWDFW    DS    F
* --- SSGARAL -----------------------------------------------------
SSGARGLA DC    A(SSGARGL)
SSGARGL  DS    0F
SSGHEAD  DS    CL8                     c'SSGARGL'
SSGADDN  DS    A                       dd name address
SSGAVOL  DS    A                       volser address
SSGUNIT  DS    XL4                     unit type ( ucbtyp )
SSGOLN   DS    F                       buffer length
SSGOADR  DS    A                       buffer address
SSGOPT   DS    0XL2                    option
SSGOPT1  DS    XL1                     option 1
*                                       x'80' : subsystem count
*                                       x'40' : subsystem status
*                                       x'20' :
*                                       x'10' :
*                                       x'08' : all same subsystem cnt
*                                       x'04' : a subsystem count
*                                       x'02' : a device count
*                                       x'01' : 3880 pointer
SSGOPT2  DS    XL1
SSGMDLID DS    XL1                      ssid
SSGRCIOS DS    XL1                      ios return code
SSGARGLL EQU   *-SSGARGL
* --- listdata parameter list -------------------------------------
LDPARM   DS    0D
         DC    A(0)
         DC    A(SSGARGLA)
         DC    A(LD#RC)
* --- listdata work area ------------------------------------------
LD#RC    DS    H
         DS    0D
* --- Error messgae -----------------------------------------------
* --- message -----------------------------------------------------
*                   0....+....1....+....2....+....3....+....4....+....5
         LTORG
         DS    0D
LD#BUFF  DS    4000XL1
LLD#BUFF EQU   *-LD#BUFF
* --- SSGARAL BUFFER AREA -----------------------------------------
SSGDA    DSECT
SSGDAVOL DS    CL6                    Volume Serial
         DS    XL2                    Reserved
SSGDAUA1 DS    CL3                    Unit Address
SSGDAUA2 DS    CL3                    Second Address
SSGDALN  DS    H                      Data Length
SSGDADA  DS    0X                     Data Area
* --- SSGARAL DATA AREA ( 3880-11,13 3990-3 MODEL SUBSYSTEM STATUS )
         DS    0D
SSGDASS  DSECT
         DS    XL1                 0  Reserved
SSGDACCA DS    XL1                 1  Unit Address ( for Channel Prog )
SSGDANUM DS    XL1                 2  Number of Unit
SSGDASNO DS    XL1                 3  Statistics Set Number
SSGDACST DS    BL1                 4  Cache Status
*                    ooo o oo o o
*                               - Cache Fast Write ( 1:OFF )
*                             -   IML non used .
*                          --     Reserved
*                        -        Customize ( Do'nt Use Cache )
*                    ---          Cache Status
*                                  000 : Cache On
*                                  001 : Online Processing
*                                  010 : Hard Error ( Cache Off )
*                                  100 : Cache Off
*                                  110 : Offine Processing (Destageing)
*                                  111 : Destage Error
SSGDANST DS    XL1                 5  NVS Status
*                    oo o o o ooo
*                             --- Reserved
*                           -     Hard Error
*                         -       Costomize ( Do'nt Use )
*                       -         Reserved
*                    --           NVS Status
*                                  00 : NVS On
*                                  01 : Hard Error
*                                  10 : NVS Off or Hard Error
*                                  11 : Destageing or Error
*
         DS    XL4               6-9  Reserved
SSGDACSZ DS    FL4              10-13 Cache Size
SSGDAUSZ DS    FL4              14-17 Useable Size
SSGDAPSZ DS    FL4              18-21 PIN Data Size
SSGDAFSZ DS    FL4              22-25 Offline Size
SSGDAUST DS    XL2              26,27 Unit Status
*                    oo oo o o oo
*                              --  Dual Copy Status
*                                  00 : Dual Copy Ready
*                                  01 : Dual Copy ( Processing )
*                                  10 : Dual Stop ( NO-Swicth )
*                                  11 : Dual Stop ( Switched )
*                            -     Dual Copy ( Second Units )
*                          -       Dual Copy ( First Units  )
*                       --         DFW Status
*                                  00 : DFW On
*                                  01 : Reserved
*                                  10 : DFW Error
*                                  11 : DFW Off
*                    --            Device Status
*                                  00 : Device On
*                                  01 : Reserved
*                                  10 : Device Error
*                                  11 : Deivce Off
*                    oo oooooo
*                       ------     Dual Copy Either Address
*                    --            PIN Data Status
*                                  00 : PIN Not Found
*                                  01 : PIN Found ( DFW On )
*                                  10 : Reserved
*                                  11 : PIN Found ( DFW Off )
SSGDANSZ DS    FL4              28-31 NVS Size
SSGDANPS DS    FL4              32-35 PINNED Size ( NVS )
         DS    XL1                36  Unit Status ( Group 2 )
         DS    XL1                37  Reserved
SSGDASSI DS    XL2              38-39 Subsystem-ID
* -------------------------------------------------------------------
SSGDAXPF DSECT
APFFLAG  EQU   *-SSGDAXPF
XPFFLAG  DS    XL1       0      x'80':Cache not available
APFADR   EQU   *-SSGDAXPF
XPFADR   DS    XL1       1      Device unit address
APFSTATS EQU   *-SSGDAXPF
XPFSTATS DS    XL2       2- 3   Device status
APFNSRH  EQU   *-SSGDAXPF
XPFNSRH  DS    XL4       4- 7   Search or Read normal I/O requests
APFNSRHH EQU   *-SSGDAXPF
XPFNSRHH DS    XL4       8-11   Search or Read normal I/O requests hits
APFNWRI  EQU   *-SSGDAXPF
XPFNWRI  DS    XL4      12-15   Write normal I/O request
APFNDFWH EQU   *-SSGDAXPF
XPFNDFWH DS    XL4      16-19   Dasd First Write I/O request hits
APFSSRH  EQU   *-SSGDAXPF
XPFSSRH  DS    XL4      20-23   Search or Read sequential I/O requests
APFSSRHH EQU   *-SSGDAXPF
XPFSSRHH DS    XL4      24-27   Search or Read sequential I/O req Hits
APFSWRI  EQU   *-SSGDAXPF
XPFSWRI  DS    XL4      28-31   Write sequential I/O requests
APFSDFWH EQU   *-SSGDAXPF
XPFSDFWH DS    XL4      32-35   Dasd First Write sequential req hits
APFRCFW  EQU   *-SSGDAXPF
XPFRCFW  DS    XL4      36-39   Search or Read cache fast write I/O req
APFRCFWH EQU   *-SSGDAXPF
XPFRCFWH DS    XL4      40-43   Search or Read cache fast write req hit
APFCFW   EQU   *-SSGDAXPF
XPFCFW   DS    XL4      44-47   Cache fast write I/O requests
APFCFWH  EQU   *-SSGDAXPF
XPFCFWH  DS    XL4      48-51   Cache fast write I/O request hits
APFINH   EQU   *-SSGDAXPF
XPFINH   DS    XL4      52-55   Inhibit cache loading I/O requests
APFBYP   EQU   *-SSGDAXPF
XPFBYP   DS    XL4      56-59   Bypass cache I/O requests
APFSDTOC EQU   *-SSGDAXPF
XPFSDTOC DS    XL4      60-63   Sequential DASD to Cache Transfer OP
APFNDTOC EQU   *-SSGDAXPF
XPFNDTOC DS    XL4      64-67   DASD to Cache transfer operation
APFNCTOD EQU   *-SSGDAXPF
XPFNCTOD DS    XL4      68-71   Cache to DASD transfer operation
APFRETRY EQU   *-SSGDAXPF       access DASD directory.
XPFRETRY DS    XL4      72-75   Dasd fast write operations forced to
*                               because of NVS storage constraiton
APFNDFW  EQU   *-SSGDAXPF
XPFNDFW  DS    XL4      76-79   DASD fast write operation counts
APFSDFW  EQU   *-SSGDAXPF
XPFSDFW  DS    XL4      80-83   Dasd fast write sequential write OP cnt
         DS    XL4      84-87   reservcd
         DS    XL1      88      device status - group 2
         DS    XL5      89-93   reserved
APFSSID  EQU   *-SSGDAXPF
XPFSSID  DS    XL2      94-95   SSID
         DSECT
         IEFUCBOB LIST=YES
         PRINT NOGEN
         CVT   DSECT=YES,LIST=YES
PSA      DSECT
         IHAPSA LIST=NO
ASVT     DSECT
         IHAASVT
ASCB     DSECT
         IHAASCB
R00      EQU   00
R01      EQU   01
R02      EQU   02
R03      EQU   03
R04      EQU   04
R05      EQU   05
R06      EQU   06
R07      EQU   07
R08      EQU   08
R09      EQU   09
R10      EQU   10
R11      EQU   11
R12      EQU   12
R13      EQU   13
R14      EQU   14
R15      EQU   15
         END   @LISTD
/*
//SYSLIB   DD  DSN=SYS1.MACLIB,DISP=SHR
//         DD  DSN=SYS1.AMODGEN,DISP=SHR
//SYSUT1   DD  UNIT=(SYSDA,SEP=SYSLIB),SPACE=(CYL,(10,5)),DSN=&SYSUT1
//SYSPUNCH DD  DUMMY
//SYSPRINT DD  SYSOUT=*,DCB=(BLKSIZE=3509),
//         UNIT=(,SEP=(SYSUT1,SYSPUNCH))
//SYSLIN   DD  DSN=TEST.OBJLIB(@LISTD),DISP=OLD
//L       EXEC PGM=IEWL,PARM='MAP,LET,LIST,NCAL,AC=1',
//         REGION=1M,COND=(8,LT,A)
//SYSLIN   DD  DSN=*.A.SYSLIN,DISP=(SHR,PASS)
//         DD  DDNAME=SYSIN
//SYSLMOD  DD  DSN=TEST.LOADLIB(@LISTD),DISP=SHR
//SYSUT1   DD  UNIT=SYSDA,SPACE=(CYL,(3,2)),DSN=&SYSUT1
//SYSPRINT DD  SYSOUT=*,DCB=(RECFM=FB,BLKSIZE=3509)
//* ----------------------------------------------------------------
//DEL     EXEC PGM=IEFBR14
//DD1      DD  DSN=KIMU.TEST.NEW,DISP=(OLD,DELETE),
//         UNIT=SYSALLDA,VOL=SER=VOLSER
//DD2      DD  DSN=KIMU.TEST.SORT,DISP=(OLD,DELETE),
//         UNIT=SYSALLDA,VOL=SER=VOLSER
//* ----------------------------------------------------------------
//DESTAGE  EXEC  PGM=IDCAMS
//SYSPRINT  DD SYSOUT=*
//SYSIN     DD   *
 SETCACHE VOLUME(TRGVOL) UNIT(3390) DESTAGE
/*
//* ----------------------------------------------------------------
//G1     EXEC  PGM=*.L.SYSLMOD,COND=((8,LT,A),(4,LT,L)),
//         PARM='VOL(TRGVOL),NOREPORT'
//HISTIN   DD  DSN=KIMU.TEST.OUT,DISP=(OLD,KEEP),
//         UNIT=SYSALLDA,VOL=SER=VOLSER
//HISTOUT  DD  DSN=KIMU.TEST.NEW,DISP=(,CATLG),
//         UNIT=SYSALLDA,VOL=SER=VOLSER,SPACE=(CYL,(10,10))
//REPORT   DD  SYSOUT=*
//* ----------------------------------------------------------------
//LISTD1   EXEC  PGM=IDCAMS
//SYSPRINT  DD SYSOUT=*
//SYSIN     DD   *
 LISTDATA COUNTS VOLUME(TRGVOL) UNIT(3390) DEVICE
/*
//* ================================================================
//TEST    EXEC PGM=IEBDG
//OUTDD1   DD  DSN=&&TEST,DISP=(,DELETE),UNIT=SYSALLDA,
//         VOL=SER=TRGVOL,SPACE=(CYL,(10,10)),
//         DCB=(RECFM=FB,LRECL=1000,BLKSIZE=0)
//SYSPRINT DD  SYSOUT=*
//SYSIN    DD  *
   DSD OUTPUT=(OUTDD1)
   FD  NAME=FLD1,LENGTH=1000,STARTLOC=001,FORMAT=AN,ACTION=RP
   CREATE QUANTITY=1000,NAME=(FLD1)
//* ================================================================
//SORT    EXEC PGM=ICEMAN
//SYSOUT   DD SYSOUT=*
//SYSPRINT DD SYSOUT=*
//SORTIN   DD DSN=KIMU.TEST.NEW,DISP=(OLD,KEEP)
//SORTOUT  DD DSN=KIMU.TEST.SORT,DISP=(,CATLG),
//         UNIT=SYSALLDA,VOL=SER=VOLSER,SPACE=(CYL,(10,10))
//SYSIN    DD *
 SORT FIELDS=(25,2,BI,A,9,4,BI,A,1,8,BI,A)
/*
//* ----------------------------------------------------------------
//LISTD2   EXEC  PGM=IDCAMS
//SYSPRINT  DD SYSOUT=*
//SYSIN     DD   *
 LISTDATA COUNTS VOLUME(TRGVOL) UNIT(3390) DEVICE
/*
//* ----------------------------------------------------------------
//G2      EXEC PGM=*.L.SYSLMOD,COND=((8,LT,A),(4,LT,L)),
//         PARM='VOL(TRGVOL),NOHISTORY,NOINTERVAL'
//HISTIN   DD  DSN=KIMU.TEST.SORT,DISP=(OLD,KEEP),
//         UNIT=SYSALLDA,VOL=SER=VOLSER
//REPORT   DD  SYSOUT=*
//* ----------------------------------------------------------------
//G3      EXEC PGM=*.L.SYSLMOD,COND=((8,LT,A),(4,LT,L)),
//         PARM='VOL(TRGVOL),NOHISTORY,INTERVAL'
//HISTIN   DD  DSN=KIMU.TEST.SORT,DISP=(OLD,KEEP),
//         UNIT=SYSALLDA,VOL=SER=VOLSER
//REPORT   DD  SYSOUT=*
//* ----------------------------------------------------------------
//ALTER   EXEC PGM=IDCAMS,COND=((8,LT,A),(4,LT,L))
//SYSPRINT DD  SYSOUT=*
//SYSIN    DD  *
 DELETE KIMU.TEST.OUT PURGE
 DELETE KIMU.TEST.NEW PURGE
 SET LASTCC = 00
 ALTER  KIMU.TEST.SORT NEWNAME(KIMU.TEST.OUT)
