*DECK HCRRCNR 
USETEXT ACNB
USETEXT AHEADER 
USETEXT AT
USETEXT DRHDR 
USETEXT NCNB
USETEXT NIPDEF
USETEXT PARAMS
USETEXT PT
USETEXT SUPMSG
PRGM HCRRCNR; 
STARTIMS; 
 #
*1DC  HCRRCNR 
* 
*     1. PROC NAME           AUTHOR              DATE 
*        HCRRCNR             C. BITTNER          81/12/01 
* 
*     2. FUNCTIONAL DESCRIPTION 
*        FORMAT AND SEND CR/RCN/R TO NVF
* 
*     3. METHOD 
*        ALLOCATE A BUFFER FOR CR/RCN/R 
*        SET UP APPLICATION BLOCK HEADER
*        SET UP CR/RCN/R TEXT 
*        QUEUE MESSAGE ON NVF-S ACB 
* 
*     4. ENTRY PARAMETERS 
*        PARAMS1 - ACNB OF NVF CONNECTION TO RECONNECT TO 
*        PARAMS2 - ANAME FIELD OF CON/END/R 
*        PARAMS3 - REASON CODE FOR RECONNECT
*        PARAMS4 - APPLICATION NO. OF APPL WHICH HAD THE CONNECTION 
* 
*     5. EXIT PARAMETERS
*        NONE 
* 
*     6. COMDECKS CALLED AND SYMPL TEXTS USED 
*        ACNB 
*        AHEADER
*        AT 
*        NCNB 
*        NIPDEF 
*        PARAMS 
*        PT 
*        SUPMSG 
* 
*     7. ROUTINES AND OVERLAYS CALLED 
*        BLINK - QUEUE MSG ON APPL-S ACB
*        MGETS - ALLOCATE EMPTY BUFFER
*        OSCHAPP - SCHEDULE APPLICATION 
*        XTRACE - RECORD PROCEDURE CALL 
* 
*     8. DAYFILE MESSAGES AND OTHER IMPORTANT INFORMATION 
*        THIS IS A SECONDARY OVERLAY CALLED BY HCSTTP.
*        W A R N I N G - THIS PROGRAM CANNOT EXCEED THE SECONDARY 
*CALL OSSIZE
* 
 #
STOPIMS;
  
  
# 
      EXTERNAL VARIABLES
# 
 XREF 
   BEGIN
   PROC MGETS;               # ALLOCATE EMPTY BUFFER                   #
   PROC BLINK;               # QUEUE MSG ON APPL-S ACB                 #
   PROC OSCHAPP;             # SCHEDULE APPLICATION                    #
   PROC XTRACE;              # RECORD PROCEDURE CALL                   #
   LABEL RJMAIN;             # RETURN ADDRESS IN OVLCALL               #
   END
  
# 
      INTERNAL VARIABLES
# 
      ITEM BUFADDR;          # SM BUFFER                               #
      ITEM BUFSIZE ;
      ITEM EXTRAB U ;              # EXTRA LENGTH OF CON/END/R         #
      ITEM I ;
  
  
#**********************************************************************#
  
      BEGIN 
  
      CONTROL IFEQ DEBUG,1; 
        XTRACE("HCRRC") ; 
      CONTROL FI; 
  
#  GET BUFFER TO HOLD CR/RCN/R                                         #
  
      P<DRHDRWD> = PARAMS7 ;             # CON/END/R BUFFER            #
  
      IF PARAMS7 EQ 0              # NOT CON/END/R CASE                #
        OR ( DRBS[0] LQ  ABHSIZE + BLKHSIZE + LCONEN   #         = 4   #
         AND PARAMS7 NQ 0  )       # AND FOR CON/END/R CASE            #
      THEN
        EXTRAB = 0 ;
      ELSE
        BEGIN 
        EXTRAB = DRBS[0] - BLKHSIZE - ABHSIZE - LCONEN ; # EXTRA WORDS #
                                         # IN CON/END/R                #
        END 
      BUFSIZE = LCRRCN + BLKHSIZE + ABHSIZE    # NORMAL LENGTH OF CR/RC#
                           + EXTRAB ;                  # AND LENGTH    #
                                            # OF EXTRA WORD IN CON/END #
      MGETS(BUFSIZE, BUFADDR, TRUE) ; 
  
#  SET UP APPLICATION BLOCK HEADER                                     #
  
      P<AHEADER> = BUFADDR + BLKHSIZE;  # ADDR TO HOLD ABH             #
      ABHABT[0] = APPCMD;    # BLOCK TYPE                              #
      ABHACT[0] = CT60TRANS; # CHARACTER TYPE - TRANSPARENT            #
      ABHTLC[0] = LCRRCN + EXTRAB ;      # TEXT LENGTH                 #
  
#  SET UP CR/RCN/R MESSAGE                                             #
  
      P<SUPMSG> = BUFADDR + BLKHSIZE + ABHSIZE;  # FWA OF TEXT         #
      P<SMNVF> = P<SUPMSG>;  # BASE CR/RCN/R                           #
      PFCSFC[0] = CRRCN;     # SET FUNCTION CODE                       #
      CRRRCN[0] = PARAMS3;  # REASON CODE FOR RECONNECT TO NVF         #
      P<ACNB> = PARAMS1;  # ACNB FOR NVF RECONNECT                     #
      P<NCNB> = ACNBNCNB[0];  # ADDR OF CORRESPONDING NCNB             #
      CRNACN[0] = ACNBACN[0];  # NVF CONNECTION                        #
      CRABL[0] = ACNBABL[0];  # APPLICATION BLOCK LIMIT                #
      CRDT[0] = ACNBDT[0];   # DEVICE TYPE                             #
      CRVCB[0] = ACNBVCBO[0];  # VCB ORDINAL                           #
      CRUNAME[0] = PARAMS2;  # NEXT APPLICATION NAME                   #
      CRAN[0] = PARAMS4;  # AN OF APPL WHICH HAD THE CONN              #
      CRRCTC[0] = NCNBTC[0];  # TERMINAL CLASS                         #
      CRRCPW[0] = NCNBPW[0];  # PAGE WIDTH                             #
      CRRCPL[0] = NCNBPL[0];  # PAGE LENGTH                            #
      IF ACNBLIM[0] 
      THEN                   # CONNECTION IN LIMBO                     #
        CRLIMBO[0] = TRUE;
  
#     COPY EXTRA WORDS IN CON/END INTO CR/RCN/R BUFFER                 #
      IF BUFSIZE GR LCRRCN + BLKHSIZE + ABHSIZE 
      THEN
        BEGIN                               # EXTRA BUFFER TO BE COPIED#
        FOR I = 0 STEP 1 UNTIL EXTRAB - 1 
        DO
          BEGIN 
          SPMWD[ LCRRCN + I ] = CMWORD[ BLKHSIZE + ABHSIZE
                                            + LCONEN + I ] ;
          END 
        END                                 # EXTRA BUFFER TO BE COPIED#
  
#  QUEUE CR/RCN/R ON NVF-S ACB                                         #
      BLINK(BUFADDR,ATACBA[NVFAN]);  # QUEUE MSG ON NVF-S ACB          #
      OSCHAPP(ATACBA[NVFAN]);  # SCHEDULE APPLICATION                  #
      GOTO RJMAIN;           # RETURN TO CALLING PROGRAM               #
      END 
TERM
