SPL,L,O 
!     NAME:   EO..
!     SOURCE: 92067-18242 
!     RELOC:  92067-16185 
!     PGMR:   A.M.G, G.A.A
! 
!  ***************************************************************
!  * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1979.  ALL RIGHTS     *
!  * RESERVED.  NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED,      *
!  * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT*
!  * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY.       *
!  ***************************************************************
! 
       NAME EO..(8) "92067-16185 REV.1903 790514" 
! 
!      MODIFIED TO WORK WITH SIX WORDS PER ENTRY IN TRANSFER
!               STACK (GLM). *780420* 
! 
! 
! 
       LET ONOFF,                           \ON OFF MESSAGE PRINTER 
           LULU.,                           \LU SWITCH ROUTINE
           DTACH,                           \DETACH FROM SESSION ROUTINE
           READF,                           \FILE READ ROUTINE
           LU.CL,                           \LU SWITCH AND SPOOL CLEAR ROUTINE
           B.FLG,                           \BATCH FLAG CLEAR/SET ROUTINE 
           IFBRK,                           \OPERATOR BREAK ROUTINE 
           WRITF,                           \FILE WRITE ROUTINE 
           OPEN,                            \FILE OPEN ROUTINE
           EXEC,                            \DARNED IF I KNOW 
           EX.TM,                           \EXECUTE TIME ROUTINE 
           OPEN.,                           \INTERNAL OPEN ROUTINE
           CONV.,                           \NUMBER TO ASCII ROUTINE
           FM.ER,                           \MESSAGE ROUTINE
           CLOS.,                           \INTERNAL CLOSE ROUTINE 
           RNRQ,                            \RESOURCE NUMBER ROUTINE
           POST                             \FILE POST ROUTINE
           BE SUBROUTINE,EXTERNAL 
! 
! 
       LET L.SEG  BE LABEL,EXTERNAL 
! 
       LET LUSES,                           \GET SCB ADDRESS FUNCTION 
           LOGLU                            \GET LOG LU FUNCTION
                 BE FUNCTION,EXTERNAL 
! 
       LET RD,WR,JO.EO     BE SUBROUTINE,DIRECT 
! 
       LET .DFER BE SUBROUTINE,EXTERNAL,DIRECT
! 
       LET FM.AB BE LABEL,EXTERNAL
       LET ACTV.,                           \ACTIVE FLAG (INDEX TO TR STACK)
           P.TR,                            \POINTER TO CURRENT INPUT UNIT
           CAMS.,                           \ADDRESS OF TR STACK
           CAD.,                            \OFF SET OF NEXT SUB IN SEG. TBL. 
           NO.RD,                           \NO READ FLAG 
           I.BUF,                           \INPUT DCB
           BUF.,                            \GENERAL UTILITY BUFFER 
           JOBFL,                           \ASCII "JOBFIL" 
           J.REC,                           \JOBFIL REC NO. OF JOB
           C.BUF,                           \COMMAND INPUT BUFFER 
           D.R,                             \ASCII "D.RTR"
           S.CAP,                           \SESSION CAPABILITY FLAG
           TMP.,                            \LIST FILE
           O.BUF,                           \OUTPUT DCB 
           CUSE.,                           \CURRENT SEGMENT SUFFIX 
           G0..,                            \GLOBAL TABLE POINTER 
           CAM.O,                           \LOG LU 
           JRN.,                            \JOBFIL RN NUMBER 
           CAM.I,                           \COMMAND INPUT DCB
           OVRD.,                           \OVERRIDE FLAG
           TTY.                             \COMMAND INPUT INTERACTIVE FLAG 
               BE INTEGER,EXTERNAL
! 
       LET .E.R. BE REAL,EXTERNAL 
! 
       LET PTR1,PTR2,PTR3,PTR4,PTR5,PTR6,   \ 
          TIME,YR,SWTCH,JSTAT BE INTEGER
! 
!*780420* 
       LET TRENT BE CONSTANT (5)    !INDEX TO TR STACK FOR CURRENT FILE 
       LET LIST,BLIST(3) BE INTEGER 
       LET LGOFF(3) BE INTEGER
       LET LG0 BE REAL
       LET ABRT(7),FILX,DM,LU BE INTEGER    !DEFINE MESSAGE 
       INITIALIZE ABRT,FILX,DM,LU TO " ABEND EOJ IN SSSSSS" 
       INITIALIZE LIST,BLIST TO 1,0,0 
       INITIALIZE LG0 TO "LG,0" 
       INITIALIZE LGOFF TO "LGOFF " 
! 
       LET LEN,SAVE BE INTEGER
! 
       LET XEQT BE CONSTANT(1717K)
! 
EO..:  SUBROUTINE(N,PLIST,ERR) GLOBAL 
       LET PLIST BE REAL
       LET N,ERR BE INTEGER 
       ASSEMBLE["EXT $SPCR";"LDA $SPCR";"STA SPCR"] !GET SPOOL CR 
       ASSEMBLE["EXT $LGOF";"LDA $LGOF";"STA LGOF"] !GET LOGOFF CLASS 
       RGOP_[SPOP_@PLIST+1]+4               !SET ADDRESSES FOR OPTIONS
       YR _ [TIME _ [PTR15 _[PTR14 _ [PTR6 _ [PTR5 _ [PTR4   \
          _ [PTR3 _ [PTR2 _ [PTR1 _ @BUF.+1]\ 
          + 1] + 1] + 1] + 1] + 1] + 8]+ 1]+ 1] + 5 
! 
       IF ACTV. = 1 THEN GO TO JOCL         !IF EXPECTING JOB STMT. GO DO IT
       IFNOT ACTV. THEN[                    \IF NOT ACTV. OR IF AFTER JO CMD. 
JOCL:     IF N < 0 THEN CALL JO.EO,         \IF JO CALLING DO EO.JO 
          ELSE[                             \ 
          IF ACTV. = 1 THEN GO TO EOOK];    \IF ABORT CALL LET IT GO
          RETURN]                           !NOW JUST EXIT
       NSSW_0                               !SET THE LIST OK SWITCH 
! 
       IF P.TR=ACTV. THEN GO TO EOOK
! 
!      EOJ IN A FILE  SO ABORT
! 
       CALL .DFER(FILX,$(P.TR-TRENT))       !PUT FILE NAME IN MESSAGE 
       IF FILX< "  " THEN CALL CONV.(FILX AND 77K,LU,6) !IF LU CONVERT
! 
       CALL OPEN.(O.BUF,TMP.,$(@TMP.+3),0)   !OPEN THE LIST FILE
       CALL FM.ER(2,ABRT,10)                !SENT MESSAGE TO LOG
       CALL WRITF(O.BUF,.E.R.,ABRT,10)      !AND TO THE LIST DEVICE 
       NO.RD,CAD._6                         !SET TO CALL THE ABORT ROUTINE
       GO TO FM.AB                          !GO ABORT 
! 
EOOK:  IFNOT J.REC THEN GOTO EO1
       OVRD._ [NSSW _ OVRD.] OR 100000K     !SAVE OVERRIDE AND SET NEW ONE
       OPEN(I.BUF,ERR,JOBFL,3,123456K,SPCR) !OPEN JOBFIL. 
       OVRD. _ NSSW                         !RESET THE OVERRIDE FLAG
       POST(I.BUF)
       RNRQ(1,JRN.,JSTAT) 
       RD(J.REC)                            !CHANGE JOB STATUS. 
       NSSW_BUF. AND 400K                   !GET THE NS FLAG FROM JOB REC.
       $PTR2 _ "CS" 
       SWTCH_0                              !IF NO SPOOLS 
       FOR REC_ PTR1+10 TO PTR15 DO[SWTCH_ $REC OR SWTCH] !THEN 
       IFNOT SWTCH THEN BUF._ -1            !PURGE JOB FROM SYSTEM
       CALL WR
       CALL RD(17)                          !GET THE GENERAL WAIT RN
       CALL RNRQ(4,$PTR14,JSTAT)            !LET JOB GO IF NEEDED 
EO1:   ACTV. _ 0                            !RESET ACTIVE SWITCH. 
       IFNOT NSSW THEN[                     \IF LIST IS ACTIVE
         EXEC(11,$TIME,$YR);                \GET TIME.
         ONOFF(0,$TIME);                    \PRINT ENDING 
         CALL EX.TM;                        \MESSAGES.
         CALL CLOS.(O.BUF)]                 !CLOSE THE LIST FILE
       IFNOT J.REC THEN GOTO NOTJO
       REC_(J.REC-1)/16 
       OFF_$1 + @BUF.                       !COMPUTE BUFFER OFSET OF FLAG 
       CALL RD(REC)                         !GET THE RECORD 
       SWTCH_$OFF                           !SAVE CURRENT FLAG WORD 
       $OFF_0                               !ZAP IT IN THE QUEUE
       CALL WR                              !WRITE THE RECORD BACK OUT
       CALL RD(1)                           !NOW UPDATE THE QUEUE HEAD
       OFF_@BUF.+1                          !ADDRESS OF THE QUEUE HEAD
       $OFF_($OFF XOR SWTCH) AND 377K XOR $OFF
       CALL WR                              !WRITE IT OUT 
       POST(I.BUF)
       RNRQ(4,JRN.,JSTAT) 
       CALL LU.CL                           !CLOSE ALL SPOOLS.
       EX.OP_20377K                         !COMPUTE SIGN OFF OPTIONS 
       IF $RGOP = "RG" THEN EX.OP_EX.OP+40000K
       IF $SPOP = "RP" THEN EX.OP_EX.OP+100000K 
FINIS: IF S.CAP THEN CALL DTACH             !IF IN SESSION THEN DTACH 
       DO [                                 \ 
          IFNOT [SID _ LUSES(255)] THEN GO TO CLCLX; \
          CLNUM_0;                          \SET UP A RETURN CLASS
          CALL EXEC(20,0,0,0,0,0,CLNUM);    \GET THE CLASS NUMBER 
          CALL EXEC(20,0,CLNUM,1,EX.OP,SID,LGOF); \LOG OFF
          DLNUM_CLNUM+20000K;               \SET DON'T DEALLOCATE BIT 
          CALL EXEC(100012K,LGOFF);           \THE JOB SESSION
          GO TO SESRT;                      \ABORT RETURN DEALLOCATE THE #
          CALL EXEC(21,DLNUM,0,0,I,I,I);    \GET MY CLASS PUT 
SESRT:    CALL EXEC(21,DLNUM,0,0,I,F,I);    \GET LOGOFF CLASS PUT 
          IF F > 0 THEN GO TO SESRT;        \ 
CLRCL:    CALL EXEC(100025K,CLNUM,0,0,I,I,I);\RELEASE THE CLASS NUMBER
          GO TO CLCLX;                       \DONE ON ABORT RETURN
          GO TO CLRCL;                       \ELSE DO ANOTHER GET 
\ 
CLCLX:    S.CAP_0]                          !CLEAR THE CAPABILITY FLAG NOW
NOTJO: GN8_[GN1_@G0.. -1]-7 
       FOR I_ GN8 TO GN1 DO[$I_0]           !ZERO THE SPOOL GLOBALS 
       CALL B.FLG(0)                        !RESET BATCH FLAG.
       CALL JO.EO                           !DO JO/EO CLEAN UP
       IFNOT J.REC THEN [IF N= -2 THEN[\
          NO.RD,CAD._1;PLIST_0.0];RETURN] 
       CAD._0;CUSE._"77";GO TO L.SEG !GO TO NEXT JOB
EX:    RETURN 
       END
! 
!      JOB/END JOB CLEAN UP ROUTINE 
! 
JO.EO: SUBROUTINE DIRECT
       LIST _ LOGLU(DUM)
       CALL .DFER(TMP.,LIST)                !RESET THE LIST DEVICE
       .E.R._0.0                     !SET THE SEVERITY CODE TO 0
       IFNOT J.REC THEN LULU.(0,0)          !CLEAR ALL LU XFORMS
       GO TO JO1
JO1:   CAM.O_401K                           !SET LOG TO SYS TTY 
       IF TTY. THEN CAM.O_$(@CAM.I+3) 
       PTR4_[PTR3_[PTR2_[PTR1_@G0..+4]+35]+2]+6 
       FOR I_PTR1 TO PTR2 DO[$I_0]          !CLEAR 1G - 9G
       FOR I_PTR3 TO PTR4 DO[$I_0]          !CLEAR 1P - 7P
       CALL IFBRK                           !CLEAR ANY BRAKE FLAG 
       RETURN                               !EXIT DONE
       END
! 
!      SUBROUTINE TO READ A 16 WORD JOB FILE RECORD 
! 
RD:    SUBROUTINE(R) DIRECT 
       CALL READF(I.BUF,ERR,BUF.,16,LEN,R)  !READ THE RECORD
       W_R                                  !SET WRITE ADDRESS
       IF ERR THEN GO TO EX 
       RETURN 
       END
! 
!      ROUTINE TO WRITE THE ABOVE RECORD
! 
WR:    SUBROUTINE DIRECT
       CALL WRITF(I.BUF,ERR,BUF.,16,W)
       IF ERR THEN GO TO EX 
       RETURN 
       END
       END
       END$ 
                                                                                                                                        