*DECK CGADV 
USETEXT CCTTEXT 
          PROC  CGADV;
  
#**       CGADV -  ADVANCE TO THE NEXT VERB 
* 
*         FIXED CELL STRNGPTR POINTS TO THE GTEXT ATOM ABOUT TO 
*           BE PROCESSED. 
* 
*         CGADV 
* 
* 
*         ADVANCES TO THE NEXT VERB ATOM. 
*         CALLZ CGSETRG TO SET UP REG TABLE ENTRIES REG1_REG7.
# 
  
  
*CALL M$
  
*CALL FIXCOM
  
*CALL FIXED 
  
*CALL GTEXT 
  
*CALL INT$
  
*CALL REGTABL 
  
*CALL SEGPTR
  
  
*CALL PNAT1 
  
*CALL TABLETYP
  
  
          XREF
              BEGIN 
              PROC  CGABORT;           # INTERNAL COMPILER ERROR       #
              PROC  CGSETRG;           # SET REGTABL FOR NEXT VERB     #
              FUNC  GTEXTATOM    I;    # SPECIFIED GTEXT ATOM          #
              FUNC  VIRTUAL;
              ITEM  CURRLAB I;
              PROC  PRINTOCT; 
              END 
  
          ITEM  I            I;        # SCRATCH                       #
          ITEM  SAVEBEGINREG I;        # TO SAVE FIXED CELL BEGINREG   #
          ITEM   CURSEGMENT  I=-1; # CURRENT SEGMENT NUMBER            #
          ITEM   SX          I=1;  # INDEX INTO SEGPTR TABLE           #
          ITEM   VSX         I;    # VIRTUAL INDEX INTO SEGPTR TABLE   #
  
          DEF  GTEXTPTR      #FIXEDCELL[FIXED"STRNGPTR"]#;
          DEF  LASTREG       #FIXED"REG7"#; 
          DEF  LOOP          #I=I#; 
CONTROL EJECT;
          BEGIN 
  
#      IF NOT ALL SCRATCH DNATS WERE RELEASED,  DIAGNOSE               #
  
          $BEGIN
          $END
  
#      ZERO OUT REG TABL ENTRIES REG1 THROUGH LASTREG                  #
  
          FOR I = FIXED"REG1" STEP 1 UNTIL LASTREG  DO
              BEGIN 
              REGWORD0[I] = 0;                   # WORD 0              #
              REGDNATADDR[I] = 0;                # WORD 1              #
              REGWORD2[I] = 0;                   # WORD 2              #
              REGAUXTADDR[I] = 0;                # WORD 3              #
              END 
  
#      ADVANCE TO NEXT VERB ATOM                                       #
  
          REGGATOM1[FIXED"REG1"] = GTEXTATOM(GTEXTPTR); 
  
          FOR LOOP WHILE REGGCODE[FIXED"REG1"] NQ GVERB  DO 
              BEGIN 
              GTEXTPTR = GTEXTPTR + 1;
              REGGATOM1[FIXED"REG1"] = GTEXTATOM(GTEXTPTR); 
              END 
  
#      IF *END* VERB,  THEN DONE                                       #
  
          IF REGGSCODE[FIXED"REG1"] EQ GEND  THEN 
#*RETURN#     RETURN; 
  
  
#      IF THE SOURCE PROGRAM IS SEGMENTED AND THIS IS A PROCEDURE DEF  #
#      FOR A SEGMENT WE ALTER OUR PROCESSING TO CONTINUE AT THE GTEXT  #
#      ATOM SPECIFIED BY THE NEXT ENTRY IN THE SEGPTR TABLE.           #
  
          IF  CCTSEGMENTS[0] AND NOT CCTSUBPROGR[0] AND 
             REGGSCODE [FIXED"REG1"] EQ GPROC  AND
             PN$PROCKIND [VIRTUAL(TABLETYPE"PNAT$", 
                 REGGPTR [FIXED"REG1"])] EQ 1 
          THEN
              BEGIN 
              VSX = VIRTUAL (TABLETYPE"SEGPTR$", SX); 
             GTEXTPTR = SEGPTRGTEXT [VSX];
              SX = SX + 1;
              REGGATOM1 [FIXED"REG1"] = GTEXTATOM (GTEXTPTR); 
  
#      IF THE NEW SEGMENT HAS A DIFFERENT NUMBER THAN THE ONE WE ARE   #
#      CURRENTLY PROCESSING AND IF IT IS AN OVERLAY WE MUST ZERO THE   #
#      LOCAL LABEL COUNTER                                             #
  
              IF SEGPTRSEGNO [VSX] NQ CURSEGMENT
              THEN
                  BEGIN 
                  CURSEGMENT = SEGPTRSEGNO [VSX]; 
                  IF CURSEGMENT GQ CCTSEGLIMIT  THEN CURRLAB = 0; 
                  END 
  
              END 
  
#      SAVE POINTER TO VERB FOR BACKTRACKING BY GSTRING, ETC.          #
  
          FIXEDCELL[FIXED"VERBPTR"] = GTEXTPTR; 
  
#      PROCESS AND ADVANCE OVER THIS VERB ATOM                         #
  
          REGPNATADDR[FIXED"REG1"] = REGGPTR[FIXED"REG1"];
          GTEXTPTR = GTEXTPTR + 1;
  
#      SET UP THE REMAINDER OF THE ATOMS FOR THIS VERB                 #
  
          SAVEBEGINREG = FIXEDCELL[FIXED"BEGINREG"];
          FIXEDCELL[FIXED"BEGINREG"] = FIXED"REG2"; 
          CGSETRG;
          IF FIXEDCELL[FIXED"BEGINREG"] NQ 2  THEN
              FIXEDCELL[FIXED"BEGINREG"] = SAVEBEGINREG;
  
          END 
          TERM
