SPL,L,M,O,T,C 
      NAME ENDR(8) "REV G 770415" 
! 
!     END RECORD PROCESSOR
! 
       LET BPRC1,BPRC0 BE LABEL,EXTERNAL
       LET .BKUP,NXTI,NAMX,UNDX1,EXTX1 BE INTEGER,EXTERNAL
!     DECLARE 'USED' BASE PAGE LINKS STACK, CONTAINING THE
!     LINKS WHICH WERE ALLOCATED FROM THE "FREE" BASE PAGE LINKS
!     STACK, BUT WHICH WILL NOT NECESSARILY BE USED ON THE SECOND 
!     PASS. 
       LET UFREB BE INTEGER,EXTERNAL
       LET ABINY BE INTEGER,EXTERNAL
! 
ENDR: SUBROUTINE(PLGTH,LENTH,NCPL1,NCPL2,LGB1,NBLK1,REV,\ 
         TDIFF,RREC,RRS,ROFF,AREC,\ 
         ARS,AOFF,.SAVE,OFREB,PBASE,PLEN7,BINY2,NXTII)GLOBAL
       LET BINY BE INTEGER(60),EXTERNAL 
       LET SWTCH,BLNK,STPRG,MOVE.,POSN.,RVERF,\ 
         PRENT,OCTAQ,EXEC,DIAG,PBPLK BE SUBROUTINE,EXTERNAL 
       LET PRT BE SUBROUTINE
       LET LOCC,BPLOC,LISTO,GUESS,SEC,NBPLK,ERR,MAXAB,XMAXA,ERCO,\
         NXTPG,LWAM1,LWABP,LSTLU,.POSN,DCB4,DCBB4,FREBE,NGESS,XBPLK,\ 
         RIC,XGESS,XSEC,BINY,LSTLU BE INTEGER,EXTERNAL
       LET B76,IWPP,ISTR,MAX BE FUNCTION,EXTERNAL 
       LET ICP,IWP,STAK BE PSEUDO,EXTERNAL
! 
       CALL SWTCH 
       BIN17_[BIN13_ABINY+12]+4 
      IF PLGTH<0 THEN PLGTH_LENTH  !USE ACTUAL LENGTH IF COMPILER-GENERA
! 
!    IS BACKUP NECESSARY? 
!    NOT PERFORMED IF INPUT OR OUTPUT FILE NON-DISC, OR IF
!    SECOND PASS ALREADY DONE, OR IF GUESS AREA COMPLETELY USED.
! 
      IF NGESS=NCPL1 THEN GOTO ENDR1 !GUESS AREA ALL USED.
      IFNOT .BKUP THEN GOTO ENDR1!   THIS IS THE SECOND PASS
      IFNOT$(DCB4+2) THEN GOTO ENDR1  !INPUT FILE NON-DISC
      IFNOT $(@DCBB4+2) THEN GOTO ENDR1 !"OUTPUT   "   "   "
! 
!  BACKUP PASS CALLED FOR.   BACKUP POINTERS AND REPOSITION INPUT 
!    AND OUTPUT FILES.
! 
      .BKUP_0 
      CALL $(.POSN)($DCB4,ERR,RREC,RRS,ROFF)!POSITION R.B. FILE 
       CALL POSN.(DCBB4,ERR,AREC,ARS,AOFF)!"   ABS. FILE
      X_UNDX1             !BACKUP TEMPORARY UNDEFINEDS AND FIXUPS 
      ALWAYS DO[I1_IWP(X)?[GOTO E1];REF1_IWP(X);FIX_IWP(X);\
      CALL STPRG($(REF1 OR 7)); $REF1_100000K]
! 
E1:   CALL MOVE.(.SAVE,NBPLK,9) 
      $XBPLK_100000K; CALL STPRG($(XBPLK OR 7)) 
      PBASE,LOCC_LOCC-[TDIFF_NGESS-NCPL1]! BACK DOWN LOCC 
      NGESS_NCPL1;NCPL1,NCPL2_0 
! 
      CALL STPRG(GUESS); CALL STPRG(SEC); CALL STPRG(FREBE) 
      ALWAYS DO \ BE SURE ALL LINKS TAKEN FROM "FREE BASE PAGE
          CALL PBPLK ( STAK(UFREB)? [GOTO E3] , 0) ! ARE CLEARED TO ZERO. 
E3: 
      GUESS_ISTR(XGESS); IWP(XGESS)_LOCC-NGESS
      SEC_ISTR(XSEC); IWP(XSEC)_[PLEN7_PLGTH]+LOCC
       NXTPG_[XPAGE_B76(LOCC)]+2000K
      IF LGB1 THEN[IWP(XBPLK)_-1; IWP(XBPLK)_BPLOC+LGB1]
      ALWAYS DO[STAK(FREBE)_STAK(OFREB)?[GOTO E2]]
! 
!  GET 1ST DBL OR END RECORD
! 
E2:   CALL RVERF
      IF RIC<3 THEN GOTO E2 
      IF RIC=4 THEN GOTO E2 
       GOTO BPRC1   !GO GET PROPER RECORD PROCESSOR 
! 
ENDR1:
      CALL STPRG(UFREB) ! GET RID OF 'USED' LINKS STACK.
       BINY2_$(ABINY+1)       !SAVE WORD 2 OF END RECORD
       NXTII_$NXTI
       IFNOT(LISTO AND 2) THEN GOTO ENDRC 
       CALL BLNK (BINY,40)
       X1_0;X_NAMX
       ALWAYS DO\ MOVE NAME AND COUNT CHARACTERS
       [C_ICP(X)?[GOTO EN01];\
       IF X1 AND 1 THEN  \ODD-NUMBERED CHAR.
       $NXTI_($NXTI AND 77400K)OR C,\MAKE SURE BUFFER IS BLANK-FILLED 
         ELSE[NXTI_NXTI+1;$NXTI_C-<8 OR 40K];\
       X1_X1+1] 
! 
!      PUT IN REVISION CODE, IF ANY 
! 
EN01:  NXTI_NXTI+1
!      SKIP OVER TIME PARAMETERS
! 
       T_REV; REPEAT 8 TIMES DO I_IWP(T)?[GOTO EN00]
! 
!      IF NAM HAS EVEN # CHARS, PUT LEADING BLANK AHEAD OF REV CODE.
! 
       IFNOT (X1 AND 1) THEN [X1_X1+2; NXTI_NXTI+1] 
       ALWAYS DO[$NXTI_IWP(T)?[GOTO EN00];\ 
       X1_X1+2; NXTI_NXTI+1]
EN00:  IF X1>8 THEN\
       [IF (LISTO AND 2) THEN CALL PRT(10+X1)]
       CALL OCTAQ($BIN13,LOCC)
! 
ENDRC: X_GUESS; FS_SEC
       G_IWP(X)?(0)                    !ADDRESS 1ST WORD GUESS AREA.
       LG_G+NCPL1-1                    !LAST WORD OF GUESS AREA.
       FS_IWP(FS)?(0)                  !ADDRESS 1ST WORD OF SECONDARY AR
       X1_[LOCC_LOCC+PLGTH]-1          !LAST ADDRESS OF PROGRAM 
       CALL OCTAQ($BIN17,X1) !CONVERT IT TO OCTAL 
       CALL OCTAQ($(ABINY+20),BPLOC)
       NXTPG_B76([LOCC_LOCC+NCPL2]+2000K) 
       BPLOC_BPLOC+LGB1+NBPLK-NBLK1 
       CALL OCTAQ($(ABINY+24),BPLOC-1)
       IF (LISTO AND 2) THEN CALL PRT(56) 
! 
!      CHECK IF 'LINKS' OPTION SELECTED, AND IF SO, PRINT OUT LIMITS
!      FOR GUESS AND SECONDARY AREAS. 
! 
       IF (LISTO AND 20K) THEN\        PRINT GUESS,SECONDARY AREA LIMITS
       [IF NCPL1 THEN\
         [     CALL OCTAQ($BIN13,G); CALL OCTAQ($BIN17,LG);\
       CALL PRT(38)];  IF  NCPL2 THEN\
                         [IFNOT NCPL1 THEN CALL PRT(1);\PRINT BLANK LINE
       CALL OCTAQ($BIN13,FS); CALL OCTAQ($BIN17,LOCC-1);\ 
       CALL PRT(38)]] 
! 
!      CHECK IF MEMORY OVERFLOWED.
! 
       XMAXA_MAX(XMAXA,LOCC)
       IF XMAXA>LWAM1 THEN CALL DIAG(8,NAMX)
       IF MAXAB>LWABP THEN CALL DIAG(9,NAMX) !BP OVERFLOW 
       IF ERCO THEN CALL DIAG(ERCO,NAMX)
       CALL STPRG(EXTX1)
       RETURN 
! 
       END
PRT:   SUBROUTINE(PRT1)                !OUTPUT PRINT LINE:PRT1=#CHARS.
       I_(PRT1+1)>-1
       CALL EXEC(2,LSTLU,BINY,I)      !OUTPUT PRINT LINE TO COREMAP FILE
       CALL BLNK(BINY,I)
       RETURN 
       END
       END
       END$ 
                                                                                                                                                                                                                    