*DECK FCSCGEF 
USETEXT TEXTFCS;
      PROC FCSCGEF; 
*CALL COPYRITE
# TITLE FCSCGEF - PROCESS GET_FILE COMMAND.                            #
  
      BEGIN                            # FCSCGEF                       #
  
# 
**    FCSCGEF - PROCESS GET_FILE COMMAND. 
* 
*     C. J. RAMSAY                     87/11/03 
* 
*     THIS PROCEDURE PROCESSES THE GET_FILE COMMAND.
* 
*     PROC FCSCGEF
* 
*     ENTRY   PARMS[1]   = REMOTE FILE NAME.
*             PARMS[2]   = LOCAL FILE NAME. 
*             PARMS[3]   = STATUS VARIABLE (IGNORED). 
* 
*     EXIT    FTPERROR   = TRUE IF PROTOCOL ERROR DETECTED. 
*             FTPFAIL    = TRUE IF COMMAND FAILURE DETECTED.
*             FTPUSERE   = TRUE IF USER ERROR DETECTED. 
* 
*     METHOD  CHECK FOR REMOTE CONNECTION.
*             IF LOCAL FILE NAME NOT SPECIFIED THEN 
*               USE REMOTE FILE NAME AS LOCAL FILE NAME.
*               VALIDATE LOCAL FILE NAME. 
*             VALIDATE LOCAL FILE CHARACTERISTICS.
*             INITIALIZE MBT ENTRY FOR LOCAL FILE.
*             CREATE LOCAL FILE IF IT DOES NOT EXIST. 
*             PROCESS THE FTP FILE TRANSFER SEQUENCE
*               SENDING *STOR* FTP COMMAND TO LOCAL HOST. 
*               SENDING *RETR* FTP COMMAND TO REMOTE HOST.
* 
# 
  
# 
****  PROC FCSCGEF - XREF LIST
# 
      XREF
        BEGIN 
        FUNC FCSFFTS B;                # FTP FILE TRANSFER SEQUENCE    #
        PROC FCSOWOF;                  # WRITE TO OUTPUT FILE          #
        FUNC FCSUCRC B;                # CHECK FOR REMOTE CONNECTION   #
        FUNC FCSUIMB B;                # INITIALIZE MBT ENTRY          #
        FUNC FCSUVFC B;                # VALIDATE FILE CHARACTERISTICS #
        FUNC FCSUVFN B;                # VALIDATE NOS FILE NAME        #
        PROC FSTATUS;                  # CHECK IF LOCAL FILE EXISTS    #
        PROC MOVE;                     # MOVE A NUMBER OF WORDS        #
        PROC RECALL;                   # WAIT FOR OPERATION TO COMPLETE#
        PROC WRITEF;                   # WRITE END OF FILE             #
        END 
# 
****
# 
      ARRAY IFNMSG [00:00] S(8);
        BEGIN 
        ITEM IFN$TEXT    C(00,00,74) =      ["--ERROR--  VALUE MUST BE A
 VALID NOS FILE NAME FOR PARAMETER, LOCAL_FILE."];
        ITEM IFN$ZBYTE   U(07,24,36) = [0]; 
        END 
      CONTROL EJECT;
# 
*     START MAIN PROCEDURE
# 
      IF NOT FCSUCRC
      THEN
        BEGIN                          # NO REMOTE CONNECTION EXISTS   #
        RETURN;                        # GET OUT OF HERE QUICKLY       #
        END 
# 
*     IF LOCAL_FILE NOT SPECIFIED THEN USE THE SAME FILE NAME AS
*     REMOTE_FILE AND VALIDATE THE LOCAL FILE NAME. 
# 
      IF PARAMSZ[2] EQ 0
      THEN
        BEGIN                          # LOCAL_FILE NOT SPECIFIED      #
        MOVE (PARSIZ$, PARMS[1],
              PARMS[2]);               # USE REMOTE_FILE AS LOCAL_FILE #
        IF NOT FCSUVFN (PARMS[2]) 
        THEN
          BEGIN                        # INVALID NOS FILE NAME         #
          FCSOWOF (IFNMSG, INTERNAL$); # WRITE ERROR MESSAGE           #
          FTPUSERE = TRUE;             # SET USER ERROR FLAG           #
          RETURN;                      # GET OUT OF HERE QUICKLY       #
          END 
        END 
# 
*     VALIDATE LOCAL FILE CHARACTERISTICS.
# 
      IF NOT FCSUVFC (PARAMNZ[2], TRUE, FALSE, TRUE)
      THEN
        BEGIN                          # INVALID FILE CHARACTERISTICS  #
        RETURN;                        # GET OUT OF HERE QUICKLY       #
        END 
# 
*     INITIALIZE MBT ENTRY AND CREATE LOCAL FILE IF IT DOES NOT EXIST.
# 
      IF FCSUIMB (FTXFER, PARAMNZ[2]) 
      THEN
        BEGIN                          # MBT ENTRY INITIALIZED         #
        FSTATUS (MBT[MBXX]);           # CHECK IF FILE EXISTS          #
        IF MBT$FSTAT[MBXX] EQ 0 
        THEN
          BEGIN                        # LOCAL FILE DOES NOT EXIST     #
          WRITEF (MBT[MBXX]);          # WRITE END OF FILE             #
          RECALL (MBT[MBXX]);          # WAIT FOR OPERATION TO COMPLETE#
          END 
# 
*     INITIATE AND PROCESS THE FILE TRANSFER. 
# 
        IF FCSFFTS (FTPCSTOR, PARMS[2], 
                    FTPCRETR, PARMS[1]) 
        THEN
          BEGIN                        # FILE TRANSFER SEQUENCE OKAY   #
          END 
        MBT$LFN[MBXX] = XFERLFN[0];    # RESTORE TRANSFER FILE NAME    #
        END 
  
      RETURN;                          # RETURN TO CALLER              #
  
      END                              # FCSCGEF                       #
  
      TERM
