*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