STRPDM.COM

     F*---------------------------------------------------------------*
     F*  PROGRAM NAME       : SETGT CONTROL BREAKS EXAMPLE PROGRAM    *
     F*                                                               *
     F*  PROGRAM DESCRIPTION: USING SETGT FOR MULTIPLE CONTROL BREAKS *
     F*                       THIS PROGRAM WILL USE A FILE KEYED BY   *
     F*                       REGION / STATE / CITY TO BREAK AND PRINT*
     F*                       TOTALS FOR EACH CITY, STATE, AND REGION.*
     F*                                                               *
     F*  CREATED BY         : xxxxxxx xxxxxxxx                        *
     F*  CREATE DATE        : xx/xx/xxxx                              *
     F*---------------------------------------------------------------*
     F*  MODIFICATIONS:                                               *
     F*---------------------------------------------------------------*
     F*  MODIFIED BY        :                                         *
     F*  MODIFY DATE        :                                         *
     F*  MODIFICATION       :                                         *
     F*---------------------------------------------------------------*

 
     F* REGIONAL SALES MASTER FILE
     FREGSALES  IF   E           K DISK
     F* KEYED BY REGION/STATE/CITY
     F*
     FQPRINT    O    F  132        PRINTER
     F*         Report
     D
     D*------------------------------------------
     D* REPORT VALUES
     D*------------------------------------------
     D                 DS
     D TIME                    1     12  0
     D TIME_TIM                1      6  0 inz(0)
     D TIME_DAT                7     12  0 inz(0)
     D LineCnt         S              3  0 inz
     D DASH_132        S            132    inz(*all'_')
     D TTL_001         C                   '**   REGIONAL SALES   **'
     D TTL_002         C                   '    BREAKDOWN REPORT    '
     D TOTAL01         S              9  2 INZ
     D TOTALCITY       S              9  2 INZ
     D TOTALSTATE      S              9  2 INZ
     D TOTALREGION     S              9  2 INZ
     D GRANDTOTAL      S             11  2 INZ
     D
     D Program_Status SDS
     D  PR_PGMNAME       *PROC
     D  PR_JOBNAME           244    253
     D  PR_USERID            254    263
     C
     C*---------------------------------------------------------------*
     C* MAINLINE                                                      *
     C*---------------------------------------------------------------*
     C*
     C                   EXSR      $SRALL
     C
     C                   MOVE      *ON           *INLR
     C                   RETURN
     C
     C*-----------------------------------------------------------------
     C* PROCESS ALL SALES RECORDS.
     C*-----------------------------------------------------------------
     C     $SRALL        BEGSR
     C
     C                   Z-ADD     *ZEROS        GRANDTOTAL
     C
     C*                  ----------------------------------
     C*                  RETREIVE FIRST REGION
     C*                  ----------------------------------
     C     *LOVAL        SETLL     REGSALES
     C                   READ      REGSALES                               20
     C
     C                   DOW       *IN20 = *OFF
     C
     C*                  ------------------------------
     C*                  PROCESS A SPECIFIC REGION
     C*                  ------------------------------
     C                   EXSR      $BRREG
     C
     C*                  --------------------------------
     C*                  GET NEXT REGION
     C*                  --------------------------------
     C                   READ      REGSALES                               20
     C
     C                   ENDDO
     C
     C*                  ---------------------------------------
     C*                  PRINT GRAND TOTAL RECORD
     C*                  ---------------------------------------
     C                   EXSR      $LINCNT
     C                   EXCEPT    TOT_001
     C
     C                   ENDSR
     C
     C*---------------------------------------------------------------*
     C* PROCESS ALL RECORDS FOR A GIVEN REGION                        *
     C*---------------------------------------------------------------*
     C     $BRREG        BEGSR
     C
     C                   Z-ADD     *ZEROS        TOTALREGION
     C
     C*                  -----------------------------------
     C*                  LOOP BY REGION FOR ALL STATES
     C*                  -----------------------------------
     C     KEY03         SETLL     REGSALES
     C     KEY03         READE     REGSALES                               33
     C                   DOW       *IN33 = *OFF
     C*                  ------------------------------
     C*                  PROCESS A SPECIFIC STATE
     C*                  ------------------------------
     C                   EXSR      $BRSTA
     C*                  ------------------------------
     C*                  GET NEXT STATE
     C*                  ------------------------------
     C     KEY03         READE     REGSALES                               33
     C                   ENDDO
     C
     C*                  ---------------------------------------
     C*                  PRINT REGION BREAK RECORD
     C*                  ---------------------------------------
     C                   EXSR      $LINCNT
     C                   EXCEPT    BRK_REG
     C
     C*                  -----------------------------------
     C*                  SET FILE TO NEXT REGION
     C*                  -----------------------------------
     C     KEY03         SETGT     REGSALES
     C
     C                   ENDSR
     C
     C*---------------------------------------------------------------*
     C* PROCESS ALL RECORDS FOR A GIVEN STATE                         *
     C*---------------------------------------------------------------*
     C     $BRSTA        BEGSR
     C
     C                   Z-ADD     *ZEROS        TOTALSTATE
     C
     C*                  -------------------------------------
     C*                  LOOP BY REGION / STATE FOR ALL CITIES
     C*                  -------------------------------------
     C     KEY02         SETLL     REGSALES
     C     KEY02         READE     REGSALES                               32
     C                   DOW       *IN32 = *OFF
     C*                  ------------------------------------
     C*                  PROCESS A SPECIFIC CITY
     C*                  ------------------------------------
     C                   EXSR      $BRCTY
     C*                  ------------------------------
     C*                  GET NEXT CITY
     C*                  ------------------------------
     C     KEY02         READE     REGSALES                               32
     C                   ENDDO
     C
     C*                  ---------------------------------------
     C*                  PRINT STATE BREAK RECORD
     C*                  ---------------------------------------
     C                   EXSR      $LINCNT
     C                   EXCEPT    BRK_STA
     C
     C*                  -----------------------------------
     C*                  SET FILE TO NEXT STATE
     C*                  -----------------------------------
     C     KEY02         SETGT     REGSALES
     C
     C                   ENDSR
     C
     C*---------------------------------------------------------------*
     C* PROCESS EVERY RECORD FOR A GIVEN CITY                         *
     C*---------------------------------------------------------------*
     C     $BRCTY        BEGSR
     C
     C                   Z-ADD     *ZEROS        TOTALCITY
     C
     C*                  -----------------------------------
     C*                  PRINT EVERY RECORD FOR CITY AND ADD
     C*                  CITY$$ TO ALL BREAK TOTALS.
     C*                  -----------------------------------
     C     KEY01         SETLL     REGSALES
     C     KEY01         READE     REGSALES                               31
     C                   DOW       *IN31 = *OFF
     C
     C*                  ---------------------------------------
     C*                  PRINT RECORD
     C*                  ---------------------------------------
     C                   EXSR      $LINCNT
     C                   EXCEPT    DTL_001
     C
     C*                  ----------------------------------------
     C*                  ADD CITY$$ FROM FILE TO ALL BREAK TOTALS
     C*                  ----------------------------------------
     C                   EVAL      TOTALCITY = TOTALCITY +FAMOUNT
     C                   EVAL      TOTALSTATE = TOTALSTATE + FAMOUNT
     C                   EVAL      TOTALREGION = TOTALREGION + FAMOUNT
     C                   EVAL      GRANDTOTAL = GRANDTOTAL + FAMOUNT
     C
     C     KEY01         READE     REGSALES                               31
     C                   ENDDO
     C
     C*                  ---------------------------------------
     C*                  PRINT CITY BREAK RECORD
     C*                  ---------------------------------------
     C                   EXSR      $LINCNT
     C                   EXCEPT    BRK_CTY
     C
     C*                  -----------------------------------
     C*                  SET FILE TO NEXT CITY
     C*                  -----------------------------------
     C     KEY01         SETGT     REGSALES
     C
     C                   ENDSR
     C
     C*----------------------------------------------------------
     C*    $LINCNT  This routine checks the line counter and
     C*             prints report headers, as necessary.
     C*----------------------------------------------------------
     C*
     C     $LINCNT       BEGSR
     C*
     C                   IF        LineCnt > 50
     C                   EXCEPT    HEADER                                       Print detail
     C                   EVAL      LineCnt = 0
     C                   ELSE
     C                   EVAL      LineCnt = LineCnt + 1                        Set array index
     C                   ENDIF
     C*
     C                   ENDSR
     C*
     C*
     C*---------------------------------------------------------------*
     C* INITIAL SETUP                                                 *
     C*---------------------------------------------------------------*
     C     *INZSR        BEGSR
     C
     C     KEY01         KLIST
     C                   KFLD                    fREGION
     C                   KFLD                    fSTATE
     C                   KFLD                    fCITY
     C
     C     KEY02         KLIST
     C                   KFLD                    fREGION
     C                   KFLD                    fSTATE
     C
     C     KEY03         KLIST
     C                   KFLD                    fREGION
     C
     C                   TIME                    TIME
     C                   EXCEPT    HEADER
     C
     C                   ENDSR
     C
      *==========================================================
      *  Output Specifications
      *==========================================================
      *----------------------------------------------------------
      *  QPRINT  -  Audit report
      *----------------------------------------------------------
     OQPRINT    E            HEADER      1  1 01
     o                       PR_USERID           10
     O                       TTL_001             77
     O                       TIME_DAT      Y    120
     O                                          126 'Page'
     O                       PAGE          Z    132
     O
     O          E            HEADER         2
     O                                           06 'PgmId:'
     O                       PR_PGMNAME         +01
     O                       TTL_002             77
     O                       TIME_TIM           120 '0 :  :  '
     O
     O
     O          E            HEADER         0
     O                       DASH_132           132
     O
     O          E            HEADER         1
     O*                                             '1234567890'
     O                                           10 'REGION    '
     O                                           20 'STATE     '
     O                                           34 'CITY      '
     O                                           46 '   AMOUNT '
     O*----------------------
     O          E            DTL_001        1
     O                       FREGION             10
     O                       FSTATE              12
     O                       FCITY               34
     O                       FAMOUNT       J     46
     O*----------------------
     O          E            BRK_CTY     2  1
     O                                           32 'Total CITY:          '
     O                       TOTALCITY     J    +01
     O*----------------------
     O          E            BRK_STA     2  1
     O                                           32 'Total STATE:         '
     O                       TOTALSTATE    J    +01
     O*----------------------
     O          E            BRK_REG     2  1
     O                                           32 'Total REGION:        '
     O                       TOTALREGION   J    +01
     O*----------------------
     O*----------------------
     O          E            TOT_001     2  1
     O                                           32 'Total ALL SALES:     '
     O                       GRANDTOTAL    J    +01
     O*----------------------