*DECK HCONREQ 
USETEXT ACB 
USETEXT ACNB
USETEXT AT
USETEXT LLCB
USETEXT NCNB
USETEXT NCNT
USETEXT NIPDEF
USETEXT PARAMS
USETEXT PT
USETEXT SUPMSG
PROC HCONREQ; 
STARTIMS; 
 #
*1DC  HCONREQ 
*     1. PROC NAME           AUTHOR              DATE 
*        HCONREQ             C. BITTNER          81/12/01 
* 
*     2. FUNCTIONAL DESCRIPTION 
*        FORMAT AND SEND CON/REQ/R TO APPLICATION 
* 
*     3. METHOD 
*        USE CR/SWH/R BUFFER
*        SET UP CON/REQ/R 
*          SET FUNCTION CODE
*          SET NEW ACN ASSIGNED TO THIS APPLICATION 
*        QUEUE CON/REQ/R ON APPLICATION-S ACB 
* 
*     4. ENTRY PARAMETERS 
*        PARAMS1 - SM BUFFER OF CR/SWH/R
*        PARAMS2 - ACNB OF NEW CONNECTION 
* 
*     5. EXIT PARAMETERS
*        NONE 
* 
*     6. COMDECKS CALLED AND SYMPL TEXTS USED 
*        ACB                 APPLICATION CONTROL BLOCK TEMPLATE 
*        ACNB 
*        AT 
*        LLCB                LOGICAL LINK CONTROL BLOCK TEMPLATE
*        NCNB 
*        NCNT                NETWORK CONNECTION TABLE TEMPLATE
*        NIPDEF 
*        PARAMS 
*        PT 
*        SUPMSG 
* 
*     7. ROUTINES AND OVERLAYS CALLED 
*        ABORT - ISSUE DAYFILE MESSAGE AND ABORT NIP
*        BLINK - QUEUE MSG ON APPL-S ACB
*        LOCLLCB - LOCATE LOGICAL LINK CONTROL BLOCK
*        LOCNCNT - LOCATE NETWORK CONNECTION TABLE
*        OSCHAPP - SCHEDULE APPLICATION 
*        MRELS   - RELEASE BUFFER SPACE 
*        XTRACE - RECORD PROCEDURE CALL 
* 
*     8. DAYFILE MESSAGES AND OTHER IMPORTANT INFORMATION 
*        THIS PROCEDURE IS CALLED BY SECONDARY OVERLAY STRTSW 
*        VIA HCSTTP.
* 
 #
STOPIMS;
  
# 
      EXTERNAL VARIABLES
# 
 XREF 
   BEGIN
   PROC ABORT;               # ISSUE DAYFILE MESSAGE AND ABORT NIP     #
   PROC BLINK;               # QUEUE MSG ON APPL-S ACB                 #
   PROC LOCLLCB;             # LOCATE LOGICAL LINK CONTROL BLOCK       #
   PROC LOCNCNT;             # LOCATE NETWORK CONNECTION TABLE         #
   PROC OSCHAPP;             # SCHEDULE APPLICATION                    #
   PROC MRELS ; 
   PROC XTRACE;              # RECORD PROCEDURE CALL                   #
   END
  
  
# 
      INTERNAL VARIABLES
# 
      ITEM BUFADDR;          # SM BUFFER ADDRESS                       #
      ITEM ERROR;            # INTERNAL ERROR FLAG                     #
  
#**********************************************************************#
  
      BEGIN 
  
      CONTROL IFEQ DEBUG,1; 
        XTRACE("HCONR") ; 
      CONTROL FI; 
  
      BUFADDR = PARAMS1;     # SM BUFFER CR/SWH/R                      #
      P<SMNVF> = BUFADDR + BLKHSIZE + ABHSIZE;  # FWA OF CR/SWH/R      #
      P<SUPMSG> = P<SMNVF>;  # BASE CON/REQ                            #
  
#  SET UP CON/REQ/R          #
  
      PFCSFC[0] = CONREQ;    # SET FUNCTION CODE                       #
      P<ACNB> = PARAMS2;
      CONACN[0] = ACNBACN[0];  # NEW ACN ASSIGNED TO THIS APPL         #
      IF ACNBBS[0] EQ (ACNBSIZE+ACNBAPEN) 
      THEN                   # A-A CONNECTION   SENDING APPL           #
        BEGIN 
        IF ACNBDT[0] EQ DT$INTA 
        THEN                 # INTRAHOST A-A CONNECTION                #
          BEGIN              # ADD CALLED APP NAME TO CON/REQ          #
          CONANM[0] = ACNBANM[0];  # NAME OF CALLED APPLICATION        #
          END 
        CONABN[0] = ACNBABN[0];  # APPLICATION BLOCK NUMBER            #
        ACNBBS [0] = ACNBSIZE;   # GET RID NOW OF APPENDIX ACNB        #
        ACNBABS[0] = ACNBAPEN;   # GET READY FOR MRELS CALL ON APPENDIX#
        MRELS (PARAMS2+ACNBSIZE);# AND RELEASE THE APPENDIX FROM ACNB  #
        END 
      ELSE                   # APPLICATION RECEIVING NEW CONNECTION    #
        BEGIN 
        IF ACNBDT[0] EQ DT$INTA 
        THEN                 # INTRAHOST A-A CONNECTION                #
          BEGIN              # ADD CALLED APP NAME TO CON/REQ          #
          P<NCNB> = ACNBNCNB[0];  # ADDR OF CORRESPONDING NCNB         #
          ERROR = 0;         # INITIALIZE INTERNAL ERROR FLAG          #
          IF P<NCNB> EQ 0 
          THEN               # INTERNAL ERROR - NCNB SHOULD EXIST      #
            BEGIN 
            ERROR = 1;       # SET INTERNAL ERROR FLAG                 #
            END 
          ELSE               # NCNB EXISTS                             #
            BEGIN 
            LOCLLCB(NCNBTN[0],NCNBHN[0],P<LLCB>);  # FIND REVERSE LLCB #
                             # FOR INTRAHOST A-A CONNECTION            #
            IF P<LLCB> EQ 0 
            THEN             # INTERNAL ERROR - LLCB SHOULD EXIST      #
              BEGIN 
              ERROR = 2;     # SET INTERNAL ERROR FLAG                 #
              END 
            ELSE             # REVERSE LLCB EXISTS                     #
              BEGIN 
              LOCNCNT(P<LLCB>,NCNBCN[0],P<NCNT>);  # FIND REVERSE NCNT #
              IF P<NCNT> EQ 0 
              THEN           # INTERNAL ERR - REVERSE NCNT SHOULD EXIST#
                BEGIN 
                ERROR = 3;   # SET INTERNAL ERROR FLAG                 #
                END 
              ELSE           # NCNT EXISTS                             #
                BEGIN 
                P<NCNB> = NCNTNCNB[0];  # ADDRESS OF REVERSE NCNB      #
                IF P<NCNB> EQ 0 
                THEN         # NIP ERR - REVERSE NCNB SHOULD EXIST     #
                  BEGIN 
                  ERROR = 4; # SET INTERNAL ERROR FLAG                 #
                  END 
                ELSE         # NCNB EXISTS                             #
                  BEGIN 
                  P<ACNB> = NCNBACNB[0];  # ADDR OF REVERSE ACNB       #
                  IF P<NCNB> EQ 0 
                  THEN       # NIP ERR - REVERSE ACNB SHOULD EXIST     #
                    BEGIN 
                    ERROR = 5; # SET INTERNAL ERROR FLAG               #
                    END 
                  ELSE       # ACNB EXISTS                             #
                    BEGIN 
                    IF ACNBBS[0] EQ (ACNBSIZE+ACNBAPEN) 
                    THEN     # CONNECTION NOT SWITCHED FROM NVF YET    #
                      BEGIN 
                      P<ACB> = ATACBA[ACNBIAN[0]];  # ACB ADDRESS      #
                      END 
                    ELSE     # CONNECTION SWITCHED TO INITIATING APP   #
                      BEGIN 
                      P<ACB> = ATACBA[ACNBAN[0]];  # ACB ADDRESS       #
                      END 
                    CONANM[0] = ACBANAME[0]; # NAME OF OTHER APP       #
                    P<ACNB> = PARAMS2;  # RESTORE ACNB BASE ARRAY      #
                    END 
                  END 
                END 
              END 
            END 
          IF ERROR NQ 0 
          THEN               # INTERNAL NIP ERROR HAS OCCURRED         #
            BEGIN 
            ABORT("NIP INTERNAL ERROR - HCONREQ",0);
            END 
          END 
        END 
  
#  QUEUE ON APPLICATION-S ACB                                          #
  
      BLINK(BUFADDR,ATACBA[ACNBAN[0]]);  # QUEUE MSG ON APPL-S ACB     #
      OSCHAPP(ATACBA[ACNBAN[0]]);  # SCHEDULE APPLICATION              #
      RETURN ;
      END 
TERM
