FTN4
      PROGRAM QY06(5,90),92069-16060 REV.1912 790111
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-18069
C     RELOC:     92069-16060
C 
C 
C************************************************************ 
C 
C 
C  REPORT GENERATION MODULE #1
C 
C     THIS IS THE INITIALIZATION MODULE 
C 
C 
C  REPORT GENERATION IS MADE UP OF THREE MODULES: 
C  1) QS06 - INITIALIZATION 
C  2) QS15 - CONTROL BREAKS AND GROUP/DETAILS 
C  3) QS12 - TOTALS 
C  4) QS20 - GROUPS/DETAILS 
C 
C  THE PURPOSE OF THESE MODULES IS TO 
C  GENERATE A REPORT BASED ON THE S TABLE.
C  IT IS ASSUMED THAT ALL LOGIC AND SYNTAX
C  ERRORS HAVE BEEN CORRECTED.
C 
C  REPORT TABLE FORMAT IN ARRAY S(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  = 0 IMPLIES EDIT LEVEL 0
C                       1 IMPLIES ZERO SUPRESS
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     T ARRAY IS USED TO HOLD 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 
C 
C 
      LOGICAL IFTTY 
      INTEGER CS(66)
      INTEGER ERR1(8) 
      INTEGER ERR2(12)
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   $$$$$$$$$$$$$$$$$$$$$
      DATA ERR1/2H I,2HNT,2HER,2HNA,2HL ,2HER,2HRO,2HR /
      DATA ERR2/2H I,2HLL,2HEG,2HAL,2H L,2HU ,2HLO,2HCK,
     &    2H R,2HEQ,2HUE,2HST/
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C 
C BEGIN 
C 
C LOCK THE LIST LU
C 
      CALL LUREQ(RMOTE,1,ILP,IERR)
      IF(IERR .NE. 0) GOTO 7010 
      CALL TOPAG(RMOTE,ILP,IERR)
C 
C INITIALIZE THE RECORD COUNT 
C 
1     CONTINUE
      RCOUNT = RRCNT
C 
C 
C 
C 
C 
C 
      DO 2 J=1,5
      DO 2 I=1,6
2     ATOTAL(I,J) = 0 
C 
C 
C 
C 
C     CHECK IF "PAGENO" EXISTS AMONG HEADERS
C 
      PAGCNT = -1 
      DO 160 J=1,R3 
      IF (SS(1,J).LT.20) GO TO 160
      IF (SS(1,J).GT.30) GO TO 170
      IF (SS(2,J).EQ.0) GO TO 160 
      PAGCNT = 1
160   CONTINUE
C 
C 
C 
170   DO 171 J=1,5
      T(J) = -1 
      U(1,J) = 0
      DO 171 I=2,7
      U(I,J) = 0
  171 CONTINUE
C 
C     INITIALIZE STRINGS TO NULL
C 
      DO 200 I = 1,5
      LEVLEN(I) = 0 
200   CONTINUE
C 
C  PUT SORT LIST-ARRAY OFFSET IN "T"
C 
      R5 = 0
      DO 330 J=1,R3 
      I = SS(1,J) 
      IF (I.GT.20) GO TO 240
      IF (I.EQ.10) GO TO 330
      N = I - 10
      T(N) = SS(7,J)
      GO TO 330 
  240 IF (I.GT.40) GO TO 335
      IF (I.LT.30) GO TO 330
      IF (SS(7,J).EQ.0)  GO TO 330
C 
C  PUT TOTAL LIST-ARRAY OFFSET IN "U" 
C 
      IDATA = SS(7,J) 
      DO 310 J1=1,5 
      I = U(1,J1) 
      IF(I.EQ.0) GO TO 320
      IF(I.EQ.IDATA) GO TO 330
  310 CONTINUE
C 
C INTERNAL ERROR
C 
      CALL ERIO(2,ITTY,ERR1,8)
      GOTO 330
C 
C 
C 
320   CONTINUE
      U(1,J1) = IDATA 
C 
C END OF LOOP 
C 
330   CONTINUE
C 
C 
C 
C 
C 
C 
C 
C 
C 
C     L(7) IS A SWITCH WHICH IS SET TO NOT RECOGNIZE
C     A CONTROL BREAK ON FIRST DETAIL RECORD READ 
C     (TOTAL PRINTING SUPPRESSION). 
C 
C     L(1) TO L(5) ARE RESET WHEN A CONTROL BREAK 
C     OCCURS AT THAT LEVEL. 
C     L(6) IS RESET WHEN THE LAST RECORD
C     IS ENCOUNTERED. 
C 
335   CONTINUE
      DO 340 I = 1,7
      L(I) = -1 
340   CONTINUE
C 
C  READ QSKIB INTO 'IB' 
C 
      CALL EXEC(1,IDILU,IB,-R6,TRKNM,0) 
C 
C INITIALIZE PROPER COUNTERS
C 
      LNCNT = 0 
      CALL SFILL(CS,1,COLLIM,40B) 
      CALL PHDRI(CS)
C 
C INITIALIZE SELT BUFFER
C 
      RCOUNT = RRCNT
      RSEC = DBLEI(1) 
      CALL EREAD(JDCB,ISTAT,SELT,128,IL,RSEC) 
      IF(ISTAT .GE. 0) GOTO 350 
      CALL FMERR(ISTAT,ITTY)
      SNAM(2) = 2H
      GOTO 360
C 
C 
C 
350   CONTINUE
      RSEC = DIN(RSEC)
      IPTR = 9
C 
C  LOAD REPORT MODULE QS15
C 
      SNAM(2) = 2H15
360   CALL LOAD(SNAM) 
C 
C 
C 
C ILLEGAL LU LOCK REQUEST 
C 
C 
7010  CONTINUE
      CALL ERIO(2,ITTY,ERR2,12) 
      SNAM(2) = 2H
      GOTO 360
      END 
$ 
                                                                              