ASMB,R,L,C
       NAM SGMTR,8  6/19/75 SXL SEGMENTER ROUTINE 
.A.     EQU  0
.B.     EQU  1
        ENT SEGNM 
        ENT SEG 
        ENT SGIN2 
         ENT EXBAS
        EXT .ENTR 
        EXT EXEC
SEGNM ASC 2,SG01  CURRENT SEGMENT 
      OCT 46005      NAME BUFFER; TYPE =5 
EXBAS NOP 
S     DEC 1       INITIAL SEGMENT:SG01L 
.2    OCT 176000
.10   DEC 8 
.S    DEF S 
D10   DEC 10
*003  ! 
*010         LET EXEC BE SUBROUTINE,EXTERNAL
*012         LET EXBAS BE INTEGER,GLOBAL
*013  ! 
*014  ! 
*    ENTER HERE DIRECTLY FROM NEW SEGMENT 
FWS     NOP 
SGIN2   NOP 
        JSB .ENTR 
        DEF FWS 
*017         GOTO SEG1
        JMP SEG1
*018         END
*019  ! 
*020  SEG:   FUNCTION(INDEX)GLOBAL
INDEX   NOP 
SEG     NOP 
        JSB .ENTR 
     DEF INDEX
*021  ! 
*022  !LOAD REQUESTED SEGMENT INTO CORE IF NOT ALREADY THERE
*023  !INDEX::REQUESTED SUBROUTINE NUMBER 
*024  ! 
        LDA FWS   HAS A SEGMENT BEEN LOADED YET?
        SZA,RSS    SKIP IF YES
        JMP SEG2     NO--USE INITIAL VALUE OF S 
SEG1    LDA FWS,I GET ADDRESS OF DIRECTORY TABLE. 
        ADA INDEX,I 
*  0 <= TABLE VALUE <2000K THEN USE AS INDEX FOR
*           NEW SEGMENT NAME. 
        LDA .A.,I 
        STA S 
*027         IFNOT S AND 176000K THEN GOTO SEG2 
        AND .2
        SZA,RSS 
        JMP SEG2
      LDA .S
      LDA 0,I  CHASE
      RAL,CLE,SLA,ERA  DOWN 
      JMP *-2           INDIRECTS 
      JMP SEG,I   AND RETURN WITH 15-BIT ADDRESS
SEG2  LDA S 
      CLB 
      DIV D10       CONVERT 2-DIGIT DECIMAL 
      ALF,ALF       ROTATE QUOTIENT TO HIGH 8 BITS
      ADA .B.       PUT REMAINDER IN LOW 8 BITS 
      ADA =B30060   CONVERT TO TWO-DIGIT ASCII
      STA SEGNM+1 
*036         CALL EXEC(8,SEGNM) 
        JSB EXEC
        DEF *+3 
        DEF .10 
        DEF SEGNM 
*037         END
*038         END
        END 
                                                                                                                                            