*DECK HSFCACK 
USETEXT ACB 
USETEXT ACNB
USETEXT ACNT
USETEXT AT
USETEXT DRHDR 
USETEXT PARAMS
USETEXT NIPDEF
USETEXT SUPMSG
  
PROC HSFCACK(PSUEDONH,ACNBADDR);
STARTIMS; 
 #
*1DC  HSFCACK 
* 
*     1. PROC NAME           AUTHOR              DATE 
*        HSFCACK             E. GEE              85/05/05 
* 
*     2. FUNCTIONAL DESCRIPTION : 
*        SEND FC/ACK AND/OR FC/NAK SUPERVISORY MESSAGES TO THE
*        APPLICATION. 
* 
*     3. METHOD USED: 
*        IF ONLY QUEUEING FC/ACK FOR APPLICATION, 
*          CALL BLDMSG TO BUILD AND QUEUE FC/ACK FOR APPLICATION. 
*        ELSE  (QUEUING ONE OR MORE FC/NAKS AND FC/ACK FOR APPL), 
*          CALL BLDMSG TO BUILD AND QUEUE FC/ACK OR FC/NAK FOR EACH 
*            ENTRY IN NAK/ACK BUFFER. 
*     4. ENTRY PARAMS:  
*        PSUEDONH            ADDR OF NAK/ACK BUFFER.
*        ACNBADDR            ACNB ADDRESS . 
* 
*     5. EXIT PARAMS: 
*        NONE.
* 
*     6. COMDECKS CALLED
*        NIPDEF  SUPMSG  ACB  ACNB
*        ACNT     AT
*        DRHDR     PARAMS 
* 
*     7. ROUTINES CALLED: 
*        BLINK               LINK MESSAGE TO ACB OF APPLICATION.
*        OSCHAPP             SCHEDULER FOR APPLICATION. 
*        MGETS               GET BUFFER FOR FC/ACK OR FC/NAK
*        MRELS               RELEASE BUFFER 
* 
*     8. NOTE:  
*        THIS PROCEDURE IS CALLED BY HBSTTP.
* 
* 
 #
STOPIMS;
  
# 
      EXTERNAL REF
# 
      XREF
        BEGIN 
        PROC BLINK ;
        PROC MGETS ;
        PROC MRELS;          # RELEASE BUFFER                          #
        PROC OSCHAPP ;
      PROC XTRACE ; 
        END 
  
# 
      INPUT PARAMETERS
# 
      ITEM PSUEDONH;                   # ADDR OF BUF CONTAINING ACK/NAK#
      ITEM ACNBADDR;                   # ADDRESS OF ACNB               #
# 
      INTERNAL VARIABLES
# 
      ITEM ACNTIND ;                   # INDEX OF ACNT                 #
      ITEM BUFADDR ;                   # BUFFER ADDRESS OF SM          #
      ITEM BUFSIZE ;                   # SIZE OF PSUEDO BUFFER         #
      ITEM I ;
  
#**********************************************************************#
# 
      EXECUTABLE CODE BEGINS HERE 
# 
      BEGIN                            # BEGIN HSFCACK                 #
      CONTROL IFEQ DEBUG,1; 
        XTRACE("HSACK") ; 
      CONTROL FI ;
  
      P<ACNB> = ACNBADDR;              # ADDRESS OF ACNB               #
      BUFADDR = PSUEDONH;              # ADDR OF BUFFER TO HOLD FC/ACK #
      P<DRHDRWD> = PSUEDONH;
      BUFSIZE = DRBS[0] - BLKHSIZE;    # NUMBER OF FC/ACKS/NAKS TO SEND#
      P<SUPMSG> = P<DRHDRWD> + BLKHSIZE; # ADDR OF WORD CONTAINING PFC #
      FCACN[0] = ACNBACN[0];           # APPLICATION CONNECTION NUMBER #
      P<ACB> = ATACBA[ACNBAN[0]]; 
      P<ACNT> = ACBACNT[0] ;
  
      ACNTIND = ACNBACN[0] - ACNTMINACN[0] + ACNTHSIZE ;
  
      IF PFCSFC[0] EQ FCACK 
      THEN                             # ONLY QUEUE FC/ACK FOR APP     #
         BEGIN
         BLDMSG;
         END
      ELSE                             # ONE OR MORE NAK FOLLOWED BY AK#
        BEGIN 
        FOR I = BLKHSIZE STEP 1 WHILE I LQ BUFSIZE
        DO
          BEGIN                        # CREATE FC/ACK OR NAK          #
                                       # ENTRY BY ENTRY                #
          P<SUPMSG> = PSUEDONH + I ;
          FCACN[0] = ACNBACN[0];       # APPLICATION CONNECTION NUMBER #
          MGETS(LFCACK + BLKHSIZE + ABHSIZE,BUFADDR,TRUE) ; 
          P<DRHDRWD> = BUFADDR; 
          BLDMSG; 
          END                          # CREAT FC/ACK OR NAK           #
  
        MRELS(PSUEDONH);
        END 
      OSCHAPP(P<ACB>);
  
      RETURN ;
CONTROL EJECT;
      PROC BLDMSG;
STARTIMS; 
 #
*1DC  BLDMSG
* 
*     1. PROC NAME           AUTHOR              DATE 
*        BLDMSG              E. GEE              02/26/85 
* 
*     2. FUNCTIONAL DESCRIPTION.
*          BUILD AND QUEUE FC/ACK OR FC/NAK SUPERVISORY MESSAGE FOR 
*          APPLICATION. 
* 
*     3. METHOD USED. 
*          COMPLETE BUILDING SUPERVISORY MESSAGE. 
*          BUILD APPLICATION BLOCK HEADER WORD. 
*          CALL BLINK TO QUEUE SUPERVISORY MESSAGE. 
* 
*     4. ENTRY PARAMS.
*          BUFADDR           ADDR OF BUFFER TO HOLD APPL ACK/NAK SUP MSG
*          P<ACB>            ADDR OF ACB TO QUEUE SUP MSG TO
*          ACNTIND           ACNT TABLE INDEX FOR CONNECTION NUMBER 
*          P<ACNT>           ADDR OF ACNT FOR APP 
*          P<DRHDRWD>        ADDR OF WORD TO HOLD ABH WORD
*          P<SUPMSG>         ADDR OF WORD CONTAINING NETWORK ACK/NAKS 
* 
*     5. EXIT PARAMS. 
*          NONE.
* 
*     6. COMMON DECKS AND SYMPL TEXT USED.
*          NONE.
* 
*     7. ROUTINES CALLED. 
*          BLINK             LINK MESSAGE TO ACB OF APPLICATION.
*          OSCHAPP           ISSUE SWAPIN FOR APPL IF NECESSARY 
* 
*     8. DAYFILE MESSAGES OR OTHER IMPORTANT INFORMATION. 
* 
*        THIS PROCEDURE IS A INTERNAL PROCEDURE OF HSFCACK. 
* 
* 
 #
STOPIMS;
      CONTROL EJECT;
      BEGIN 
# 
      INTERNAL VARIABLES
# 
      ARRAY ABH$ S(1);                 # APP BLOCK HEADER FOR SUP MSG  #
        BEGIN 
        ITEM ABH$ABT    U(00,00,06) = [APPCMD];  # APP BLOCK TYPE      #
        ITEM ABH$ADR    U(00,06,12) = [0];       # APP CON NUMBER      #
        ITEM ABH$ABN    U(00,18,18) = [0];       # APP BLOCK NUMBER    #
        ITEM ABH$ACT    U(00,36,04) = [CT60TRANS];  # APP CHAR TYPE    #
        ITEM ABH$DBC    U(00,40,08) = [0];       # DATA BLOCK CLARIFIER#
        ITEM ABH$TLC    U(00,48,12) = [LFCACK];  # TEXT LENGTH IN CHARS#
        ITEM ABH$WORD   U(00,00,60);             # APP BLOCK HEADER WD #
        END 
  
#**********************************************************************#
# 
        EXECUTABLE CODE BEGINS HERE 
# 
        CMWORD[BLKHSIZE+ABHSIZE] = SPMSG0[0]; # COPY SUP MSG           #
        CMWORD[ABHSIZE] = ABH$WORD[0]; # CREATE APP BLOCK HEADER WORD  #
  
        BLINK(BUFADDR,P<ACB>);         # LINK TO APPL  ACB             #
        ACNTABO[ACNTIND] = ACNTABO[ACNTIND] - 1;  # DECREM BLKS OUT    #
        END                            # END BLDMSG                    #
      END                              # END HSFCACK                   #
TERM
  
