*DECK HUPDDAW 
USETEXT NIPDEF
USETEXT ACB 
USETEXT ACNB
 PROC HUPDDAW(PACB,PACNB,BLKSQ,BLKDSQ);  # UPDATE DATA AVAILABLE WORD  #
 STARTIMS;
 #
*1DC  HUPDDAW 
*     1. PROC NAME           AUTHOR              DATE 
*        HUPDDAW             E. GEE              07/22/85 
* 
*     2. FUNCTIONAL DESCRIPTION:  
*        UPDATING INPUT AVAILABLE OR DELIVERABLE DATA FIELDS IN DATA
*        AVAILABLE WORD.
* 
*     3. METHOD USED: 
*        UPDATE NO OF DATA BLOCKS QUEUED IN ACB AND ACNB. 
*        IF CONNECTION IS NOT LIST OFF OR TEMPORARY LIST OFF, 
*          UPDATE NUMBER OF DELIVERABLE BLOCKS. 
*          IF NUMBER OF DELIVERABLES BLOCKS WENT FROM ZERO TO NONZERO,
*            SET D BIT FLAG IN ACB. 
*            SET FLAG TO UPDATE AIP-S DATA AVAILABLE WORD.
*          IF NUMBER OF DELIVERABLE BLOCKS WENT FROM NONZERO TO ZERO, 
*            CLEAR D BIT FLAG IN ACB. 
*            SET FLAG TO UPDATE AIP-S DATA AVAILABLE WORD.
*        IF NO NEED TO UPDATE AIP-S DATA AVAILABLE WORD YET,
*          IF NUMBER OF DATA BLOCKS QUEUED WENT FROM ZERO TO NONZERO OR 
*             NUMBER OF DATA BLOCKS QUEUED WENT FROM NONZERO TO ZERO, 
*            SET FLAG TO UPDATE AIP-S DATA AVAILABLE WORD.
*        IF AIP-S DATA AVAILABLE WORD NEEDS TO BE UPDATED,
*          CALL HWRAVAL TO UPDATE AIP-S DATA AVAILABLE WORD.
* 
*     4. ENTRY PARAMETERS 
*        PACB                ADDRESS OF ACB.
*        PACNB               ADDRESS OF ACNB. 
*        BLKSQ               VALUE FOR ADJUSTING NO OF DATA BLKS
*        BLKDSQ              VALUE FOR ADJUSTING NO OF DELIVERABLE DATA 
* 
*     5. EXIT PARAMETERS. 
*        NONE 
* 
*     6. COMDECKS CALLED AND SYMPL TEXT USED. 
*        NIPDEF              NIP CONSTANT DEFINITIONS 
*        ACB                 APPLICATION CONTROL BLOCK TEMPLATE 
*        ACNB                APPLICATION CONNECTION BLOCK TEMPLATE
* 
*     7. ROUTINES AND OVERLAYS CALLED.
*        HWRAVAL             UPDATE AIP-S DATA AVAILABLE WORD 
*        XTRACE              TRACE PROCEDURE CALL.
* 
*     8. DAYFILE MESSAGES OR OTHER IMPORTANT INFORMATION. 
*        NONE.
 #
 STOPIMS; 
# 
      INPUT VARIABLES 
# 
      ITEM PACB U ;                # ADDRESS OF ACB                    #
      ITEM PACNB U ;               # ADDRESS OF ACNB                   #
      ITEM BLKSQ I;                # VALUE FOR UPDATING NO OF DATA BLKS#
      ITEM BLKDSQ I;               # VALUE FOR UPDATING NO OF DELIV BLK#
# 
      EXTERNAL REFERENCES 
# 
      XREF PROC HWRAVAL ;              # UPDATE DATA AVAILABILITY WORD #
      XREF PROC XTRACE ;               # TRACE PROCEDURE CALL          #
# 
      LOCAL VARIABLES 
# 
      ITEM OLDBLKSQ U;                 # OLD VALUE OF ACBBLKSQ         #
      ITEM OLDLSTBLKS U ;              # OLD VALUE OF ACBLSTBLKS       #
      ITEM UPDATEAIP B;                # FLAG FOR CALLING HWRAVAL      #
  
#**********************************************************************#
CONTROL EJECT;
  
      BEGIN 
  
      CONTROL IFEQ DEBUG,1; 
        XTRACE("UPDTD");               # RECORD PROCEDURE CALL         #
      CONTROL FI; 
  
      UPDATEAIP = FALSE;               # INIT FLAG FOR CALLING HWRAVAL #
      P<ACB> = PACB ;                  # ADDRESS OF ACB                #
      P<ACNB> = PACNB ;                # ADDRESS OF ACNB               #
  
      OLDBLKSQ = ACBBLKSQ[0];          # CURRENT NO OF BLKS QUEUED     #
      OLDLSTBLKS = ACBLSTBLKS[0] ;     # CURRENT NO OF DELIVERABLE BLKS#
  
      ACBBLKSQ[0] = ACBBLKSQ[0] + BLKSQ;  # UPDATE NO OF DATA BLKS     #
      ACNBBLKSQ[0] = ACNBBLKSQ[0] + BLKSQ;  # UPDATE NO OF BLKS QUEUED #
      IF (NOT ACNBLO[0] ) AND          # CONNECTION NOT LIST OFF       #
         (NOT ACNBTLO[0])              # CONNECTION NOT TEMP LIST OFF  #
      THEN                             # UPDATE NO OF DELIVERABLE BLKS #
        BEGIN 
        ACBLSTBLKS[0] = ACBLSTBLKS[0] + BLKDSQ;  # UPDATE NO OF DELIV  #
        IF BLKDSQ GR 0
        THEN                           # INCREMENTED NO OF DELIVERABLES#
          BEGIN 
          IF OLDLSTBLKS EQ 0           # PREVIOUS VALUE WAS ZERO       #
          THEN                         # NEED TO INFORM AIP            #
            BEGIN 
            ACBPDATA[0] = TRUE ;       # SET D BIT IN DATA AVAIL WORD  #
            UPDATEAIP = TRUE;          # SET FLAG FOR CALLING HWRAVAL  #
            END 
          END 
        ELSE                           # DID NOT ADD DELIVERABLE DATA  #
          BEGIN 
          IF BLKDSQ LS 0
          THEN                         # DECREMENTED NO OF DELIVERABLES#
            BEGIN 
            IF (OLDLSTBLKS NQ 0   ) AND  # PREVIOUS VALUE WAS NONZERO  #
               (ACBLSTBLKS[0] EQ 0)    # CURRENT VALUE IS NO ZERO      #
            THEN                       # NEED TO INFORM AIP            #
              BEGIN 
              ACBPDATA[0] = FALSE;     # CLEAR D BIT IN DATA AVAIL WORD#
              UPDATEAIP = TRUE;        # SET FLAG FOR CALLING HWRAVAL  #
              END 
            END 
          END 
        END 
      IF NOT UPDATEAIP
      THEN                             # DO NOT UPDATE D BIT IN AIP    #
        BEGIN 
        IF ( (OLDBLKSQ EQ 0) AND         # NO DATA BLOCKS QUEUED BEFORE#
             (BLKSQ GR 0   )       ) OR  # DATA BLOCKS QUEUED          #
           ( (OLDBLKSQ NQ 0   ) AND      # DATA BLOCKS QUEUED BEFORE   #
             (ACBBLKSQ[0] EQ 0)    )     # NO DATA BLOCKS QUEUED NOW   #
        THEN                           # NEED TO INFORM AIP            #
          BEGIN 
          UPDATEAIP = TRUE;            # SET FLAG FOR CALLING HWRAVAL  #
          END 
        END 
      IF UPDATEAIP
      THEN                   # NEED TO WRITE DATA AVAIL WORD TO AIP    #
        BEGIN 
        HWRAVAL(P<ACB>,TRUE);  # WRITE DATA AVAIL WORD TO AIP          #
        END 
      RETURN; 
      END 
  
TERM
