FTN4
      PROGRAM QY15(5,90),92069-16060 REV.1912 790206
C 
C 
C*************************************************************
C (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979.  ALL RIGHTS    *
C RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, RE- *
C PRODUCED, OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITH-  *
C OUT THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.  *
C*************************************************************
C 
C 
C     SOURCE:    92069-18078
C     RELOC:     92069-16060
C 
C 
C************************************************************ 
C 
C 
C 
C 
C 
C  REPORT GENERATION IS MADE UP OF THREE MODULES: 
C  1) QS06 - INITIALIZATION 
C  2) QS15 - CONTROL BREAKS 
C  3) QS12 - TOTALS 
C  4) QS20 - GROUPS/DETAILS 
C 
C 
C  REPORT TABLE FORMAT IN ARRAY SS(6,100).
C  THIS TABLE IS BUILT BY QS02, LOGIC 
C  CHECKED BY QS04, AND SORTED (IF NEEDED)
C  BY QS05. 
C 
C  EACH ROW OF ARRAY S CONTAINS INFORMATION 
C  ABOUT EACH REPORT STATEMENT: 
C 
C     1. REPORT STATEMENT TYPE
C         10-15 SORT STATEMENT
C         21-25 HEADER STATEMENT
C         31-36 TOTAL STATEMENT 
C         41-46 GROUP STATEMENT 
C         50-59 DETAIL STATEMENT
C         60-69 EDIT MASKS
C 
C     2. DATA-ITEM NUMBER 
C 
C     3. LITERAL POINTER TO QSKIB.  QSKIB IS AN RTE TRACK 
C        WHICH CONTAINS ALL LITERALS OR EDIT
C        MASKS IN A2 FORMAT, PRECEDED BY IT'S 
C        CHARACTER LENGTH.
C 
C     4. END PRINT POSITION 
C 
C     5. REPORT OPTION 1
C        UNITS PLACE     = SPACE BEFORE (0-5) 
C        TENS PLACE      = SPACE AFTER  (0-5) 
C        HUNDREDS PLACE  = SKIP BEFORE (0-1)
C        THOUSANDS PLACE = SKIP AFTER (0-1) 
C        TEN THOUSANDS   = ADD (0-1)
C 
C     6. REPORT OPTION 2
C        UNITS PLACE  = O NO EDIT  = 1 ZERO SUPPRESS
C        60 - 69  EDIT MASK 
C        HUNDREDS PLACE  = COUNT (0-1)
C        THOUSANDS PLACE = AVERAGE (0-1)
C 
C     7. OFFSET INTO THE LIST-ARRAY 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C     T ARRAY IS USED TO HOLD INDEX INTO LIST-ARRAY FOR SORT FIELDS 
C 
C     U ARRAY IS USED TO FOR TOTAL COUNT
C        1. FIELD MAP          (1,I)
C        2. ACCUMULATE COUNTS  (2,I) - (7,I)
C 
C     ATOTAL ARRAY IS FOR TOTAL ADD 10*5
C       NOTE: THERE CAN BE NO MORE THAN 10 ITEMS TOTALED ON 
C 
C     LIST ARRAY CONTAINS INFORMATION ABOUT THE DBMS DATA BUFFER
C 
C         FIRST ENTRY IS DIFFERENT THAN THE OTHERS
C            1. CONTAINS # OF ENTRIES IN ARRAY
C            2 - 5. ARE EMPTY 
C            6. CONTAINS THE # OF SORT ITEMS
C                 NOTE: ALL THE SORT ITEMS ARE AT THE TOP OF THE ARRAY
C 
C         OTHER ENTRIES 
C            1. ITEM NUMBER 
C            2. ITEM TYPE 
C            3. ITEM LENGTH 
C            4. ELEMENT COUNT 
C            5. OFFSET INTO DBMS BUFFER 
C            6. CONTAIN THE ITEM NUMBER IFF IT IS A SORT ITEM 
C 
C 
C 
C    LEVSTR ARRAY IS AN 66 BY 5 ARRAY WHICH CONTAINS THE LEVEL BREAK
C     STRINGS 
C 
C    LEVLEN ARRAY CONTAINS THE LENGTHS OF EACH STRING 
C 
C 
C 
C 
C 
      INTEGER ISTAT(10) 
      REAL    RECORD
C$$$$$$$$$$$$$$$$$$$ NOVEMBER 3,1978   $$$$$$$$$$$$$$$$$$$$$
      INTEGER INLU,ITTY,ILP,IDCB,JDCB,XEQ 
      INTEGER DBNAM,DBLEV,DSNAM,DINAM,SELECT,SNAM 
      INTEGER DSNUM,DINUM,PARM,LPARM,ECHO,QSERR 
      INTEGER IMA,IB,IBSZ,SECNO,IEND,ISCAN
      LOGICAL BREAK 
      INTEGER IPFLAG,IOFLAG,RMOTE 
      LOGICAL BATCH,XQBCH 
      INTEGER PAGCNT,LNCNT
      INTEGER PAGLEN,COLLIM 
      REAL    RRCNT 
      REAL    SELT,RSEC 
      INTEGER IPTR
      REAL    RCOUNT
      INTEGER S,R3,TRKNM,IDILU
      INTEGER R6
      REAL    ATOTAL
      INTEGER LIST,L,T,U
      INTEGER LEVSTR,LEVLEN 
      INTEGER IBUFF 
      INTEGER SS(7,100) 
C 
      COMMON INLU(145),ITTY(145),ILP(145),IDCB(145),JDCB(144),XEQ(145)
      COMMON DBNAM(10),DBLEV(3),DSNAM(3),DINAM(3),SELECT(6),SNAM(3) 
      COMMON DSNUM,DINUM,PARM(40),LPARM,ECHO,QSERR
      COMMON IMA(37),IB(896),IBSZ,SECNO,IEND,ISCAN
      COMMON BREAK
      COMMON IPFLAG,IOFLAG,RMOTE
      COMMON BATCH,XQBCH
      COMMON PAGCNT,LNCNT 
      COMMON PAGLEN,COLLIM
      COMMON RRCNT
      COMMON SELT(64),RSEC
      COMMON IPTR 
      COMMON RCOUNT 
      COMMON S(15,50),R3,TRKNM,IDILU
      COMMON R6 
      COMMON ATOTAL(6,5)
      COMMON LIST(101,6),L(7),T(5),U(7,5) 
      COMMON LEVSTR(66,5),LEVLEN(5) 
      COMMON IBUFF(2048)
C 
      EQUIVALENCE (S,SS)
C$$$$$$$$$$$$$$$$$$$ NOVEMBER 3,1978   $$$$$$$$$$$$$$$$$$$$$
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C BEGIN 
C 
      IF(IPTR .LT. 65) GOTO 10
      CALL EREAD(JDCB,ISTAT,SELT,128,IL,RSEC) 
      IPTR = 1
      RSEC = DIN(RSEC)
      IF(ISTAT .LT. 0) GOTO 13
C 
C GET THE RECORD NUMBER OF SELECTED DBMS RECORD 
C 
10    CONTINUE
      RECORD = SELT(IPTR) 
      IPTR = IPTR + 1 
C 
C GET THE DBMS RECORD, USING THE LIST ARRAY AS THE PARAMETER LIST 
C IF ALL TH RECORDS ARE REPORTED FORCE A FINAL LEVEL BREAK
C 
      I = 7 
      IF(DCO(RCOUNT,DBLEI(0))) 15,45,12 
12    CALL DBGET(DBNAM,DSNUM,4,ISTAT,LIST,IBUFF,RECORD) 
      RCOUNT = DDE(RCOUNT)
      IF(ISTAT .EQ. 0) GOTO 20
C 
C FMP AND DBMS ERROR  
C 
13    CONTINUE
      QSERR = ISTAT 
      SNAM(2) = 2H23
      GOTO 80 
C 
C GO BACK TO COMMAND INTERPETER 
C 
15    CONTINUE
      SNAM(2) = 2H
      GOTO 80 
C 
C SEE IF THERE IS A LEVEL BREAK 
C 
20    CONTINUE
      IF( T(1) .EQ. -1) GOTO 35 
      DO 30 I=1,5 
      L(I) = -1 
      CALL LVCHK(I,LEVSTR(1,I),LEVLEN(I) )
30    CONTINUE
C 
C SEE IF THERE WAS A LEVEL BREAK
C 
35    CONTINUE
      DO 40 I = 5,1,-1
      IF ( L(I) .NE. -1) GOTO 50
40    CONTINUE
C 
C NO LEVELS BREAKS
C 
      GOTO 70 
C 
C SET RCOUNT SO THE TOTAL PROCESSOR WILL DO THE FINAL TOTALS
C AND THEN EXECUTE THE COMMAND INTERPETER 
C 
45    CONTINUE
      RCOUNT = DDE(RCOUNT)
C 
C LEVEL BREAKS, SET BREAK FOR LOWER LEVELS
C 
50    CONTINUE
      DO 60 I = I,1,-1
      L(I) = 0
60    CONTINUE
C 
C LOAD THE CORRECT PROCESSOR
C 
C IF THIS IS NOT THE FIRST TIME THRUGH OR THERE ARE NO LEVEL
C BREAKS, THEN LOAD AND EXECUTE THE DETAIL/GROUP PROCESSOR (QS20) 
C ELSE LOAD AND EXECUTE THE TOTALS PROCESSOR (QS12) 
C 
C 
      IF( L(7) .EQ. -1) GOTO 70 
      SNAM(2) = 2H12
      GOTO 80 
C 
C 
C LOAD AND EXECUTE THE GROUP/DETAIL PROCESSOR 
C     THIS NEXT SEGMENT ALSO TOTALS THE NECESSARY FIELDS
C 
C 
70    CONTINUE
      SNAM(2) = 2H20
      L(7) = 0
C 
C 
C 
80    CONTINUE
      CALL LOAD(SNAM) 
      END 
                                            