*DECK NXTGRCL 
USETEXT DNTEXT
USETEXT RPTEXT
PROC NXTGRCL; 
          BEGIN 
  
          #NEXT GROUP ROUTINE#
          #*# 
          #THIS ROUTINE#
          #- DOES ANALYSIS ON ONE REPORT GROUP WITH RESPECT TO# 
          #SYNTAX RULES IN SECTION 6.28.3 ON THE NEXT GROUP#
          #CLAUSE#
  
  
          #DECLARATIONS FOR NEXT GROUP RT#
  
          ITEM
                 PLTPTR       I,
                 NGVINDEX     I,
                 NGVALUE      I,
                 PAGEAUXINDX  I,
                 NGDIAGNO     I,
                 RGDNATPTR    I,
                 NGINDEX      I;
  
  
          ITEM   $TEMP$,
                $DUMMY$;
  
          XREF   PROC         INTERCEPT;
          XREF   FUNC         PLTCNVRT I; 
          XREF   PROC         RWSET    ;
          XREF   PROC         RWSET1   ;
          XREF   PROC         GETNEXT  ;
          XREF   FUNC         RP$AUXPTR;
          XREF   FUNC         RWGET    ;
          XREF   FUNC         RWGET1   ;
  
          DEF    GET          #GETFIELD#; 
          DEF    SET          #SETFIELD#; 
          DEF    GETQ         #GETQUICK#; 
  
  
*CALL RPCOMM
*CALL DNATVALS
*CALL GETSET
*CALL PLT1
*CALL PLTVALS 
*CALL TABLNAMES 
  
  
  
          DEF    M59          #59#; 
          DEF    M60          #60#; 
          DEF    M61          #61#; 
          DEF    M62          #62#; 
          DEF    M63          #63#; 
          CONTROL EJECT;
  
          #INTERNAL PROCEDURE NO. 1#
  
PROC RTNGDIAG;
          BEGIN 
  
          #PARAMETER TO THIS PROCEDURE IS NGDIAGNO THAT#
          #INDICATES WHICH DIAG. IS TO BE OUTPUT# 
  
          ANALONLYRGRP  = 1;
          CALLDDIAG(DNATPOINTER,NGDIAGNO);
          END #RTNGDIAG#
          CONTROL EJECT;
  
  # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *#
  # * #   EPTRACE("NXTGRCL")                                       # * #
  # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *#
  
          #ROUTINE PROCEDURES FOR NEXT GROUP RT#
  
  
          #WILL FIRST DETERMINE IF NEXT GROUP CLAUSE WAS SPECIFIED# 
  
          $TEMP$ = GETQ(DN$LEVEL,DNAT$,DNATPOINTER);
           IF $TEMP$ EQ 1 
              #IF NOT CAN"T CHECK THESE RULES DUE TO# 
              #USER ERROR#
              AND 
              RWGET(RANGSPECFIED,RP$AUXPTR(DNATPOINTER)) EQ 1 
          THEN
              GOTO NGRULE1; 
          ELSE
              GOTO ENDNGRT; 
          #ON TO NEXT RT IF NEXT-GROUP# 
          #NOT SPECIFIED# 
  
          #RULE 6.28.3.1(SEE DIAGNOSTIC BELOW)# 
  
NGRULE1:  
          FOR RGDNATPTR = DNATPOINTER STEP 1 UNTIL LASTRGDNAT DO
              BEGIN 
              IF RWGET(RALINENUMPLT,RP$AUXPTR(RGDNATPTR)) 
                  NQ 0
              THEN
                  GOTO NG2RULE; 
              END 
  
          #DIAGNOSTIC (M59)#
          #REPORT GROUP ENTRY MUST NOT CONTAIN A NEXT GROUP CLAUSE# 
          #UNLESS THE DESCRIPTION OF THAT REPORT GROUP CONTAINS AT# 
          #LEAST ONE LINE NUMBER CLAUSE#
  
          NGDIAGNO = M59; 
          RTNGDIAG; 
  
          #RULE 6.28.3.2# 
          #A NEXT GROUP INTEGER MUST BE A NON-0 (UNSIGNED) INTEGER# 
          #AND MUST NOT EXCEED THREE SIGNIFICANT DIGITS IN LENGTH#
  
NG2RULE:  
          NGINDEX = RP$AUXPTR(DNATPOINTER)  +  1; 
          IF RWGET(RATYPENXTGRP,NGINDEX) EQ  NEXTPAGE 
          THEN
              GOTO NG3RULE; 
          PLTPTR = RWGET(RANGINTPLT,NGINDEX); 
          IF GETQ(PL$TYPE,PLT$,PLTPTR) NQ PLTUNSGNILIT
          THEN
              GOTO NG2DIAG; 
          NGVALUE = PLTCNVRT(PLTPTR); 
          IF NGVALUE EQ 0 
              OR
              NGVALUE GQ 1000 
          THEN
              BEGIN 
NG2DIAG:  
  
              #DIAGNOSTIC (M60)#
              #NEXT GROUP INTEGER MUST BE AN UNSIGNED NON-0 INTEGER#
              #NOT EXCEEDING 3 SIGNIFICANT DIGITS IN LENGTH#
  
              NGDIAGNO = M60; 
              RTNGDIAG; 
              END 
  
          #RULE 6.28.3.3# 
          #IF PAGE CLAUSE IS OMITTED FROM THE RD ONLY A RELATIVE# 
          #NEXT GROUP CLAUSE MAY BE SPECIFIED IN ANY REPORT GROUP#
          #WITHIN THAT RD#
  
NG3RULE:  
          IF RDOCURDSWTCH EQ 0
          THEN
              GOTO NG4RULE; 
          #IS NO VALID CURRDDNAT# 
          PAGEAUXINDX = 1 + RP$AUXPTR(CURRDDNAT); 
          IF RWGET(PAGELIMITBIT,PAGEAUXINDX) EQ 0 
          THEN
              BEGIN 
              IF RWGET(RATYPENXTGRP,NGINDEX)
                  NQ  RELATEVE
              THEN
                  BEGIN 
  
                  #DIAGNOSTIC (M61)#
                  #IF PAGE CLAUSE IS OMITTED FROM RD ONLY A RELATIVE #
                  #NEXT GROUP CLAUSE MAY BE SPECIFIED IN ANY REPORT # 
                  #GROUP WITHIN THAT RD#
  
                  NGDIAGNO = M61; 
                  RTNGDIAG; 
                  END 
              END 
  
          #RULE 6.28.3.4# 
          #THE NEXT PAGE PHRASE OF THE NEXT GROUP CLAUSE MUST NOT BE# 
          #SPECIFIED IN A PAGE FOOTING REPORT GROUP#
  
NG4RULE:  
          IF RWGET(RATYPENXTGRP,NGINDEX) EQ   NEXTPAGE
              AND 
              RWGET(RATYPERGROUP,RP$AUXPTR(DNATPOINTER)) EQ  PF 
              #PAGE FOOTING#
          THEN
              BEGIN 
  
              #DIAGNOSTIC (M62)#
              #NEXT PAGE PHRASE OF NEXT GROUP CLAUSE MUST NOT BE# 
              #SPECIFIED IN A PAGE FOOTING REPORT GROUP#
  
              NGDIAGNO = M62; 
              RTNGDIAG; 
              END 
  
          #RULE 6.28.3.5# 
          #THE NEXT GROUP CLAUSE MUST NOT BE SPECIFIED IN A REPORT# 
          # FOOTING OR PAGE HEADING REPORT GROUPS # 
  
          $TEMP$ = RWGET(RATYPERGROUP,RP$AUXPTR(DNATPOINTER));
          IF $TEMP$ EQ RF OR $TEMP$ EQ PH 
          THEN
              BEGIN 
  
              #DIAGNOSTIC (M63)#
              #NEXT GROUP CLAUSE MUST NOT BE SPECIFIED IN A REPORT# 
              # FOOTING OR PAGE HEADING REPORT GROUP #
  
              NGDIAGNO = M63; 
              RTNGDIAG; 
              END 
ENDNGRT:  
  
  # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *#
  # * #   EXTRACE("NXTGRCL")                                       # * #
  # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *#
  
          END #NXTGRCL# 
          TERM
