.
.         COMPLETION PROCESSING
.
.
.         (C)  Copyright 1972-1978  John Walker
.
.         This software is in the public domain
.
          AXR$
          DEFUNCT$
          FANG
          PURE      CODE
.
COMPLETE* LX        X5,CDIMG,X8         LOAD ADDRESS OF ATTACHED IMAGE BUFFER
          SZ        SHADUP              CLEAR OUTPUT SUPPRESSED
          JNOL      'E',NOIBP           PRINT COMMAND COMPLETIONS ?
          R$DIT     .                   YES.  SET UP EDITOR
          JNDEM     BATEM               EDIT BATCH FORMAT MESSAGE ?
          LMJ       X6,ESN              EDIT STATEMENT NUMBER
          E$CHAR    'E'                 EDIT ENDING FLAG
          E$SKIP    1                   SKIP A SPACE
YIBBER    E$COPY    80,IMIMG,X5,U       COPY IMAGE TO LINE
          R$PRTX    1                   PRINT AND TERMINATE EDITING
NOIBP     BRELP     X5                  RELEASE IMAGE BUFFER
          LA,U      A6                  CLEAR A6 TO FREE CODE
          LA        A7,CDBACT,X8        LOAD COMMAND ENTRY POINT
          TNZ       CDBACT,X8           DID AN ERROR OCCUR DURING PROCESSING ?
          LA,U      A6,2                YES.  LOAD ROADBLOCKED CODE
          LA        A0,CDOPTS,X8        LOAD OPTION BITS
          TEP       A0,(OPTION('C'))    IS 'C' OPTION ON ?
          LA,U      A6                  YES.  DON'T ROADBLOCK FILES
          LX        X10,CDBPC,X8        LOAD HEAD OF PARAMETER CHAIN
PARDEX    TNZ       X10                 END OF PARAMETER CHAIN ?
          J         PAROOP              YES.  GO TO NEXT COMPLETE PHASE
          LA        A2,PBTYPE,X10       LOAD TYPE OF THIS PARAMETER
          TNE,U     A2,BLOCK            IS IT A BLOCK BUFFER ?
          J         PRDX2               YES.  IT NEEDS TO BE CLEARED ALSO
          TE,U      A2,FILE             SPECIAL FILE PROCESSING REQUIRED ?
          J         PRDX1               NO.  GO AND RELEASE PARAMETER
PRDX2     P         FISTAT              INVOKE FILE STATUS PROTECTION
          LA        A0,PBVAL,X10        LOAD FDT POINTER
          LA        A3,A6               LOAD COMPLETION STATUS FOR COMMAND
          TNE,U     A2,BLOCK            IS PARAMETER A BLOCK ?
          LA,U      A3                  YES.  NEVER ROADBLOCK A BLOCK
          LA        A1,FDREADC,A0       LOAD READ IN-PROGRESS COUNT
          JZ        A1,PRDX3            IF ZERO, OPERATION WAS A WRITE-TYPE
          ANA,U     A1,1                DECREMENT READ IN-PROGRESS COUNT
          SA        A1,FDREADC,A0       UPDATE READ COUNT IN FDT
          ON        DEBUG
          TZ        FDWRITE,A0          IS WRITE LOCK SET ?
          IERR      .                   YES.  READ AND WRITE SET AT ONCE
          OFF       DEBUG
          JZ        A1,PRDX4            IF NOW ZERO, FDT IS AVAILABLE FOR
.                                       WRITE CLASS OPERATIONS.  CLEAR BUSY.
          TZ        A3                  DID COMMAND ERROR ?
          SA        A3,FDLOCK,A0        YES.  ROADBLOCK EVEN IF OTHER READS
.                                       ARE CURRENTLY OUTSTANDING.
          J         PRDX5               PROCESS NEXT PARAMETER IN CHAIN
.
PRDX3     .
          ON        DEBUG
          LA        A1,FDLOCK,A0        LOAD STATUS OF FILE
          TE,U      A1,1                BUSY OR ROADBLOCKED ?
          J         PRDX6               ROADBLOCKED.  IT IS PERMISSIBLE THAT
.                                       NEITHER THE READ NOR THE WRITE COUNTS
.                                       BE UP ON A FILE IF IS ROADBLOCKED BEFORE
.                                       GETTING HERE, AS THE DISPATCHER ROUTES
.                                       COMMANDS TO BE SKIPPED TO ROADBLOCK
.                                       WITHOUT INCREMENTING EITHER COUNT.
.                                       NOTE THAT THIS TEST ALSO HANDLES THE
.                                       CASE OF A FILE WHICH IS USED MORE THAN
.                                       ONCE IN A COMMAND AND IS AVAILABLE WHEN
.                                       WE GET HERE BECAUSE COMPLETE HAS ALREADY
.                                       DECREMENTED THE COUNTS.
          TNZ       FDWRITE,A0          IS WRITE LOCK UP ?
          IERR      .                   NO.  NEITHER READ NOR WRITE SET AT
.                                       COMMAND COMPLETION TIME.
PRDX6     .
          OFF       DEBUG
          SZ        FDWRITE,A0          CLEAR WRITE LOCK
PRDX4     LA        A1,FDLOCK,A0        LOAD CURRENT FDT STATUS
          TE,U      A7,COMPLETE         WAS THIS THE 'CLEAR' COMMAND ?
          TE,U      A1,2                IS FILE CURRENTLY ROADBLOCKED ?
          SA        A3,FDLOCK,A0        NO.  SET TERMINATION STATUS FOR THIS
.                                       COMMAND IN THE FDT
PRDX5     V         FISTAT              CLEAR THE FACILITY STATUS LOCK
PRDX1     LA,U      A0,,X10             LOAD ADDRESS OF THIS PARAMETER
          LX        X10,PBLINK,X10      LINK TO NEXT PARAMETER
          BRELP     A0                  RELEASE THE LAST PARAMETER
          J         PARDEX              EXAMINE THE NEW PARAMETER
PAROOP    P         CMDLOCK             LOCK COMMAND TABLES
.         UNLINK FROM IN PROCESS QUEUE
          LA        A0,QFL,X8           LOAD LINK TO NEXT IN-PROCESS COMMAND
          LA        A1,QHL,X8           LOAD LINK TO PREVIOUS COMMAND
          SA        A0,QFL,A1           CHAIN NEXT TO PREVIOUS
          SA        A1,QHL,A0           CHAIN PREVIOUS TO NEXT
          LA        A0,OUTSTANDING      LOAD OUTSTANDING COUNT
          ANA,U     A0,1                COUNT IT DOWN
          SA        A0,OUTSTANDING      PUT IT BACK
          V         CMDLOCK             CLEAR COMMAND TABLE LOCK
          LA        A0,CDPATCH,X8       LOAD PATCH BUFFER POINTER
          JZ        A0,RELMB            ANY PATCH BUFFER TO RELEASE ?
          BRELP     A0                  YES.  RELEASE THE PATCH BUFFER
RELMB     LA        A0,CDMASK,X8        LOAD THE MASK BUFFER ADDRESS
          JZ        A0,RELCB            ANY MASK BUFFER ALLOCATED ?
          BRELP     A0                  YES.  RELEASE IT
RELCB     BRELP     X8                  RELEASE COMMAND BUFFER
          ON        DYNMEM
          ON        INTERSITE
          TNZ       LINEACTV            ANY COMMUNICATIONS LINE ACTIVE ?
          OFF       INTERSITE
          BRELC     .                   RELEASE UNUSED MEMORY VIA LCORE$
          OFF       DYNMEM
          TZ        CLOSING             ARE WE IN TERMINATION MODE ?
          J         CLOSEX              YES.  INFORM THE VULTURE
CLOSER    V         HAPPEN              CYCLE THE DISPATCHER
          V         CONCUR              DECREMENT CONCURRENCY LOCK
          EXIT      .                   ALL DONE WITH THIS COMMAND
.
CLOSEX    V         COMPLETED           INFORM OF COMPLETION
          J         CLOSER              JOIN CLOSE PROCESSING
.
BATEM     E$MSG     COMPEM              EDIT 'COMPLETED'
          LMJ       X6,ESN              EDIT STATEMENT NUMBER
          E$COL     TXCOL               TAB TO TEXT COLUMN
          J         YIBBER              ENTER COPY AND PRINT CODE
.
          PURE      DATA
COMPEM    'COMPLETED !'
          END