*DECK FCSCCHC 
USETEXT TEXTFCS;
      PROC FCSCCHC; 
*CALL COPYRITE
# TITLE FCSCCHC - PROCESS CREATE_HOST_CONNECTION COMMAND.              #
  
      BEGIN                            # FCSCCHC                       #
  
# 
**    FCSCCHC - PROCESS CREATE_HOST_CONNECTION COMMAND. 
* 
*     C. J. RAMSAY                     87/11/03 
* 
*     THIS PROCEDURE PROCESSES THE CREATE_HOST_CONNECTION COMMAND.
* 
*     PROC FCSCCHC
* 
*     ENTRY   PARMS[1]   = HOST NAME. 
*             PARMS[2]   = AUTO LOGIN MODE. 
*             PARMS[3]   = STATUS VARIABLE (IGNORED). 
*             FTPAUTOM   = FTP AUTO LOGIN MODE. 
*             MBHX       = INDEX OF MBT ENTRY FOR HOST NAME FILE. 
* 
*     EXIT    FTPERROR   = TRUE IF PROTOCOL ERROR DETECTED. 
*             FTPFAIL    = TRUE IF COMMAND FAILURE DETECTED.
*             FTPUSERE   = TRUE IF USER ERROR DETECTED. 
*             FTPAUTOM   = FTP AUTO LOGIN MODE. 
*             FTPSTATE   = *FTPUOPEN* IF CONNECTED TO REMOTE HOST.
*             FTPTYPE    = *ASCII*. 
*             FTPFORM    = *NON_PRINT*. 
*             FTPSTRU    = *FILE*.
*             FTPMODE    = *STREAM*.
*             FTPBYTE    = *60*.
* 
*     METHOD  UPDATE AUTO LOGIN MODE. 
*             CHECK FOR NO REMOTE HOST CONNECTION.
*             CONNECT TO SPECIFIED REMOTE HOST. 
*             WAIT FOR REPLY FROM REMOTE HOST.
*             RESET FILE TRANSFER CHARACTERISTICS.
*             IF AUTO LOGIN REQUESTED THEN
*               RETRIEVE AUTO LOGIN INFORMATION FOR THIS REMOTE HOST. 
*               PROCESS FTP LOGIN SEQUENCE. 
* 
# 
  
# 
****  PROC FCSCCHC - XREF LIST
# 
      XREF
        BEGIN 
        FUNC FCSFLIS B;                # FTP LOGIN SEQUENCE            #
        PROC FCSNODB;                  # OUTPUT DATA BLOCK             #
        PROC FCSNWDB;                  # WAIT FOR DATA BLOCK           #
        PROC FCSNWFR;                  # WAIT FOR FTP REPLY            #
        PROC FCSOWOF;                  # WRITE TO OUTPUT FILE          #
        FUNC FCSUFAE B;                # FIND AUTO LOGIN INFORMATION   #
        PROC MESSAGE;                  # DISPLAY / DAYFILE A MESSAGE   #
        PROC MOVE;                     # MOVE A NUMBER OF WORDS        #
        PROC NETUCAS;                  # COPY AN ASCII STRING          #
        PROC NETUCLR;                  # CLEAR AN AREA OF MEMORY       #
        END 
# 
****
# 
      ARRAY ARCMSG [00:00] S(6);
        BEGIN 
        ITEM ARC$TEXT    C(00,00,52) =
       ["--ERROR--  CONNECTION TO REMOTE HOST ALREADY EXISTS."];
        ITEM ARC$ZBYTE   U(05,12,48) = [0]; 
        END 
  
      ARRAY CNCMSG [00:00] S(6);
        BEGIN 
        ITEM CNC$TEXT    C(00,00,53) =
       ["--ERROR--  UNABLE TO CONNECT TO HOST NAME SPECIFIED. "]; 
        ITEM CNC$ZBYTE   U(05,18,42) = [0]; 
        END 
  
      ARRAY BEGCON [00:00] S(4);
        BEGIN 
        ITEM  BCS$TEXT   C(00,00,31) =
       [" FTP CONNECTING TO REMOTE HOST."]; 
        ITEM  BCS$ZBYTE  U(03,06,54) = [0]; 
        END 
  
      ARRAY ENDCON [00:00] S(4);
        BEGIN 
        ITEM  ECS$TEXT   C(00,00,30) =
       [" FTP CONNECTED TO REMOTE HOST."];
        ITEM  ECS$ZBYTE  U(03,00,60) = [0]; 
        END 
      CONTROL EJECT;
# 
*     START MAIN PROCEDURE
# 
      IF PARAMNB[2] NQ 0
      THEN
        BEGIN                          # AUTO LOGIN MODE SPECIFIED     #
        FTPAUTOM = PARAMNB[2];         # UPDATE FTP AUTO LOGIN MODE    #
        END 
# 
*     CHECK IF REMOTE CONNECTION ALREADY EXISTS.
# 
      IF FTPSTATE LAN FTPUOPEN NQ 0 
      THEN
        BEGIN                          # REMOTE CONNECTION EXISTS      #
        FCSOWOF (ARCMSG[0], INTERNAL$);# WRITE TO OUTPUT FILE          #
        FTPUSERE = TRUE;               # SET USER ERROR FLAG           #
        RETURN;                        # GET OUT OF HERE QUICKLY       #
        END 
# 
*     ATTEMPT TO CONNECT TO SPECIFIED REMOTE HOST.
# 
      MESSAGE (BEGCON[0], 1);          # DISPLAY CONNECTING MESSAGE    #
      OUTLEN = AIPIHDR$;               # INITIALIZE OUTPUT LENGTH      #
      NETUCAS (PARMS[1], 0, PARAMSZ[1], 
               OUTBUF, OUTLEN);        # COPY HOST NAME                #
      FCSNODB (AIPIC, REMOTEID);       # OUTPUT CONNECT BLOCK          #
      FCSNWDB (AIPICR, REMOTEID);      # WAIT FOR CONNECT RESPONSE     #
      IF NOT AIPI$NORM[0] 
      THEN
        BEGIN                          # ABNORMAL RESPONSE             #
        FCSOWOF (CNCMSG[0], INTERNAL$);# WRITE TO OUTPUT FILE          #
        FTPUSERE = TRUE;               # SET USER ERROR FLAG           #
        RETURN;                        # GET OUT OF HERE QUICKLY       #
        END 
      MESSAGE (ENDCON[0], 1);          # DISPLAY CONNECTED MESSAGE     #
# 
*     WAIT FOR REPLY FROM REMOTE HOST.
# 
      FOR FTPRPYC1 = 1
        WHILE (FTPRPYC1 EQ 1) DO
        BEGIN                          # LOOP WHILE INTERMEDIATE REPLY #
        FCSNWFR (REMOTEID);            # WAIT FOR FTP REPLY            #
        IF (FTPRPYC1 EQ 3) OR 
           (FTPRPYC1 EQ 5)
        THEN
          BEGIN                        # PROTOCOL ERROR DETECTED       #
          FTPERROR = TRUE;             # SET FTP ERROR FLAG            #
          END 
        IF (FTPRPYC1 EQ 4)
        THEN
          BEGIN                        # COMMAND FAILURE DETECTED      #
          FTPFAIL = TRUE;              # SET FTP FAILURE FLAG          #
          END 
        END 
# 
*     IF SESSION ESTABLISHED THEN UPDATE FTP USER STATE, FILE TRANSFER
*     CHARACTERISTICS AND REMOTE HOST NAME. 
# 
      IF FTPRPYC1 EQ 2
      THEN
        BEGIN                          # SERVICE READY FOR NEW USER    #
        FTPSTATE = FTPUOPEN;           # USER STATE IS OPEN            #
        FTPTYPE  = OPTASCII$;          # FTP TYPE IS ASCII             #
        FTPFORM  = OPTNONPR$;          # FTP FORMAT IS NON_PRINT       #
        FTPSTRU  = OPTFILE$;           # FTP STRUCTURE IS FILE         #
        FTPMODE  = OPTSTREAM$;         # FTP MODE IS STREAM            #
        FTPBYTE  = OPT60$;             # FTP BYTE SIZE IS 60           #
        MOVE (PARSIZ$, PARMS[1],
              FTPHOST);                # SAVE REMOTE HOST NAME         #
# 
*     PROCESS AUTO LOGIN SEQUENCE IF REQUIRED.
# 
        IF FTPAUTOM EQ OPTON$ 
        THEN
          BEGIN                        # AUTO LOGIN REQUIRED           #
          IF FCSUFAE
          THEN
            BEGIN                      # FOUND AUTO LOGIN INFORMATION  #
            MOVE (ALISIZ$ - PARSIZ$,
                  ALI[ALIX+PARSIZ$],
                  PARMS[1]);           # USER,PASS,FAMILY,ACCT,PROJECT #
            END 
          ELSE
            BEGIN                      # NO AUTO LOGIN INFORMATION     #
            NETUCLR (LOC(PARMS[1]), 
                     PARSIZ$ * 5);     # CLEAR ALL LOGIN PARAMETERS    #
            END 
  
          IF FCSFLIS                   # PROCESS FTP LOGIN SEQUENCE    #
          THEN
            BEGIN                      # LOGIN SEQUENCE COMPLETED OKAY #
            END 
          END 
        END 
  
      RETURN;                          # RETURN TO CALLER              #
  
      END                              # FCSCCHC                       #
  
      TERM
