*DECK     CCGLINK            CCG MODE LINKAGE ROUTINES
          IDENT  CCGLINK
 CCGLINK  SECT   (CCG MODE LINKAGE ROUTINES.) 
 CCGLINK  SPACE  4,10 
*         IN FTN
          EXT    CO.LOO,CO.LOR,CO.SNAP,CP.NFLS,FV.LGO,F.IL,F.PB 
          EXT    F.REF,LOVER,N.TABLE,WNB= 
  
*         IN IDP
          EXT    PTO
  
*         IN INIT20 
          EXT    FWA21,FWA22,FWA23
  
*         IN PUC
          EXT    BASES,GMC,L.P2SAV,MTD,MTU,O.P2SAV,O.P2USE
          EXT    O.TABS,REFIO,SIZES,T=API,T=APL,T=ASG,T=BLKS,T=CON
          EXT    T=END,T=GL,T=IOA,T=IOI,T=NLST,T=REF,T=SYM,T.END
          EXT    T=CAC,T=CLW,T=CUT,T=DIM,T=ENTP,T=FPI,T=VDI,T.REF,WOF 
          EXT    WO.QC,BINIO
  
*         IN UTILITY
          EXT    CIO=,WTW=
 VALUES   SPACE  4,10 
**        CCG LINKAGE VALUES. 
  
  
 N$EXST   CONENT 0           NUMBER OF *BOS*ES IN ENTIRE IL 
 APCON    CONENT 0           NZ IFF CON. IN APLIST
  
 N.IL     CONENT 0           LENGTH OF IL FILE (WORDS)
  
 O=FE     CONENT 0           ORIGIN OF TABLES PRESERVED ACROSS PASS 2.
 L=FE     CONENT 0           LENGTH DITTO 
  
  
 ERR22    CONENT 0           NZ WHEN ERROR DIAGNOSED IN (2,2) OVERLAY 
 FEL      TITLE  FRONT END LOADER 
 FEL      SPACE  4,10 
**        FEL - FRONT END LOADER. 
* 
*         THIS ROUTINE LOADS THE CCG FRONT END WHICH RESIDES
*         IN THE (2,1) OVERLAY.  CONTROL IS GIVEN TO THE
*         OVERLAY INITIALIZER WHICH TRANSFERS TO
*         THE FRONT END CONTROLLER WHO RETURNS HERE 
*         AT FEL.RTN. 
  
  
 FEL      SUBR   =           ...ENTRY/EXIT... 
  
          LOVER  (2,1),=XFWA21
  
 FEL.RTN  BSSENT 0           ...RETURN FROM FRONT END CONTROLLER
          EQ     EXIT.       EXIT...
          TITLE  CODE GENERATOR LOADER
 CGL      SPACE  4,10 
**        CGL - CODE GENERATOR LOADER.
* 
*         *CGL* DOES THE FOLLOWING -- 
*         FLUSH FILES AND MOVE TABLES TO HIGH CORE. 
*         LOAD CCG OVERLAY AND GIVE CONTROL TO INIT22 WHICH 
*         TRANSFERS TO CCG CONTROLLER (*CCGC*) WHO RETURNS
*         TO     CGL.RTN. 
  
  
 CGL      SUBR   =           ...ENTRY/EXIT... 
  
*         CHECK IF CCG LOAD CAN BE SKIPPED. 
  
          SA1    WO.QC
          MI     X1,CGL6     IF QUICK CHECK (OR ERRORS), SKIP CCG 
          SA1    FV.LGO 
          SA4    CO.LOO 
          BX1    X1+X4
          ZR     X1,CGL6     IF LO=-O AND B=0 
  
*         CCG MUST BE LOADED. 
*         FLUSH IL AND REF FILES. 
  
          WRITER F.IL 
          SA4    CO.LOR      FETCH MASTER REFERENCE FLAG
          ZR     X4,CGL3     IF REFMAP NOT SELECTED 
          SA1    =XREFIO
          MI     X1,CGL2     IF ALREADY ON DISK 
          MX7    -1 
          SA7    A1          INDICATE (T.REF) ON DISK 
  
          IFEQ   CP#RM,7,1   IF 7RM I/O 
          OPEN   =XF.REF
  
 CGL2     SA3    =XT=REF
          SA1    =XT.REF
          WRITEW F.REF,X1,X3
          WRITER =XF.REF     FLUSH REF
          SHRINK T=REF,0
  
*         MOVE TABLES UP AND LOAD CCG 
  
 CGL3     SA1    =XO.P2SAV
          BX6    X1 
          SA6    O=FE 
          RJ     MAT         MOVE ALL TABLES
          SA1    ERR22
          NZ     X1,EXIT.    IF ERROR IN MAT
          RECALL =XF.REF
          REWIND =XF.IL,RCL 
          LOVER  (2,2),=XFWA22
  
 CGL.RTN  BSSENT 0           ...RETURN FROM CCG CONTROLLER
          CALL   UTP         UPDATE TABLE POINTERS
          EQ     EXIT.       EXIT...
  
*         SKIP CCG.  PREPARE FOR GOING DIRECTLY TO (2,3). 
  
 CGL6     SA4    CO.LOR      FETCH MASTER REFERENCE FLAG
          SA1    REFIO
          ZR     X4,CGL7     IF REFMAP NOT SELECTED 
          PL     X1,CGL7     IF REFMAP NOT ON DISK
          SA3    T=REF
          SA1    T.REF
          WRITEW F.REF,X1,X3
          WRITER X2,RCL 
 CGL7     BSS 
          EQ     EXIT.
          TITLE  REAR END LOADER
 REL      SPACE  4,10 
**        REL - REAR END LOADER.
* 
*         LOAD END, MAP, ASSEMBLY PROCESSORS. 
  
  
 REL      SUBR   =           ...ENTRY/EXIT... 
          =X6    -1 
          SA6    BINIO
  
 #RM      IFEQ   CP#RM,7
          SA1    WO.QC
          MI     X1,REL10    IF FATAL ERRORS OR *QC* MODE 
          SA1    CO.LOO 
          SA2    FV.LGO 
          BX1    X1+X2
          ZR     X1,REL10    IF LO=-O AND B=0 
 #RM      ENDIF 
  
          WRITER =XF.PB,RCL  FLUSH PREBINARY
  
 REL10    LOVER  (2,3),=XFWA23
 REL.RTN  BSSENT 0           ...RETURN FROM REAR END CONTROLLER 
          EQ     EXIT.       EXIT...
          TITLE  LINKAGE SUPPORT
 MAT      SPACE  4,10 
**        MAT - MOVE ALL TABLES.
* 
*         PACKS ALL TABLES AND MOVES THEM ABOVE HIGHEST HIGH ADDRESS, 
*         RESERVING (2/3)*L(SYM) BETWEEN HIGHEST TABLE AND NOMINAL FL.
  
  
 MAT      SUBR               ...ENTRY/EXIT... 
  
*         CHECK TRASHED TABLE SIZES.
  
          SB6    =XSIZES     START OF TABLE SIZE VECTOR 
          SB7    =XL.P2SAV   START OF TABLES SAVED ACROSS CCG 
          SX6    0+          INITIALIZE LENGTH
 MAT1     SA1    B6          (X1) = NEXT TABLE SIZE 
          SB6    B6+1        POINT TO NEXT TABLE SIZE 
          IX6    X6+X1       ADD SIZE TO TOTAL
          LT     B6,B7,MAT1  IF MORE TABLES TO GO 
          SA6    MATA        SAVE SIZE OF COMMUNICATED TABLES 
  
 .TEST    IFEQ   TEST,ON     IF TESTMODE
  
  
*         SUBTRACT TABLES PASSED TO CCG.
  
          MACRO  TABSH,PASS1,D1,D2,PASS2
          SA1    =XT=PASS1
          IX6    X6-X1
          ENDM
  
*CALL COMSTAB 
  
          ZR     X6,MAT2     IF ALL TRASHED TABLES EMPTY
          PLINE  MATB,5 
          EQ     MAT3        PRINT TABLE STATISTICS 
  
 MAT2     SA1    =XCO.SNAP
          LX1    1RT
          PL     X1,MAT4     IF SNAP NOT DESIRED
 MAT3     PLINE  MATC,5 
          CALL   PTO         PRINT TABLE ORIGINS
 MAT4     BSS 
 .TEST    ENDIF 
  
*         SUM PRESERVED TABLE SIZES.
  
          SB6    =XL.P2SAV   START OF TABLES SAVED ACROSS CCG 
          SB7    =XT=END     LAST TABLE SIZE WORD 
          SX6    0+          INITIALIZE LENGTH
 MAT5     SA1    B6          (X1) = NEXT TABLE SIZE 
          SB6    B6+1        POIN TO NEXT TABLE SIZE
          IX6    X6+X1       ADD SIZE TO LENGTH 
          LT     B6,B7,MAT5  IF MORE TABLES TO GO 
          SA6    L=FE        SAVE LENGTH OF PRESERVED TABLES
          SA1    MATA 
          IX6    X1+X6       ROOM FOR PRESERVED AND COMMUNICATED TABLES 
  
*         INSURE ENOUGH ROOM ABOVE HHA. 
  
          SA2    RA.ORG+L54.HHA    (X2) = HIGHEST HIGH ADDRESS
          SA3    =XCP.NFLS   (X3) = NOMINAL FL
          IX4    X3-X2       (X4) = AVAILABLE SPACE 
          IX6    X6-X4       (X5) = NEEDED-AVAILABLE
          MI     X6,MAT6     IF ENOUGH ROOM 
          CALL   GMC         GET MORE CORE
          GT     B7,MAT6     IF REQUEST HONORED 
          SX6    2
          SA6    ERR22       INDICATE FL TYPE ERROR 
          EQ     EXIT.
  
*         PACK TABLES UP ABOVE HHA. 
  
 MAT6     SA2    =XCP.NFLS
          SX0    X2-1        FUTURE LWA OF RESERVED TABLES
          SA4    =XT.END-1   (X4) = FWA OF LAST TABLE 
          SA2    =XT=END-1   (X2) = LENGTH OF LAST TABLE
          IX4    X4+X2       (X4) = LWA+1 OF LAST TABLE 
          IX6    X0-X4
          PL     X6,MAT7     IF NO MOVE DOWN NEEDED 
          BX7    X0 
          SA2    =XO.TABS    (X2) = START OF TABLE AREA 
          SA7    MATA        SAVE FUTURE LWA OF PRESERVED TABLES
          BX0    X2          (X0) = FWA TO MOVE TO
          CALL   MTD         MOVE TABLES DOWN 
          SA2    MATA 
          BX0    X2          (X0) = LWA FOR MOVE UP 
 MAT7     CALL   MTU         MOVE TABLES UP 
          SA1    =XO.P2SAV
          BX6    X1 
          SA6    O=FE        START OF PRESERVED TABLES
          EQ     EXIT.
  
 MATA     CON    0           TEMP SAVE CELL 
  
 .T       IFEQ   TEST,ON
 MATB     DIS    5,  -----    *         TRASHED TABLES NOT ALL EMPTY
 MATC     DIS    5,   TABLE STATISTICS ON ENTRY TO THE BRIDGE --
 .T       ENDIF 
 UTP      SPACE  4,10 
**        UTP - UPDATE TABLE POINTERS.
* 
*         UPDATES POINTER FOR TABLES NOT USED DURING CCG. 
  
  
 UTP      SUBR               ...ENTRY/EXIT... 
  
*         SET FWA OF ALL TABLES BELOW O.P2USE TO SAME ORIGIN. 
  
          SB6    =XO.P2USE
          SB7    =XBASES
          SA1    B6          (X1) = FWA OF FIRST (USED) TABLE 
          BX6    X1 
 UTP1     SA6    B7 
          =B7    B7+1 
          LT     B7,B6,UTP1  IF MORE TO GO
  
*         UPDATE FWA OF PRESERVED TABLES. 
  
          SA1    O=FE 
          SB7    =XO.P2SAV
          SB6    =XBASES
          SX6    X1 
          SB7    B7-B6
          SB6    =XN.TABLE
 UTP2     SA6    B7+=XBASES 
          SA1    B7+=XSIZES 
          =B7    B7+1 
          IX6    X6+X1
          LT     B7,B6,UTP2 
          EQ     EXIT.       DONE...
  
  
          LIST   D
          END 
