Complete ICETOOL job and TOOLMSG output

Here is the complete ICETOOL job you created in this chapter:

Figure 1. Complete ICETOOL Job (Part 1 of 2)
//EXAMP    JOB   A492,PROGRAMMER
//TOOL     EXEC  PGM=ICETOOL
//TOOLMSG  DD    SYSOUT=A
//DFSMSG   DD    SYSOUT=A
//TOOLIN   DD    *

* Statistics from all branches
STATS FROM(ALL) ON(18,4,ZD) ON(28,6,PD) ON(22,6,PD)
* Books from VALD and WETH
SORT FROM(BKS) TO(DAPUBS,PRPUBS) USING(SPUB)
* Separate output for California and Colorado branches
SORT FROM(ALL) USING(CACO)
* California branches profit analysis
  RANGE FROM(CADASD) ON(28,6,PD) HIGHER(-1500) LOWER(+8000)
* Branches with less than 32 employees
  RANGE FROM(ALL) ON(18,4,ZD) LOWER(32)
* Print profit, employees, and city for each Colorado branch
DISPLAY FROM(CODASD) LIST(OUT) ON(28,6,PD) ON(18,4,ZD)  ON(1,15,CH)
* Print a report for the Colorado branches
DISPLAY FROM(CODASD) LIST(RPT) -
  DATE TITLE('Colorado Branches Report') PAGE -
  HEADER('City') HEADER('Profit') HEADER('Employees') -
  ON(1,15,CH) ON(28,6,PD) ON(18,4,ZD) BLANK BETWEEN(5) -
  TOTAL('Total') AVERAGE('Average')-
  MINIMUM('Lowest') COUNT('Number of cities')
* Print a report of books for individual publishers
DISPLAY FROM(DAPUBS) LIST(SECTIONS) -
   TITLE('BOOKS FOR INDIVIDUAL PUBLISHERS') PAGE -
   HEADER('TITLE OF BOOK')  ON(1,35,CH) -
   HEADER('PRICE OF BOOK') ON(170,4,BI,C1,F'$') -
   BTITLE('PUBLISHER:') BREAK(106,4,CH) -
   BAVERAGE('AVERAGE FOR THIS PUBLISHER') -
   BTOTAL('TOTAL FOR THIS PUBLISHER') -
   AVERAGE('AVERAGE FOR ALL PUBLISHERS') -
   TOTAL('TOTAL FOR ALL PUBLISHERS')
* Print the count of books in use from each publisher
OCCUR FROM(BKIN) LIST(PUBCT) BLANK -
  TITLE('Books from Publishers') DATE(DMY.) -
  HEADER('Publisher') HEADER('Books Used') -
  ON(106,4,CH) ON(VALCNT,N05)
* Separate output containing records for publishers
* with more than 4 books in use
SELECT FROM(BKIN) TO(BKOUT) ON(106,4,CH) HIGHER(4)
* Reformat REGION.IN1 to T1 so it can be spliced
  COPY FROM(REGNIN1) TO(T1) USING(CTL1)
* Reformat REGION.IN2 to T1 so it can be spliced
  COPY FROM(REGNIN2) TO(T1) USING(CTL2)
* Splice records in T1 with matching ON fields
  SPLICE FROM(T1) WITHALL -
    ON(5,5,CH)   -   Region
    WITH(1,4)    -   Office
    WITH(25,4)   -   Employees
    WITH(29,10)  -   Evaluation
    TO(REGNOUT)
/*
//ALL DD DSN=A123456.SORT.BRANCH,DISP=SHR
//BKS    DD DSN=A123456.SORT.SAMPIN,DISP=SHR
//       DD DSN=A123456.SORT.SAMPADD,DISP=SHR
//DAPUBS DD  DSN=&&DSRT,DISP=(,PASS),SPACE=(CYL,(2,2)),UNIT=SYSDA
//PRPUBS DD SYSOUT=A
//SPUBCNTL DD *
 SORT FIELDS=(106,4,A,1,75,A),FORMAT=CH
 INCLUDE COND=(106,4,EQ,C'VALD',OR,106,4,EQ,C'WETH'),
         FORMAT=CH
Figure 2. Complete ICETOOL Job (Part 2 of 2)
/*
//CACOCNTL DD *
  SORT FIELDS=(1,15,CH,A)
  OUTFIL FNAMES=(CADASD,CATAPE),INCLUDE=(16,2,CH,EQ,C'CA')
  OUTFIL FNAMES=(CODASD,COTAPE),INCLUDE=(16,2,CH,EQ,C'CO')
/*
//CADASD DD  DSN=&&CA,DISP=(,PASS),SPACE=(CYL,(2,2)),UNIT=3390
//CATAPE DD DSN=CA.BRANCH,UNIT=3480,VOL=SER=111111,
//  DISP=(NEW,KEEP),LABEL=(,SL)
//CODASD DD  DSN=&&CO,DISP=(,PASS),SPACE=(CYL,(2,2)),UNIT=3390
//COTAPE DD DSN=CO.BRANCH,UNIT=3480,VOL=SER=222222,
//  DISP=(NEW,KEEP),LABEL=(,SL)
//OUT DD SYSOUT=A
//RPT DD SYSOUT=A
//SECTIONS DD SYSOUT=A
//BKIN DD DSN=A123456.SORT.SAMPIN,DISP=SHR
//PUBCT DD SYSOUT=A
//BKOUT DD DSN=A123456.BOOKS1,DISP=(NEW,CATLG,DELETE),
// SPACE=(CYL,(3,3)),UNIT=3390
//REGNIN1 DD DSN=A123456.REGION.IN1,DISP=SHR
//REGNIN2 DD DSN=A123456.REGION.IN2,DISP=SHR
//T1 DD DSN=&&&T1,UNIT=3390,SPACE=(CYL,(5,5)),DISP=(MOD,PASS)
//REGNOUT DD DSN=A123456.REGION.OUT,DISP=(NEW,CATLG,DELETE),UNIT=3390,
//  SPACE=(CYL,(5,5))
//CTL1CNTL DD *
* Move REGION.IN1 fields to their locations for the
* output data set
  OUTREC FIELDS=(5:1,5,      Region
                 10:21,15,   Regional Director
                 39:6,15)    Headquarters
/*
//CTL2CNTL DD *
* Move REGION.IN2 fields to their locations for the
* output data set
  OUTREC FIELDS=(1:1,4,      Office
                 5:5,5,      Region
                25:10,4,     Employees
                29:14,10,    Evaluation
                53:X)
/*

Here is the complete TOOLMSG data set produced by running this job:

Figure 3. Complete TOOLMSG Data Set. (Part 1 of 2)
ICE600I 0 DFSORT ICETOOL UTILITY RUN STARTED

ICE650I 0 VISIT http://www.ibm.com/storage/dfsort FOR ICETOOL PAPERS, EXAMPLES AND MORE

ICE632I 0 SOURCE FOR ICETOOL STATEMENTS:  TOOLIN


ICE630I 0 MODE IN EFFECT:  STOP

            * Statistics from all branches
          STATS FROM(ALL) ON(18,4,ZD) ON(28,6,PD)  ON(22,6,PD)
ICE627I 0 DFSORT CALL 0001 FOR COPY FROM ALL      TO E35  EXIT COMPLETED
ICE628I 0 RECORD COUNT:  000000000000012
ICE607I 0 STATISTICS FOR (18,4,ZD)     :
ICE608I 0   MINIMUM:  +000000000000015, MAXIMUM:   +000000000000035
ICE609I 0   AVERAGE:  +000000000000024, TOTAL  :   +000000000000298
ICE607I 0 STATISTICS FOR (28,6,PD)     :
ICE608I 0   MINIMUM:  -000000000004278, MAXIMUM:   +000000000008276
ICE609I 0   AVERAGE:  +000000000004222, TOTAL  :   +000000000050665
ICE607I 0 STATISTICS FOR (22,6,PD)     :
ICE608I 0   MINIMUM:  +000000000012300, MAXIMUM:   +000000000042820
ICE609I 0   AVERAGE:  +000000000027469, TOTAL  :   +000000000329637
ICE602I 0 OPERATION RETURN CODE:  00

          * Books from VALD and WETH
          SORT FROM(BKS) TO(DAPUBS,PRPUBS) USING(SPUB)
ICE606I 0 DFSORT CALL 0002 FOR SORT FROM BKS      TO OUTFIL    USING SPUBCNTL COMPLETED
ICE602I 0 OPERATION RETURN CODE:  00

          * Separate output for California and Colorado branches
          SORT FROM(ALL) USING(CACO)
ICE606I 0 DFSORT CALL 0003 FOR SORT FROM ALL      TO OUTFIL    USING CACOCNTL COMPLETED
ICE602I 0 OPERATION RETURN CODE:  00

          * California branches profit analysis
            RANGE FROM(CADASD) ON(28,6,PD) HIGHER(-1500)  LOWER(+8000)
ICE627I 0 DFSORT CALL 0004 FOR COPY FROM CADASD   TO E35  EXIT COMPLETED
ICE628I 0 RECORD COUNT:  000000000000007
ICE631I 0 NUMBER OF VALUES IN RANGE FOR (28,6,PD)     :   000000000000003
ICE602I 0 OPERATION RETURN CODE:  00

          * Branches with less than 32 employees
            RANGE FROM(ALL) ON(18,4,ZD) LOWER(32)
ICE627I 0 DFSORT CALL 0005 FOR COPY FROM ALL      TO E35  EXIT COMPLETED
ICE628I 0 RECORD COUNT:  000000000000012
ICE631I 0 NUMBER OF VALUES IN RANGE FOR (18,4,ZD)     :   000000000000008
ICE602I 0 OPERATION RETURN CODE:  00
* Print profit, employees, and city for each Colorado branch
          DISPLAY FROM(CODASD) LIST(OUT) ON(28,6,PD)  ON(18,4,ZD) ON(1,15,CH)
ICE643I 0 WIDTH OF REPORT IS 0121 BYTES
ICE627I 0 DFSORT CALL 0006 FOR COPY FROM CODASD   TO E35  EXIT COMPLETED
ICE603I 0 INFORMATION PRINTED IN OUT      DATA SET
ICE628I 0 RECORD COUNT:  000000000000005
ICE602I 0 OPERATION RETURN CODE:  00

          * Print a report for the Colorado branches
          DISPLAY FROM(CODASD) LIST(RPT) -
            DATE TITLE('Colorado Branches Report') PAGE -
            HEADER('City') HEADER('Profit')  HEADER('Employees') -
            ON(1,15,CH) ON(28,6,PD) ON(18,4,ZD) BLANK BETWEEN(5) -
            TOTAL('Total') AVERAGE('Average')-
            MINIMUM('Lowest') COUNT('Number of cities')
ICE643I 0 WIDTH OF REPORT IS 0121 BYTES
ICE627I 0 DFSORT CALL 0007 FOR COPY FROM CODASD   TO E35  EXIT COMPLETED
ICE603I 0 INFORMATION PRINTED IN RPT      DATA SET
ICE628I 0 RECORD COUNT:  000000000000005
ICE602I 0 OPERATION RETURN CODE:  00
Figure 4. Complete TOOLMSG Data Set. (Part 2 of 2)
          * Print a report of books for individual publishers
           DISPLAY FROM(DAPUBS) LIST(SECTIONS) -
             TITLE('BOOKS FOR INDIVIDUAL PUBLISHERS') PAGE -
             HEADER('TITLE OF BOOK')  ON(1,35,CH) -
             HEADER('PRICE OF BOOK') ON(170,4,BI,C1,F'$') -
             BTITLE('PUBLISHER:') BREAK(106,4,CH) -
             BAVERAGE('AVERAGE FOR THIS PUBLISHER') -
             BTOTAL('TOTAL FOR THIS PUBLISHER') -
             AVERAGE('AVERAGE FOR ALL PUBLISHERS') -
             TOTAL('TOTAL FOR ALL PUBLISHERS')
ICE643I 0 WIDTH OF REPORT IS 0121 BYTES
ICE627I 0 DFSORT CALL 0008 FOR COPY FROM DAPUBS   TO E35  EXIT COMPLETED
ICE603I 0 INFORMATION PRINTED IN SECTIONS DATA SET
ICE628I 0 RECORD COUNT:  000000000000019
ICE602I 0 OPERATION RETURN CODE:  00

          * Print the count of books in use from each publisher
          OCCUR FROM(BKIN) LIST(PUBCT) BLANK -
            TITLE('Books from Publishers') DATE(DMY.) -
            HEADER('Publisher') HEADER('Books Used') -
            ON(106,4,CH) ON(VALCNT)
ICE643I 0 WIDTH OF REPORT IS 0121 BYTES
ICE627I 0 DFSORT CALL 0009 FOR SORT FROM BKIN     TO E35  EXIT COMPLETED
ICE603I 0 INFORMATION PRINTED IN PUBCT    DATA SET
ICE628I 0 RECORD COUNT:  000000000000020
ICE638I 0 NUMBER OF RECORDS RESULTING FROM CRITERIA:   000000000000004
ICE602I 0 OPERATION RETURN CODE:  00

          * Separate output containing records for publishers
          * with more than 4 books in use
          SELECT FROM(BKIN) TO(BKOUT) ON(106,4,CH) HIGHER(4)
ICE627I 0 DFSORT CALL 0010 FOR SORT FROM BKIN     TO BKOUT     COMPLETED
ICE628I 0 RECORD COUNT:  000000000000020
ICE638I 0 NUMBER OF RECORDS RESULTING FROM CRITERIA:   000000000000012
ICE602I 0 OPERATION RETURN CODE:  00

          * Reformat REGION.IN1 to T1 so it can be spliced
            COPY FROM(REGNIN1) TO(T1) USING(CTL1)
ICE606I 0 DFSORT CALL 0011 FOR COPY FROM REGNIN1  TO T1   USING CTL1CNTL COMPLETED
ICE602I 0 OPERATION RETURN CODE:  00

ICE601I 0 DFSORT ICETOOL UTILITY RUN ENDED - RETURN CODE:   00
          * Reformat REGION.IN2 to T1 so it can be spliced
            COPY FROM(REGNIN2) TO(T1) USING(CTL2)
ICE606I 0 DFSORT CALL 0012 FOR COPY FROM REGNIN2  TO T1    USING CTL2CNTL COMPLETED
ICE602I 0 OPERATION RETURN CODE:  00

          * Splice records in T1 with matching ON fields
            SPLICE FROM(T1) WITHALL -
              ON(5,5,CH)   -   Region
              WITH(1,4)    -   Office
              WITH(25,4)   -   Employees
              WITH(29,10)  -   Evaluation
              TO(REGNOUT)
ICE627I 0 DFSORT CALL 0013 FOR SORT FROM T1       TO REGNOUT  COMPLETED
ICE628I 0 RECORD COUNT:  000000000000014
ICE638I 0 NUMBER OF RECORDS RESULTING FROM CRITERIA:  000000000000010
ICE602I 0 OPERATION RETURN CODE:  00
Summary
This chapter introduced the 17 ICETOOL operators, and showed some of the ways you can use them to perform various tasks. For complete information on DFSORT's ICETOOL, refer to z/OS DFSORT Application Programming Guide.