*DECK CGSTART                                                            CGSTART
          IDENT  CGSTART                                                 CGSTART
          TITLE  CGSTART -  MAIN INTERPRETIVE VERB LOOP 
  
          MACHINE  ANY,I
          SST 
          COMMENT  MAIN INTERPRETIVE VERB LOOP
          SPACE  4
**        CGSTART -  MAIN INTERPRETIVE VERB LOOP
* 
*         THIS CODE ADVANCES THE GTEXT POINTER TO THE NEXT VERB ATOM, 
*         DECODES THE GTEXT FOR THE NEW VERB INTO THE REGTABLE, 
*         AND THEN BRANCHES TO THE INTERPRETIVE PROCESSOR FOR THE VERB. 
*         AFTER PROCESSING THE VERB, CONTROL RETURNS HERE 
*         AND THE CYCLE IS REPEATED 
*         UNTIL AN -END- VERB IS ENCOUNTERED. 
  
  
  
  
  
  
  
 CONTROL  OPSYN  NIL
  
*CALL CCT 
  
  
  
  
          EJECT 
 GSTART   MODULE                                                         CGSTART
  
*      LINKAGE FROM CALLING ROUTINES IN OTHER MODULES 
  
 CGSTART  KNIL   CGSTART
 BADVERB  KNIL   BADVERB
 ADNAT    KNIL   ADNAT
 SUBDNAT  KNIL   SUBDNAT
 ENDRUN   KNIL   CGENDRN
 ADPDNAT  KNIL   ADPDNAT     * FROM GMOVE, GSTRING
  
*      LINKAGE TO CALLED ROUTINES IN OTHER MODULES
  
 FLUSHPL  LINK   FLUSHPL     * TO FLUSHPL 
 SETLIT   LINK   SETLIT 
 CGPDNAT  LINK   CGPDNAT
 ADVANCE  EXECUTE CGADV                                                  CGSTART
          RETURN                                                         CGSTART
 REGMOVE  EXECUTE  CGREGMV
          RETURN
 CCGPDNAT EXECUTE  CGPDNAT
          RETURN
  
          EJECT 
  
************************************************************************ CGSTART
*                                                                      * CGSTART
*  FOLLOWING IS THE INTERPRETIVE MAIN VERB LOOP FOR C-GEN. THIS CODE   * CGSTART
*  ADVANCES THE GTEXT POINTER TO THE NEXT VERB ATOM, DECODES THE GTEXT * CGSTART
*  FOR THE NEW VERB INTO THE REGTABLE AND THEN BRANCHES TO THE         * CGSTART
*  INTERPRETIVE PROCESSOR FOR THE NEW VERB. AFTER PROCESSING THE VERB, * CGSTART
*  CONTROL IS RETURNED HERE AND THE CYCLE IS REPEATED UNTIL AN END     * CGSTART
*  VERB IS ENCOUNTERED, IN WHICH CASE INTERPRETATION CEASES.           * CGSTART
*                                                                      * CGSTART
************************************************************************ CGSTART
                                                                         CGSTART
                                                                         CGSTART
*    THIS IS THE BEGINNING OF THE INTERPRETIVE CODE                      CGSTART
                                                                         CGSTART
 CGSTART  EGO    1                                                       CGSTART
  
*  THIS CODE GENERATES CODE BLOCK INITIALIZATION OTEXT
          GEN    USE$,((USETB$OF,USECODE))
                                                                         CGSTART
*  THIS STATEMENT CALLS THE MAIN VERB LOOP.                              CGSTART
          CALLZ  CGPARSE                                                 CGSTART
                                                                         CGSTART
*      THIS GENERATES THE LAST EXECUTABLE CODE IN A PROGRAM.  IT IS ONLY
*      EXECUTED IF THE PROGRAM FALLS THROUGH TO THE END (NO STOP RUN) 
  
 ENDRUN   LABEL 
          NOTE   ENDRUN 
  
          EXECUTE  FLUSHPL                       FLUSH POOLED LITERALS
          IFTHEN  ((CCTBIT,SEGMENTS),NE,0)
          ANDIF  ((CCTBIT,SUBPROGR),EQ,0) 
            GEN  END$,((LOCAL$OF,FSTLABEL))      END FOR LAST SEGMENT 
          ELSEZ 
            MOVEZ  GPROCREF,(GCODEOF,REGU1) 
            MOVEZ  FSTLABEL,(GPTROF,REGU1)
            GEN    END$,((FWASG$OF,REGU1))       GEN XFER AND END CARD
          ENDIFZ
          STOP                                                           CGSTART
          RETURN
          EJECT 
*  THIS IS THE MAIN VERB LOOP INITIALIZATION AND TERMINATION CODE.       CGSTART
                                                                         CGSTART
 CGPARSE  LABEL                                                          CGSTART
*  THIS IS THE MAIN VERB LOOP. THIS CODE LOOPS ON VERB ATOMS UNTIL AN    CGSTART
*  END VERB IS ENCOUNTERED.                                              CGSTART
                                                                         CGSTART
 DOVERB   LABEL                                                          CGSTART
          CALLZ  ADVANCE           * ADVANCE GTEXT                       CGSTART
                                                                         CGSTART
                                                                         CGSTART
*  A CALLZ IS USED HERE TO SET UP A RETURN LABEL IN THE STACK.           CGSTART
          CALLZ  GOTOVERB          * PERFORM GOTO ON VERB CODE           CGSTART
*  THE GEND VERB CAUSES A RETURN TO THE INITIALIZATION CODE 
*  WHERE INTERPRETATION IS ENDED. 
          IFZ    ((GSCODEOF,REG1),EQ,GEND),RETURN 
          BRANCH DOVERB             * LOOP                               CGSTART
                                                                         CGSTART
 GOTOVERB LABEL                                                          CGSTART
          MOVEZ  (EQUALS,REG1),REGA * INIT VIRTUAL REG PTRS TO GTEXT
          MOVEZ  (EQUALS,REG2),REGB                                      CGSTART
          MOVEZ  (EQUALS,REG3),REGC                                      CGSTART
          MOVEZ  (EQUALS,REG4),REGD                                      CGSTART
          MOVEZ  (EQUALS,REG5),REGE                                      CGSTART
          MOVEZ  (EQUALS,REG6),REGF                                      CGSTART
          MOVEZ  (EQUALS,REG7),REGG 
          GOTOCASE  (GSCODEOF,REG1)                                      CGSTART
  
          PURGMAC  DEF
 DEF      MACRO  WORD 
 M1       MICRO  1,6, WORD
 C"M1"    LINK   C"M1"
          CASE   WORD,C"M1" 
 DEF      ENDM
*CALL GTEXTVB                                                            CGSTART
            ENDCASE                                                      CGSTART
*  ERROR IF THE VERB CODE IS UNRECOGNIZABLE.                             CGSTART
          ERROR  29                                                      CGSTART
          TITLE  BADVERB PROCESSOR
*  THIS CODE TRAPS VERBS WHICH CURRENTLY HAVE NO PROCESSOR               CGSTART
                                                                         CGSTART
 BADVERB  LABEL                                                          CGSTART
          ERROR  37                                                      CGSTART
          RETURN                                                         CGSTART
          TITLE ADNAT PROCEDURE 
************************************************************************ CGSTART
*                                                                      * CGSTART
*  THIS ROUTINE ALLOCATES A DNAT ENTRY FROM THE DNAT TABLE             * CGSTART
*    INPUT IS REGT, WHICH POINTS TO THE REAL REGTABLE ENTRY FOR THE    *
*        DNAT                                                          * CGSTART
*    OUTPUT IS A FAKE DATAREF ATOM IN THE REAL REGTABLE ENTRY, WHICH   * CGSTART
*        POINTS TO THE ALLOCATED DNAT ENTRY, AND AN UPDATED VALUE FOR  * CGSTART
*        CURDNAT, THE NEXT DNAT ENTRY TO BE ALLOCATED                  * CGSTART
*                                                                      * CGSTART
************************************************************************ CGSTART
                                                                         CGSTART
 ADNAT    EGO    4                                                       CGSTART
                                                                         CGSTART
          PUSH   P1 
          PUSH   P2 
          MOVEZ  0,P1 
          MOVEZ  REGT,P2
          CALLZ  REGMOVE
          POP    P2 
          POP    P1 
          MOVEZ  GTEMPREF,(GCODEOF,REGT)
          MOVEZ  TEMPLEVL,(LEVELOF,REGT)
          RETURN                                                         CGSTART
          TITLE  SUBDNAT PROCEDURE
************************************************************************
*                                                                      *
*  THIS ROUTINE RELEASES THE LAST ALLOCATED DNAT ENTRY IN THE POOL OF  *
*  CGEN SCRATCH ENTRIES. ANY REGT ENTRIES WHICH POINT TO IT ARE LEFT   *
*  UNTOUCHED.                                                          *
*                                                                      *
************************************************************************
  
  
 SUBDNAT  EGO    4
          RETURN
          TITLE  ADPDNAT PROCEDURE
**        ADPDNAT - ADD PERMANENT DNAT
* 
*         CALLZ  ADPDNAT
* 
* 
*         CREATES A PERMANENT DNAT. 
*         POINTS REGT TO IT.
*         SETS CODE OF REG TABLE ENTRY = DATAREF. 
*         SETS LEVEL OF DNAT ENTRY
  
  
 ADPDNAT  EGO    4
          PUSH   P1 
          PUSH   P2 
          MOVEZ  0,P1 
          MOVEZ  REGT,P2
          EXECUTE CGREGMV 
          POP    P2 
          POP    P1 
          MOVEZ  (EQUALS,GDATAREF),(GCODEOF,REGT) 
          CALLZ  CCGPDNAT    SET FIXED CELL T1 = INDEX TO NEW DNAT ENTRY
          MOVEZ  T1,(GPTROF,REGT) 
          RETURN
          END                                                            CGSTART
