&DL      PROC
XJRNSTSK NAME  X
JRNSTSK  NAME  0
         EJECT
*                                                             *
*  THIS AND ALL RELATED PROGRAMS ARE THE PROPERTY OF SPERRY   *
*  UNIVAC CONTAINING ITS CONFIDENTIAL INFORMATION.            *
*                                                             *
*  THIS PROCEDURE IS THE JOURNAL SUBTASK PROGRAM WHICH PERFORMS
*  THE FOLLOWING FUNCTIONS:
*                  OUTPUT  TO  SAT FILE WHEN CALLED BY JOURNAL CODE.
*                  CLOSE THE   SAT FILE WHEN CALLED BY NET.RELEASE.
*        THE SUBTASK IS ACTIVATED BY JOURNAL CODE AND REMAINS ACTIVE
*        UNTIL THE LINKED LIST OF ARPS IS COMPLETED. THE ARP DEFINES
*        THE DTF ADDRESS OF THE FILE AND THE      ADDRESS OF THE DATA
*        TO BE WRITTEN. WHEN ALL QUEUED ARPS HAVE BEEN PROCESSED,THE
*        SUB TASK GIVES UP CONTROL WITH A TYIELD. R8$ IS PRESERVED AS
*        THE DTF POINTER AND IS ESTABLISHED BY THE PRIMARY TASK AT
*        ATTACH TIME.
R0$      EQU   0
         DROP  R0$
R1$      EQU   1
         DROP  R1$
R2$      EQU   2
         DROP  R2$
R3$      EQU   3
         DROP  R3$
R4$      EQU   4
         DROP  R4$
R5$      EQU   5
         DROP  R5$
R6$      EQU   6
         DROP  R6$
R7$      EQU   7
         DROP  R7$
R8$      EQU   8
         DROP  R8$
R9$      EQU   9
         DROP  R9$
RA$      EQU   10
         DROP  RA$
RB$      EQU   11
         DROP  RB$
RC$      EQU   12
         DROP  RC$
RD$      EQU   13
         DROP  RD$
RE$      EQU   14
         DROP  RE$
RF$      EQU   15
         DROP  RF$
         USING TN#CNTRL,R2$               COVER  CCA
         USING TN#GEN,R3$                 COVER  GENERAL TABLE
         EXTRN TJ#REXIT
         ENTRY TJ#SYLD
         BALR  RF$,0
         USING *,RF$
TJ#S     STM   R0$,RF$,TJ#SSAVE           SAVE CALLERS REGISTERS
         L     R6$,TN#CCDTF              R1 = ADD OF JRN TBL IN CCA
         USING TJ#RADDR,R6$               JRNL TABLE
         L     R9$,TJ#RASAC              R9 = ADD OF SACT
         USING TJ#SACT,R9$                STAGE AREA CONTROL
         L     R7$,TJ#SQUE                R7 = ADD OF FIRST ARP ON QUEU
         USING TJ#ARP,R7$                 ARP
         ST    R7$,TJ#SARP                SAVE CURRENT ARP ADDRESS
TJ#SPARP L     R1$,TJ#ADTF                R1 = ADD OF DTF
         USING ST$DTF,R1$                 DTF
         LA    RB$,TJ#SERR                RB = ERR ADD
         ST    RB$,ST$DECOD               SETUP IN DTF
         L     RD$,ST$DPCA1                   RD = A(TCA)
         LA    RD$,0(0,RD$)              REMOVE NON ADD BITS
         USING ST$DPCA,RD$
         L     RE$,TJ#ABUFF              RE=ADD OF BUFFER  S
         LA    RE$,8(0,RE$)              RE=ADD OF DATA    S
         ST    RE$,ST$DIOA1              STORE IN PCA
         LR    R0$,RD$                    R0 = A(TCA)
         L     RD$,TJ#SAV2
         PUT   (1),(0)                    OUTPUT DATA TO SAT FILE
         BALR  RF$,0
         USING *,RF$
         L     RF$,=A(TJ#S)              RESTORE BASE
         USING TJ#S,RF$
         AI    TJ#SNMBR,X'01'             INCREMENT NO.AVAIL BUFFERS
         MVC   TJ#SQUE(4),TJ#ALNK            UPDATE ARP LINK IN SACT
         MVC   TJ#SSLNK(4),TJ#ALNK           SAVE ARP LINK
         L     R5$,TJ#ABUFF               R6 = ADD OF BUFFER
         USING TJ#PREFX,R5$               STAGE PREFIX
         MVI   TJ#PCSW,X'00'              FREE BUFFER
         XC    TJ#ALNK(4),TJ#ALNK        CLR ARP LINK
         L     RC$,TJ#SARP                RC = ADD OF ARP
         L     RB$,TN#CARPT               RB = ADD OF ARP POOL
         L     RF$,TN#GBPRF               RF = ADD OF BUFF ROUTINE
         BALR  RE$,RF$                         RELEASE ARP
         USING *,RE$
         L     RF$,=A(TJ#S)               RESTORE BASE
         USING TJ#S,RF$
         DROP  RE$
         L     R7$,TJ#SSLNK               R7$ = ADD OF NEXT ARP
         LTR   R7$,R7$                 . TEST FOR ANOTHER ARP
         BNZ   TJ#SPARP                LOOP IF FOUND
         LA    RB$,TJ#PDATE+5            RB=DATA ADDRESS
         USING TJ#DREC,RB$                JRNL RECORD
         CLI   TJ#DJEC,TJ#ENET            RELEASE ?
         BNE   TJ#SYLD
         L     R1$,TJ#ADTF
TJ#SCLOS DS    0H                       . CLOSE AN OUTPUT FILE
         CLOSE (1)                        CLOSE FILE
         CLC   TN#CCDTF,TN#CFDTF        . IS CURRENT DTF THE LAST?
         BE    TJ#SEXIT                 . YES, TJ#SEXIT
         BL    TJ#SLOOP                 . NOT LAST,DO DETACH
         MVI   TJ#SERRF,C'1'            . INDICATE NON-SEQUENTIAL FILE
         B     TJ#SEXIT                 . GO TO EXIT
TJ#SLOOP DS    0H                       . LOOP TO CLOSE ALL FILES
         L     R6$,TJ#RENDM             . POINT TO NEXT FILE
         ST    R6$,TN#CCDTF             . SET AS CURRENT
         L     R1$,TJ#RAECB                R1=ADD ECB
         DETACH (1),TJ#SDERR
         L     R1$,TJ#RADTF             . R1$ CONTAINS DTF ADDRESS
         B     TJ#SCLOS                 . GO TO CLOSE THE FILE
TJ#SERR  MVI   TJ#SERRF,C'7'            . INDICATE D. M. ERROR
         B     TJ#SYLD                  . GO TO YEILD
TJ#SDERR MVI   TJ#SERRF,C'A'            . INDICATE DETACH FAILED
TJ#SEXIT DS    0H                       . RESCHEDULE DUST,DETACH,YEILD
         L     R6$,TN#CFDTF             . POINT TO FIRST JRNFILE
         L     R7$,TU#LDARP              R7=ADD OF ARP
         LR    R1$,R7$                   R1 = ADD OF ARP
         USING TN#ARP,R7$
         L     R4$,=A(TJ#REXIT)          R4 = RETURN ADD
         ST    R4$,TN#ACMPA              STORE IN ARP
         OI    TN#AIRL,X'80'             SET IRL
         L     R7$,TN#GFJCB              R7 = COVER TCB
         USING JT$TCB,R7$
         SETBIT BT$TYLD,JT$TCB
         SCHEDULE (1),IRL=NO
         BALR  RF$,0
         USING *,RF$
         CLRBIT (BT$CYLD++BT$TYLD),JT$TCB
         L     R1$,TJ#RAECB             . GET ECB ADDRESS
         DETACH  (1)                      DETACH SUB-TASK
TJ#SYLD  TYIELD                           YIELD
         BALR  RF$,0
         USING *,RF$
         L     RF$,=A(TJ#S)
         BR    RF$                       GOTO START
TJ#SARP  DC      F'0'                     CURRENT ARP ADDRESS
TJ#SSLNK DC      F'0'                     CURRENT ARP LINK
TJ#SERRF EQU   TN#CJECM+2               . ERROR SAVE
TJ#SSAVE DC    16F'0'                     CALLERS REGISTER SAVE AREA
TJ#SAV2  DC    18F'0'
TJ#SERCT DC    F'0'
         DC    20F'0'                   PATCH AREA
         LTORG
         END
