*DECK REPORTG 
USETEXT DNTEXT
USETEXT RPTEXT
PROC REPORTG; 
          BEGIN 
          ITEM
                 PLTPTR       I,
                 RGDNATPTR, 
                 AUXINDEX,
                 PAGEAUXINDX, 
                 NGVINDEX;
  
          XREF   PROC   REPORTH;
          XREF   PROC   PAGEH;
          XREF   PROC   PAGEF;
          XREF   PROC   REPORTF;
          XREF   PROC   BODYGRP;
  
  
          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 TABLNAMES 
          CONTROL EJECT;
  
  
  
  
  # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *#
  # * #   EPTRACE("REPORTG")                                       # * #
  # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *#
  
  
          #REPORTG WILL FIRST PREPARE SOME INFORMATION# 
          #IN ORDER TO PROVIDE ALL ROUTINES IT CALLS  WITH EASIER#
          #ACCESS TO THAT INFORMATION.  IT WILL PROVIDE SEQUENCE #
          #OF LINE NUMBER CLAUSES-SEQOFLN- = AR, R, NPR, NULL$LN# 
          # IF NO LINE NUMBER SPECIFIED IN REPORT GROUP.  # 
          #NOTE THAT-#
          #AR, R, AND NPR (AS DEFINED IN SECTION 6.13.5.3 OF# 
          #THE JOD/ERS) WILL BE SET AS SUCH BASED ONLY ON THE#
          #FIRST LINE NUMBER SPEC ENCOUNTERED IN THE REPORT#
          #GROUP - BECAUSE IF THE USER HAS MADE AN ERROR IN THE#
          #LN SPECS (EG.- PUTTING A NEXTPAGE SPEC SOMEWHERE#
          #AFTER AN ABSOLUTE SPEC) THIS HAS ALREADY BEEN# 
          #DIAGNOSED --#
          #AND CURRENT APPROACH WILL BE TO CONTINUE ANALYSIS# 
          #AS BEST AS POSSIBLE. DNAT INDEX TO FIRST LINE NUMBER SPEC# 
          #INDX1STLN (IF WAS LN SPEC., OF COURSE).  TYPE OF NEXT# 
          #GROUP CLAUSE SPECIFICATION IF ANY# 
          #TNEXTGROUP = A= R= NP= NULLNG ( IF NO NEXT-GROUP CLAUSE# 
          #SPECIFIED  ). STRING VALUE OF NEXT-GROUP-INTEGER#
          #SVNGINTEGER = STRING VALUE OF WHATEVER USER# 
          #SPECIFIED FOR NG INT.  IF TYPENG = 1 OF R.  IF PAGE #
          #CLAUSE WAS SPECIFIED OR OMITTED# 
          #IPAGECLAUSPC = YES= NO ( IF OMITTED OR PAGE LIMIT# 
          #SERIOUSLY DEFICIENT  )#
  
          FOR RGDNATPTR = DNATPOINTER STEP 1 UNTIL LASTRGDNAT DO
              BEGIN 
              AUXINDEX = RP$AUXPTR(RGDNATPTR);
              IF RWGET(RALINENUMPLT,AUXINDEX) NQ  0 
              THEN
                  BEGIN 
                  SEQOFLN = RWGET(RAKINDLINENO,AUXINDEX); 
                  INDX1STLN = RGDNATPTR;
                  GOTO RGBP1; 
                  END 
              END 
  
          #IF REACH HERE IS NO LN SPEC. IN REPORT GROUP, SO#
  
          SEQOFLN = NULL$LN;
RGBP1:  
          IF RDOCURDSWTCH EQ 0
          THEN
              BEGIN 
              IPAGECLAUSPC = 0; 
              GOTO RGBP2; 
              END 
          PAGEAUXINDX = 1 + RP$AUXPTR(CURRDDNAT); 
          IPAGECLAUSPC = RWGET(PAGELIMITBIT,PAGEAUXINDX); 
          IF INHIBITABLDF EQ 1
              #PAGE CLAUSE# 
              #SERIOUSLY DEFICIENT# 
          THEN
              IPAGECLAUSPC = 0; 
          #WILL  BE ABLE TO DO SOME#
          #ANALYSIS - EG. UPPER LIMIT RULE FOR RH#
RGBP2:  
          #DETERMINE NEXT GROUP CLAUSE SPECIFICATION IF ANY#
          $TEMP$ = GETQ(DN$LEVEL,DNAT$,DNATPOINTER);
          IF $TEMP$ EQ 1
              AND 
              RWGET(RANGSPECFIED,RP$AUXPTR(DNATPOINTER)) EQ 1 
          THEN
              BEGIN 
              TNEXTGROUP = RWGET(RATYPENXTGRP,
                           RP$AUXPTR(DNATPOINTER) + 1); 
              IF TNEXTGROUP EQ NP 
              THEN
                  GOTO RGBP3; 
  
              #ELSE CONVERT WHATEVER EXISTS FOR NG-INTEGER# 
  
              PLTPTR = RWGET(RANGINTPLT,RP$AUXPTR(DNATPOINTER)+1);
              SVNGINTEGER = PLTCNVRT(PLTPTR); 
              GOTO RGBP3; 
              END 
          TNEXTGROUP = NULLNG;
RGBP3:  
          IF  GETQ(DN$LEVEL,DNAT$,DNATPOINTER) EQ 1 
          THEN
              BEGIN 
              SWITCH RGTYPE NOCASE,RHCASE,PHCASE,CHCASE,DECASE, 
                            CFCASE,PFCASE,RFCASE; 
              $TEMP$ = RWGET(RATYPERGROUP,RP$AUXPTR(DNATPOINTER));
              GOTO RGTYPE[$TEMP$];
  
NOCASE: 
              GOTO ENDREPORTG;
  
RHCASE: 
              BEGIN 
              REPORTH;
              GOTO ENDREPORTG;
              END 
  
PHCASE: 
              BEGIN 
              PAGEH;
              GOTO ENDREPORTG;
              END 
  
CHCASE: 
DECASE: 
CFCASE: 
              BEGIN 
              BODYGRP;
              GOTO ENDREPORTG;
              END 
  
PFCASE: 
              BEGIN 
              PAGEF;
              GOTO ENDREPORTG;
              END 
  
RFCASE: 
              BEGIN 
              REPORTF;
              GOTO ENDREPORTG;
              END 
              END  #OF THEN # 
ENDREPORTG: 
  
  # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *#
  # * #   EXTRACE("REPORTG")                                       # * #
  # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *#
  
          END #REPORTG# 
          TERM
