*DECK C$SEG 
          IDENT  C$SEG
          TITLE  C$SEG - LOAD AND ENTER SEGMENT 
  
          MACHINE  ANY,I
          COMMENT  LOAD AND ENTER SEGMENT 
          SST 
          B1=1
 C.SEGI   SPACE  4,8
**        CBSEG - LOAD AND ENTER SEGMENT. 
* 
*         CALLING SEQUENCE FOR C.SEGI:  
* 
*         SX1    7/(OVERLAY-NUMBER),11/(ORDINAL-INTO-SEGMENT) 
*         RJ     C.SEGI 
* 
*         DOES: 
* 
*         RESETS THE SEGMENT BEING LOADED BACK TO ITS INITIAL STATE,
*         IF IT IS AN INDEPENDENT SEGMENT.  THEN IT ENTERS AT C.SEG.
* 
*         USES: 
* 
*                X - 1, 2, 3, 4, 6, 7.
*                B - 4, 5, 6, 7.
*                A - 1, 2, 3, 4, 6, 7.
  
  
          ENTRY  C.SEGI 
 C.SEGI   EQ     *+400000B   ENTRY
          SA2    C.SEGI      GET RETURN ADDRESS TO GET INTO INDEX AREA
          AX2    30 
          MX7    54 
          SB7    X2-1        (B7) = ADDRESS FROM WHERE CALLED 
          SA2    X2 
          LX1    -11         (X4) = OVERLAY NUMBER
          MX4    -7 
          BX4    -X4*X1 
          SA3    LASTOVL     DO NOT RESTORE IF COMING FROM THE SAME 
          IX3    X3-X4        SEGMENT AS THE ONE BEING ENTERED
          LX1    11          RESTORE X1 
          ZR     X3,C.SEG    IF ALREADY IN
 SGI1     SA2    A2-B1       GET BACK TO START OF INDECES 
          BX3    X7*X2
          NZ     X3,SGI1     HEADER IS 54/0,6/(SEGMENT-LIMIT) 
          IX7    X4+X2       (OVERLAY NO.) + (SEGMENT LIMIT)
          SX7    X7-50-1
          MI     X7,C.SEG    IF NOT AN INDEPENDENT SEGMENT
          SX6    7110B       FORM SX1 OPCODE
          LX6    48 
          SA3    =XC.BINRY
          SX3    X3-2 
          PL     X3,SGI4
 SGI2     SA2    A2+B1       NEXT INDEX ENTRY 
          MX3    12 
          ZR     X2,SGI3     IF AT END
          BX3    X3*X2
          NZ     X3,SGI2     IF NOT A RESET INDEX 
          BX7    X2+X6       FORM ENTRY INDEX FROM RESET INDEX
          AX2    11+30       COMPARE OVERLAY NUMBERS
          MX3    -7 
          BX3    -X3*X2      COMPARE AFFECTED OVERLAY NUMBER
          IX3    X4-X3        WITH THE ONE ABOUT TO BE LOADED 
          NZ     X3,SGI2     IF NOT A MATCH 
          SA7    A2+B1       STORE INTO VERY NEXT ENTRY 
          EQ     SGI2        LOOP 
 SGI4     SA2    A2+B1
          MX3    12 
          ZR     X2,SGI3     END OF INDICES 
          BX3    X3*X2
          NZ     X3,SGI4     NOT ALTER INDEX
          AX2    41 
          MX3    53 
          BX3    -X3*X2 
          IX3    X4-X3
          NZ     X3,SGI4     NOT SAME OVERLAY 
          LX2    41 
          BX7    X2 
          SA7    A2          RESET TO UNALTERED 
          EQ     SGI4 
  
 SGI3     SA2    B7          RELOAD (X1) IN CASE RE-INITIALIZATION
          LX2    30           AFFECTED IT 
          SX1    X2 
 C.SEG    TITLE  C.SEG - MAIN ROUTINE 
**        CALLING SEQUENCE FOR C.SEG: 
* 
*         SX1    7/(OVERLAY-NUMBER),11/(ORDINAL-INTO-SEGMENT) 
*         EQ     C.SEG
* 
*         DOES: 
* 
*         COMPARES THE NUMBER OF THE REQUESTED SEGMENT WITH THAT OF 
*         THE LAST ONE LOADED.  IF DIFFERENT, ISSUES A LOAD REQUEST.
*         THEN ENTERS THE SEGMENT.
  
  
          ENTRY  C.SEG
 C.SEG    BSS    0
          MX7    0           CLEAR *C.SEGR* FLAG
          SA7    ENTFLAG
          MX7    -11         (X7) = ORDINAL 
          BX7    -X7*X1 
          AX1    11          (X6) = OVERLAY NUMBER
          MX2    -7 
          BX6    -X2*X1 
 SEG1     SA7    ORD         SAVE ORDINAL 
          SA6    LASTOVL     VERY MOST-RECENT OVLY ENTERED (FOR C.SEGI) 
          SB4    X7          (B4) = ORDINAL 
          ZR     X6,SEG9     IF DESTINATION IN PERMANENT SEGMENT
          SA2    OVL
          IX3    X2-X6
          ZR     X3,SEG8     IF DESIRED SEGMENT ALREADY IN
          SA6    A2          STORE NEW OVLY NUMBER
          SX1    X6 
          MX7    -6                = -77B 
          IX6    X1+X7             OVLY NR - 77B
          NG     X6,SEG1AA         NOT A SPECIAL OVERLAY NUMBER 
          SX6    X6+B1
          BX1    -X7               =77B 
          LX6    54                AROUND TO TOP OF WORD... 
          BX1    X6+X1       WE WILL USE (77B,OVLY-76B) FOR LOV 
 SEG1AA   BSS    0
          LX1    6           MAKE IT OVLY,00 FOR LOV
          RJ     =XCMM.LOV
          NG     B7,SEG1A    DIDN-T LOAD OK 
          SA2    ORD         GET ORDINAL INTO OVERLAY 
          SX7    B7          XFER ADDRESS 
          SA7    ENT         SAVE IT
          SB4    X2 
          EQ     SEG8 
 SEG1A    SB6    =XCMM.LDV   C.F. OLD BINARY, NEW ONES OMIT THIS GUY
          NG     B6,SGR1     NEW BINARY...ABORT, BAD LOAD 
          SA4    OVL
          SX6    X4+0        RESTORE X6 
          SA4    =XC.SEGFN
          MX7    42 
          BX7    X7*X4       FILE NAME FOR FIRST WORD OF REQUEST
          SX4    X4 
          NZ     X4,SYSLOAD  IF TO LOAD OVERLAY FROM SYSTEM 
          MX2    0           THIRD WORD = 0 
          SA7    PARAM
          SX4    B1          V-BIT ONLY 
 SEG4     MX7    -6 
          IX1    X6+X7       (OVLY NUMBER) - 77B
          SA3    =XC.MINFL   FWA
          MI     X1,SEG5     IF < 77B, USE (ON,0) 
          SX1    X1+B1       OTHERWISE, USE (77B,(ON-76B))
          LX1    54 
          BX6    -X7+X1 
          SX3    X3+2        ADJUST FWA FOR DUMMY OVERLAY 
          SA1    RA100       GET TABLE HEADER 
          MX2    60-6 
          LX1    6
          BX2    -X2*X1      GET TABLE TYPE 
          SX2    X2-54B 
          NZ     X2,SEG5     JP IF NOT A 54 TABLE 
          SX3    X3+4        4 MORE FOR 54 TABLE LOADS
 SEG5     LX6    54 
          SA1    =XC.HHA     LWA = *HHA*
          LX4    41          FORM 2ND WORD
          BX6    X6+X4
          LX1    18 
          BX6    X6+X1
          BX6    X6+X3
          SA6    PARAM+1
          BX7    X2          STORE 3RD WORD 
          SA7    A6+B1
          SX1    PARAM
          RJ     =XCMM.LDV   GO LOAD OVERLAY
          SA1    PARAM+1     FETCH ENTRY ADDRESS AND ERROR FLAGS
          SX7    X1 
          LX1    59-37       LOOK AT BOTH ERROR BITS
          SA7    ENT         SAVE ENTRY 
          BX2    X1 
          LX1    1
          BX2    X2+X1
          MI     X2,SEGERR   IF LOADER ERROR
          SA2    ORD         ORDINAL OR ACTUAL ENTRY ADDRESS
          SB4    X2 
 SEG8     BSS    0
          SA3    C.DCFLG     DECLARATIVE LOAD FLAG
          ZR     X3,SEG8A    JP IF NOT CALLED FROM C$COMIO FOR USE LOAD 
          SB4    X3 
          MX6    0
          SA6    A3 
          JP     B4          GO BACK TO C$COMIO 
 SEG8A    BSS    0
          SA3    ENTFLAG     SEE IF CALLED FROM C.SEGR
          NZ     X3,SEG9     IF CALLED FROM C.SEGR
          SA2    ENT         JUMP TO [(SEGMENT ENTRY) + ORDINAL]
          SB4    X2+B4
 SEG9     JP     B4          ENTER SEGMENT
  
*         LOADING OF SEGMENTS FROM LIBRARIES.  FIRST A 3-WORD CALL
*         SPECIFYING *SYSOVL* IS TRIED.  IF THIS FAILS, A 2-WORD CALL 
*         TO TRY THE LIBRARY SET IS TRIED.
  
 SYSLOAD  BSS    0
          BX1    X6          CONVERT OVLY NUMBER TO DISPLAY 
          RJ     =X_C.R1U02  REGISTER COMP-1 TO UNSIGNED 2-DIGIT DISPLAY
*         USES   X0,A2,X2 
*         SETS X1 = REGISTER NUMERIC RESULT 
          MX7    48 
          SA2    C.OVRLY
          BX6    -X7*X1 
          SA1    OVL
          SB4    8
          SB5    X2 
          SB6    5
          LE     B5,B6,SYS0 
          SB5    B6          5 CHARACTERS 
 SYS0     BSS    0
          SB4    B4-B5       8-NUM
          SB6    B4+B4       *2 
          SB5    B6+B6       *4 
          MX7    30 
          BX2    X7*X2       5 CHARACTERS 
          SB4    B6+B5       *6 
          LX7    B4,X6
          BX2    X7+X2       OVERLAY NAME 
          BX7    X2 
       SA7    PARAM 
          SX4    3           V=1, U=1, N=0
          MX2    0           WORD 3 = 0 
          SA1    OVL         (X6) = OVERLAY NUMBER
          BX6    X1 
          EQ     SEG4        GO COMPLETE ISSUE OF LOAD
  
*         ERROR PROCESSING. 
  
 SEGERR   BSS    0
 SGR1     SX1    #SEGM1      ERROR MESSAGE
          SX2    B0          NO INSERT
          MX3    59          SUPPRESS SOURCE LINE MESSAGE 
          SX6    B1          SPECIFY TO ABORT 
          RJ     =XC.MSG
 C.SEGP   TITLE  ALTERNATE ENTRIES
**        CALLING SEQUENCE FOR C.SEGP:  
* 
*         SX1    18/(ADDRESS-INTO-SEGMENT)
*         EQ     C.SEGP 
* 
*         DOES: 
* 
*         AFTER FETCHING THE INPUT PARAMETERS, IT GOES INTO C.SEG.
* 
*         USES: 
* 
*                X - 1, 2, 3, 4, 6, 7.
*                B - 4, 5, 6, 7.
*                A - 1, 2, 3, 4, 6, 7.
  
  
          ENTRY  C.SEGP 
 C.SEGP   MX6    0           (X6) = OVERLAY NUMBER
          SX7    X1          (X7) = ADDRESS 
          EQ     SEG1        GO INTO C.SEG
 C.SEGR   SPACE  4,10 
**        CALLING SEQUENCE FOR C.SEGR:  
* 
* +       RJ     C.SEGR 
* -       VFD    12/(OVERLAY-NUMBER),18/(ADDRESS-INTO-SEGMENT)
* 
*         DOES: 
* 
*         AFTER FETCHING THE INPUT PARAMETERS, IT GOES INTO C.SEG.
* 
*         USES: 
* 
*                X - 1, 2, 3, 4, 6, 7.
*                B - 4, 5, 6, 7.
*                A - 1, 2, 3, 4, 6, 7.
  
  
          ENTRY  C.SEGR 
 C.SEGR   EQ     *+400000B   ENTRY
          SX6    B1 
          SA6    ENTFLAG
          SA2    C.SEGR 
          MX6    -12
          AX2    30 
          SA2    X2-1 
          SX7    X2          (X7) = ADDRESS 
          AX2    18 
          BX6    -X6*X2      (X6) = OVERLAY NUMBER
          EQ     SEG1        GO INTO C.SEG
 C.SEGPS  SPACE  4
**        C.SEGPS - ENTER PERMANENT SEGMENT IN SUBCOMPILE 
* 
*         CALLING SEQUENCE
*             +  RJ =XC.SEGPS 
*             -  VFD 30/SEGMENT ADDRESS 
* 
*         DOES - SETS CURRENT SEGMENT NUMBER AND ENTERS SEGMENT 
* 
*         USES   A1,A2,A7,B6
* 
          ENTRY  C.SEGPS
 C.SEGPS  DATA   0
          SA1    C.SEGPS
          AX1    30 
          SA2    X1-1 
          SB6    X2          ADDRESS OF SEGMENT 
          MX7    0
          SA7    LASTOVL
          JP     B6 
 C.SEGIS  SPACE  4
**        C.SEGIS - ENTER INDEPENDENT SEGMENT IN SUBCOMPILE 
* 
*         CALLING SEQUENCE
*             +  RJ   =XC.SEGIS 
*             -  VFD  12/OVERLAY NUMBER,30/SEGMENT ADDRESS
* 
*         DOES -  RESET INDEPENDENT SEGMENT TO INITIAL STATE
*                 THEN ENTER IT 
* 
* 
          ENTRY  C.SEGIS
 C.SEGIS  DATA   0
          SA1    C.SEGIS
          AX1    30 
          SA2    X1-1 
          SB6    X2          ADDRESS OF SEGMENT 
          AX2    18 
          MX0    48 
          BX4    -X0*X2      OVERLAY NUMBER 
          SA1    LASTOVL
          IX3    X1-X4
          ZR     X3,SEGIS3   SAME SEGMENT 
          BX7    X4 
          SA7    A1 
          MX3    54 
 SEGIS1   SA2    A2-B1       GO BACK TO START OF INDICES
          BX2    X3*X2
          NZ     X2,SEGIS1   HEADER IS 54/0,6/SEGMENT-LIMIT 
          MX3    30 
          SA1    =XC.BINRY
          SX1    X1-2 
          PL     X1,SEGIS4
 SEGIS2   SA2    A2+B1       NEXT INDEX 
          ZR     X2,SEGIS3   END OF INDICES 
          BX1    X3*X2
          NZ     X1,SEGIS2   NOT RESET INDEX
          LX2    42 
          MX0    48 
          BX0    -X0*X2 
          IX1    X0-X4
          NZ     X1,SEGIS2   DIFFERENT OVERLAY
          LX2    18          REPOSITION 
          SA1    PLUGRJ 
          BX7    X1+X2
          SA7    A2+B1       RESTORE ENTRY INDEX
          EQ     SEGIS2 
 SEGIS3   JP     B6          ENTER SEGMENT
          SPACE  3
 SEGIS4   SA2    A2+B1       NEXT INDEX 
          ZR     X2,SEGIS3   END OF INDICES 
          BX1    X3*X2
          NZ     X1,SEGIS4   NOT ALTER INDEX
          LX2    42 
          MX0    48 
          BX0    -X0*X2 
          IX1    X0-X4
          NZ     X1,SEGIS4   DIFFERENT OVERLAY
          LX2    18 
          MX0    42 
          BX7    X0*X2
          SA7    A2          RESET TO UNALTERED 
          EQ     SEGIS4 
 C.SEGS   SPACE  4
**        C.SEGS - RE-ENTER INDEPENDENT SEGMENT IN SUBCOMPILE 
* 
*         CALLING SEQUENCE
*            +  RJ  =XC.SEGS
*            -  VFD  12/OVERLAY-NO,18/ADDRESS 
* 
*         DOES -  SETS CURRENT OVERLAY NUMBER AND ENTERS SEGMENT
* 
          ENTRY  C.SEGS 
 C.SEGS   DATA   0
          SA1    C.SEGS 
          AX1    30 
          SA2    X1-1 
          SB6    X2          ADDRESS
          AX2    18 
          MX1    48 
          BX7    -X1*X2      OVERLAY-NUMBER 
          SA7    LASTOVL
          JP     B6 
 STORAGE  SPACE  4,20 
          ENTRY  C.OVRLY
 C.OVRLY  CON    0           SET NZ IF SYSTEM LOAD
 LASTOVL  CON    0           LAST OVLY ENTERED, INCLUDING 0 FOR PERM SEG
 OVL      CON    0           OVLY NO. OF LAST SEGMENT LOADED
          ENTRY  C.DCFLG
 C.DCFLG  DATA   0
 C.OVL    EQU    OVL
          ENTRY  C.OVL
 ENT      CON    0           ENTRY ADDRESS OF LAST SEGMENT LOADED 
 ORD      CON    0           ORDINAL TO JUMP TO ENTRY 
 PARAM    BSSZ   3           LDV REQUEST AREA 
 PLUGRJ   RJ     =XC.SEGIS
-         VFD    30/0 
 ENTFLAG  CON    0           NZ IF CALL IS FROM C.SEGR
 RA100    EQU    100B 
  
          END 
