*DECK RG
USETEXT CCTTEXT 
USETEXT DNTEXT
USETEXT RPTEXT
PROC RG;
          BEGIN 
  
          XREF   PROC         G$INIT; 
          XREF   PROC         G$TERM; 
          XREF   PROC         G$SPACE;
          XREF   PROC         G$CNTRL;
          XREF   PROC         G$RHEAD;
          XREF   PROC         G$PHEAD;
          XREF   PROC         G$CHEAD;
          XREF   PROC         G$DTAIL;
          XREF   PROC         G$CFOOT;
          XREF   PROC         G$PFOOT;
          XREF   PROC         G$RFOOT;
          XREF   PROC         G$DUMMY;
          XREF   PROC         G$PAGEA;
          XREF   PROC         G$BNG;
          XREF   PROC         G$BPAGE;
  
  
          ITEM   $TEMP$;
  
  
  
  
          $BEGIN
  
          ITEM   TEMP,
                 TEMP1; 
  
  
          COMMON PARAMS;
          ARRAY  [0:7]; 
             ITEM  PARAMC   C(0, 0, 10);
          $END
  
  
  
*CALL RGCOMM1 
*CALL RGCOMM2 
*CALL GETSET
*CALL TABLNAMES 
  
  
          CONTROL EJECT;
  
  # CHECK DEBUG PARAMS HERE # 
  
          $BEGIN
          #DEBUGGING PARAMETERS FOR RGEN:                              #
          #  1. RGSET- TRACE ALL MODIFICATIONS TO REPORT TABLES.       #
          #  2. RGALL- TRACE ALL REFERENCES TO REPORT TABLES.          #
          #  3. CTEXT- TRACE THE BUILDING OF CTEXT.                    #
          #  4. MOD NAME- TRACE ALL REFERENCES TO REPORT TABLES        #
          #               WHILE THE MODULE IS EXECUTING.               #
          #                                                            #
          #ALL OF THE ABOVE ALSO CAUSE A TRACE OF ALL MODULE CALLS.    #
          #SO DOES ANY OTHER STRING.                                   #
  
          DEBUG$$ = FALSE;
          DEBUG$F1 = 0;   #CLEAR ALL FLAGS #
          IF CCTCHKOUT[0] EQ 0
             OR  PARAMC[0] EQ " " 
          THEN
              GOTO NODEBUG; 
          DEBUG$$ = TRUE; 
          TEMP1 = 0;
          FOR TEMP = 0 STEP 1 WHILE TEMP LQ 7 
                                AND PARAMC[TEMP] NQ " " DO
              BEGIN 
              IF PARAMC[TEMP] EQ "RGALL"
              THEN
                  BEGIN 
                  DB$ALL = 1; 
                  DB$SET = 1; 
                  TEST TEMP;
                  END 
             IF PARAMC[TEMP] EQ "RGSET" 
             THEN 
                 BEGIN
                 DB$SET = 1;
                 TEST TEMP; 
                 END
              IF PARAMC [TEMP] EQ "CTEXT" 
              THEN
                  BEGIN 
                  DB$CTEXT = 1; 
                  TEST TEMP;
                  END 
  
              #ELSE MUST BE A MOD NAME# 
              DEBUG$WORD [ TEMP1 ] = PARAMC [ TEMP] ; 
              TEMP1 = TEMP1 + 1;
              END  # OF FOR TEMP LOOP # 
  
           #STORE BLANK DELIM IN DEBUG$WORD # 
          IF TEMP1 LQ 7 
          THEN
              DEBUG$WORD [ TEMP1 ] = " " ;
NODEBUG:  
          $END
  
  # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *#
  # * #   EPTRACE("RG     ")                                       # * #
  # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *#
  
          #SET UP BASE ADDR OF ARRAY REDEFINING PTRS# 
  
          P<RPWPTRS> = LOC(RPAUXDUM1);
  
          #INITIALIZE UPNLINK#
          RTINITIATE ( UPNLINK ); 
  
  
  
          #GEN RESERVED-WORD VERB 348  TO INDICATE TO P-PARSER# 
          #THE START OF  RG-GENERATED CTEXT#
  
          GENRPRTCTEXT; 
          CURRPRGRDPTR = CCTRWTABADDR;
STARTAREPORT: 
          IF RWGET1(PROGRD$DELIM  #CURRPRGRDPTR#)  EQ 0 
          THEN
              GOTO ENDREPORTGEN;
  
          #GENERATE 1 EOC CTEXT ATOM CONTAINING THE SOURCE LINE NUMBER# 
          #OF THE RD FOR WHICH THE FOLLOWING CTEXT WILL BE GENERATED# 
  
          $TEMP$ = RWGET1(PROGRDREPORT  #CURRRPRGRDPTR#); 
          LINENUM = GETQUICK(DN$LINE,DNAT$,$TEMP$); 
          GENEOC #LINENUM# ;
          CURRIRTPTR = RWGET1(PROGRDIRTBAS  #CURRPRGRDPTR#);
          CURRPRGRDPTR = RWGET1(PROGRDLINK  #CURRPRGRDPTR#);
          G$INIT; 
          G$TERM; 
          G$SPACE;
          G$CNTRL;
          CURRRPTGRPTR =  RWGET1(BASE$REPORTG  #CURRIRTPTR#); 
RGC2: 
          RPTGROUPTYPE = RWGET1(RGTYPEOFRG  #CURRRPTGRPTR#);
          SWITCH RGPTYPE RGX,CASE1,CASE2,CASE3,CASE4,CASE5, 
                         CASE6,CASE7; 
          GOTO RGPTYPE[RPTGROUPTYPE]; 
CASE1:  
              BEGIN 
              G$RHEAD;
              GOTO RGX; 
              END 
CASE2:  
              BEGIN 
              G$PHEAD;
              GOTO RGX; 
              END 
CASE3:  
              BEGIN 
              G$CHEAD;
              GOTO RGX; 
              END 
CASE4:  
              BEGIN 
              G$DTAIL;
              GOTO RGX; 
              END 
CASE5:  
              BEGIN 
              G$CFOOT;
              GOTO RGX; 
              END 
CASE6:  
              BEGIN 
              G$PFOOT;
              GOTO RGX; 
              END 
CASE7:  
              BEGIN 
              G$RFOOT;
              GOTO RGX; 
              END 
RGX:  
          IF  RWGET1(RGEOTDELIM  #CURRRPTGRPTR#) NQ 1 
          THEN
              BEGIN 
              CURRRPTGRPTR =  RWGET1(RGTLINK  #CURRRPTGRPTR#);
              GOTO RGC2;
              END 
          CURRCNTRLPTR =  RWGET1(BASE$CNTROLS  #CURRIRTPTR#); 
MAYBEDUMLOOP: 
          IF  RWGET1(EOCDELIMITER  #CURRCNTRLPTR#) EQ 1 
          THEN
              GOTO  CHER$IRTLINK; 
          IF  RWGET1(GEN$DUMCFBIT  #CURRCNTRLPTR#) EQ 0 
          THEN
              G$DUMMY;
          CURRCNTRLPTR = RWGET1(CONTROLSLINK  #CURRCNTRLPTR#);
          GOTO MAYBEDUMLOOP;
CHER$IRTLINK: 
          IF  RWGET1(QUEST$PAGECL  #CURRIRTPTR#) EQ 1 
          THEN
              BEGIN 
              G$PAGEA;
              G$BNG;
              G$BPAGE;
              END 
          GOTO STARTAREPORT;
ENDREPORTGEN: 
         IF CCTPDCTXLEN NQ 0 THEN 
           CCTPDCTXLEN = CCTCTEXTLEN; 
  
  # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *#
  # * #   EXTRACE("RG     ")                                       # * #
  # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *#
  
          RETURN; 
  
  
          END #RG#
          TERM
