SPL,L,M,O,T,C 
       NAME SXLNM(8) "REV G 770321" 
! 
       LET EXCPT BE CONSTANT(100454K)     !"EXCEPT" 
       LET FGESS,SGESS BE SUBROUTINE,DIRECT 
       LET DIAG,STPRG,SCOMM,.LOCF BE SUBROUTINE,EXTERNAL
       LET SVLU,IWP,STAK BE PSEUDO,EXTERNAL 
       LET GNNS,B76,STMA,ISTR,MIN BE FUNCTION,EXTERNAL
! 
SXLNM:  SUBROUTINE(NAMX,NAMSX,PLGTH,PLEN7,REV,PAGE,NCPL1,\
       NCPL2,LAPAG,LGB1,RREC,RRS,ROFF,AREC,\
       ARS,AOFF,TDIFF,OFREB,SRCH,SRCHH,\
             .SAVE,NBLK1,LENTH,XLWAC,XFWAC,XLCOM,PBASE,\
       CBASE,BBASE,ENTRX)\
       GLOBAL 
       LET LOCC,BPLOC,RLNGH,NXTI,LWABP,FWAC,LWAC,NXTPG,\
       LCOMM,UNDF1,LINKF,UNDX1,UNDFX,EXTX1,EXTX,\ 
       BINYA,BPLKS,NBPLK,GUESS,NGESS,NLINK,.BKUP,ENTR1,\
       ERCO,.LCAT,RIC,ERR,DCB4,DCBB4,FREBE,\
       FWAM,XBPLK,XGESS,XSEC,SEC,XCOM,DFLCM  BE INTEGER,EXTERNAL
       LET BPRC3 BE LABEL,EXTERNAL!EOF RETURN LABEL 
       LET BPRC1 BE LABEL,EXTERNAL
       LET SWTCH,RVERF,STPRG,MOVE.,DIAG BE SUBROUTINE,EXTERNAL
! 
!        PROTECT AGAINST RELOCATION BELOW FWAM
       IF LOCC < FWAM THEN CALL DIAG(8,0) 
       CALL SWTCH 
! 
!  GET POSITION OF RELOCATABLE FILE 
       CALL $(.LCAT)($DCB4,ERR,RREC,RRS,ROFF) 
!  GET POSITION OF ABS. FILE
       CALL  .LOCF(DCBB4,ERR,AREC,ARS,AOFF) 
       LENTH,TDIFF,OFREB,ERCO,GUESS,NGESS,SEC,NCPL1,\ 
       DFLCM,NCPL2,CNTR_0 
! 
!     SEARCH UNDEFINED SYMBOLS STRING. IF NO UNDEFS,
!     THEN IF ALSO SEARCHING, QUIT TO SAVE TIME(MAKE EOF RETURN)
! 
       PTR_UNDF1
       ALWAYS DO [ IF IWP(PTR)? \  NO UNDEFS. 
                     [ IF SRCHH = 1 THEN GOTO BPRC3,\ 
                                ELSE GOTO N0] \ 
                      THEN GOTO N0 ;\ 
       REPEAT 2 TIMES DO T_IWP(PTR)]
N0:    SRCH_SRCHH;.BKUP_-1;CALL MOVE.(NBPLK,.SAVE,9)
       CALL RVERF 
       IF RIC # 1 THEN CALL DIAG(1,0)   !NO NAM RECORD
       NAMX_GNNS;   T_NXTI+1
       PTR_NAMSX
       NBLK1_NBPLK; XLWAC_LWAC; XFWAC_FWAC; XLCOM_LCOMM 
       PLFLG_IWP(PTR)?[GOTO FP2]!SKIP MODULE NAME CHECK IF NONE GIVEN 
N1:    IF PLFLG = EXCPT THEN[EXC_-1; GOTO N2] 
       IF STMA(PLFLG,NAMX) THEN\ MATCH FOUND TO THIS MODULENAME 
       [IFNOT EXC  THEN GOTO FP2,ELSE GOTO SKIP1] 
N2:    PLFLG_IWP(PTR)?[IF EXC THEN GOTO FP2,ELSE GOTO SKIP1]
       GOTO N1
!     SKIP MODULE 
SKIP1: SRCH_-1; GOTO FP9      !SET SKIPPING FLAG
! 
! 
!          PROCESS   REST  OF NAM  *************
!***  A NAM RECORD HAS BEEN READ, AND EITHER NO PROGRAMS HAVE 
!***  SPECIFICALLY BEEN NAMED, OR THIS NAM MATCHES ONE OF THOSE 
!***  GIVEN.  CHECK MEMORY BOUNDS, MAINTAIN MAXIMUM COMMON LENGTH,
!***  AND SET UP TO ATTEMPT LOADING.
!***
FP2:   PLEN7_[PLGTH_$T] AND 77777K; T_T+1 
       IF[LGB1_$T] THEN\ IF ORB DATA,START NEW BP LINKS SUBSTRING 
          [IF LGB1<0 THEN CALL DIAG(13,NAMX),ELSE\
            [IWP(XBPLK)_-1; IWP(XBPLK)_BPLOC+LGB1]] 
!      CHECK FOR BASE PAGE OVERFLOW.
       IF LGB1 THEN[IF BPLOC+LGB1> LWABP THEN CALL DIAG(9,NAMX) ] 
!     CHECK FOR MAXIMUM COMMON
       IF [XCOM_$([T_T+1])] THEN CALL SCOMM 
       T_T+1
!      PROCESS REVISION CODE. 
!      THE REVISION CODE WILL HAVE IN IT ALL PARAMETERS BEYOND THE
!      COMMON LENGTH. 
       A_BINYA+RLNGH!GET END OF RECORD ADDRESS
       I_ISTR(REV)  !INITIALIZE REVISION CODE STRING
       UNTIL T=A DO[IWP(I)_$T;T_T+1]
!      MAKE GUESS AS TO PRIMARY AREA. 
F1:    NXTPG_[PAGE_B76(LOCC)]+2000K!COMPUTE PAGE ADDRESSES
       IFNOT(LINKF AND 1) THEN GOTO FP3!BASEPAGE ONLY MODE
       IF PLGTH = -1 THEN[CALL SGESS?[GOTO FP3];FGESS;GOTO FP3] 
!      CHECK IF A GUESS AREA NEEDS TO BE CREATED
       IF PAGE=B76(LOCC+PLEN7) THEN GOTO FP1!NO PAGE CROSSING.
       SGESS?[A_NXTPG-LOCC;B_PLEN7-A;NGESS_(MIN((A>-1),B))>-2]
       FGESS
FP1:   SEC_ISTR(XSEC) 
       IWP(XSEC)_LOCC+PLEN7 
FP3:   NXTPG_[PAGE_B76(LOCC)]+2000K 
       LAPAG_B76(LOCC+PLEN7)!COMPUTE LASTPAGE THIS MODULE 
FP5:   PBASE_LOCC; BBASE_BPLOC; CBASE_FWAC!SET RELOCATION BASES 
       EXTX_ISTR(EXTX1); ENTRX_ISTR(ENTR1); UNDFX_ISTR(UNDX1) 
!      SAVE OLD STACK CONTENTS OF BASE PAGE LINKS STACK, IN CASE A
!      BACKUP PASS IS CALLED FOR. 
       PTR_FREBE
       ALWAYS DO[IFNOT $PTR THEN GOTO FP9;\ 
       STAK(OFREB)_IWP(PTR)?[GOTO FP9]] 
FP9:   CALL RVERF     !GET NEXT RECORD. 
       GOTO BPRC1 
       END
SGESS: SUBROUTINE FEXIT,DIRECT
       IFNOT NLINK THEN FRETURN 
       NGESS_SVLU(NLINK)
       RETURN 
       END
FGESS: SUBROUTINE DIRECT
       GUESS_ISTR(XGESS)
       IWP(XGESS)_LOCC
       LOCC_LOCC+NGESS
       RETURN 
       END
      END 
END$
      