*DECK FCSCPES 
USETEXT TEXTFCS;
      PROC FCSCPES; 
*CALL COPYRITE
# TITLE FCSCPES - COMMAND PROCESSOR EXECUTION SEQUENCER.               #
  
      BEGIN                            # FCSCPES                       #
  
# 
**    FCSCPES - COMMAND PROCESSOR EXECUTION SEQUENCER.
* 
*     C. J. RAMSAY                     87/11/03 
* 
*     THIS PROCEDURE PROCESSES A USER COMMAND.
* 
*     PROC FCSCPES
* 
*     ENTRY   FTPCOMMAND = COMMAND NUMBER RETURNED FROM USER COMMAND
*                          PARSER.
* 
*     EXIT    FTPERROR   = TRUE IF PROTOCOL ERROR DETECTED. 
*             FTPFAIL    = TRUE IF COMMAND FAILURE DETECTED.
*             FTPUSERE   = TRUE IF USER ERROR DETECTED. 
* 
*     METHOD  CALL THE APPROPRIATE COMMAND PROCESSOR. 
*             IF COMMAND FAILS THEN WRITE A MESSAGE TO THE OUTPUT FILE. 
*             IN BATCH MODE IF THE COMMAND FAILS THEN ABORT.
* 
# 
  
# 
****  PROC FCSCPES - XREF LIST
# 
      XREF
        BEGIN 
        PROC ABORT;                    # ABORT JOB                     #
        PROC FCSCAPF;                  # APPEND_FILE                   #
        PROC FCSCCAL;                  # CHANGE_AUTO_LOGIN_MODE        #
        PROC FCSCCBM;                  # CHANGE_BELL_MODE              #
        PROC FCSCCCS;                  # CHANGE_CODE_SET               #
        PROC FCSCCDM;                  # CHANGE_DEBUG_MODE             #
        PROC FCSCCEE;                  # CHANGE_EXPRESSION_EVALUATION  #
        PROC FCSCCFN;                  # CHANGE_FILE_NAME              #
        PROC FCSCCIF;                  # CHANGE_INPUT_FILE             #
        PROC FCSCCOF;                  # CHANGE_OUTPUT_FILE            #
        PROC FCSCCPC;                  # CHANGE_PORT_COMMAND_MODE      #
        PROC FCSCCTT;                  # CHANGE_TRANSFER_TYPE          #
        PROC FCSCCVM;                  # CHANGE_VERBOSE_MODE           #
        PROC FCSCCWD;                  # CHANGE_WORKING_DIRECTORY      #
        PROC FCSCCRD;                  # CREATE_DIRECTORY              #
        PROC FCSCCHC;                  # CREATE_HOST_CONNECTION        #
        PROC FCSCDAL;                  # DEFINE_AUTO_LOGIN             #
        PROC FCSCDED;                  # DELETE_DIRECTORY              #
        PROC FCSCDEF;                  # DELETE_FILE                   #
        PROC FCSCDHC;                  # DELETE_HOST_CONNECTION        #
        PROC FCSCDCI;                  # DISPLAY_COMMAND_INFORMATION   #
        PROC FCSCDCL;                  # DISPLAY_COMMAND_LIST_ENTRY    #
        PROC FCSCDID;                  # DISPLAY_DIRECTORY             #
        PROC FCSCDFN;                  # DISPLAY_FILE_NAMES            #
        PROC FCSCDFO;                  # DISPLAY_FTP_OPTIONS           #
        PROC FCSCDLH;                  # DISPLAY_LOCAL_HELP            #
        PROC FCSCDRH;                  # DISPLAY_REMOTE_HELP           #
        PROC FCSCDWD;                  # DISPLAY_WORKING_DIRECTORY     #
        PROC FCSCEWD;                  # ELEVATE_WORKING_DIRECTORY     #
        PROC FCSCGEF;                  # GET_FILE                      #
        PROC FCSCLOU;                  # LOGIN_USER                    #
        PROC FCSCQUI;                  # QUIT                          #
        PROC FCSCREF;                  # REPLACE_FILE                  #
        PROC FCSCSFC;                  # SEND_FTP_COMMAND              #
        PROC FCSOWOF;                  # WRITE TO OUTPUT FILE          #
        END 
# 
****
# 
      SWITCH CMDSWITCH   LABNULL, 
                         LABAPPF, 
                         LABCHAALM, 
                         LABCHABM,
                         LABCHACS,
                         LABCHADM,
                         LABCHAEE,
                         LABCHAFN,
                         LABCHAIF,
                         LABCHAOF,
                         LABCHAPCM, 
                         LABCHATT,
                         LABCHAVM,
                         LABCHAWD,
                         LABCRED, 
                         LABCREHC,
                         LABDEFAL,
                         LABDELD, 
                         LABDELF, 
                         LABDELHC,
                         LABDISCI,
                         LABDISCLE, 
                         LABDISD, 
                         LABDISFN,
                         LABDISFO,
                         LABDISLH,
                         LABDISRH,
                         LABDISWD,
                         LABELEWD,
                         LABGETF, 
                         LABLOGU, 
                         LABQUIT, 
                         LABREPF, 
                         LABSENFC;
  
      ARRAY FAILMSG [00:00] S(7); 
        BEGIN 
        ITEM FAIL$TEXT   C(00,00,62) =
     ["--ERROR--  THE PREVIOUS COMMAND DID NOT COMPLETE SUCCESSFULLY."];
        ITEM FAIL$ZBYTE  C(06,12,48) = [0]; 
        END 
  
      ARRAY FERRMSG [00:00] S(6); 
        BEGIN 
        ITEM FERR$TEXT   C(00,00,56) =
       ["--ERROR--  FTP PROTOCOL ERROR DETECTED, COMMAND ABORTED."];
        ITEM FERR$ZBYTE  C(05,36,24) = [0]; 
        END 
      CONTROL EJECT;
# 
*     START MAIN PROCEDURE
# 
      IF FTPCOMMAND EQ CMDERROR 
      THEN
        BEGIN                          # PARSER ENCOUNTERED AN ERROR   #
        FTPUSERE = TRUE;               # SET USER ERROR FLAG           #
        END 
      ELSE
        BEGIN 
# 
*     RESET ERROR FLAGS AND REPLY LENGTHS.
# 
        FTPERROR = FALSE;              # RESET FTP PROTOCOL ERROR      #
        FTPFAIL  = FALSE;              # RESET COMMAND FAILURE         #
        FTPUSERE = FALSE;              # RESET USER ERROR              #
        LRBLEN   = 0;                  # RESET LOCAL REPLY LENGTH      #
        RRBLEN   = 0;                  # RESET REMOTE REPLY LENGTH     #
        ERBLEN   = 0;                  # RESET ERROR REPLY LENGTH      #
# 
*     CALL THE APPROPRIATE COMMAND PROCESSOR. 
# 
        GOTO CMDSWITCH[FTPCOMMAND];    # SWITCH ON COMMAND NUMBER      #
  
LABNULL:  
        RETURN;                        # PARSER ENCOUNTERED NULL INPUT #
  
LABAPPF:  
        FCSCAPF;                       # APPEND_FILE                   #
        GOTO ENDSWITCH; 
  
LABCHAALM:  
        FCSCCAL;                       # CHANGE_AUTO_LOGIN_MODE        #
        GOTO ENDSWITCH; 
  
LABCHABM: 
        FCSCCBM;                       # CHANGE_BELL_MODE              #
        GOTO ENDSWITCH; 
  
LABCHACS: 
        FCSCCCS;                       # CHANGE_CODE_SET               #
        GOTO ENDSWITCH; 
  
LABCHADM: 
        FCSCCDM;                       # CHANGE_DEBUG_MODE             #
        GOTO ENDSWITCH; 
  
LABCHAEE: 
        FCSCCEE;                       # CHANGE_EXPRESSION_EVALUATION  #
        GOTO ENDSWITCH; 
  
LABCHAFN: 
        FCSCCFN;                       # CHANGE_FILE_NAME              #
        GOTO ENDSWITCH; 
  
LABCHAIF: 
        FCSCCIF;                       # CHANGE_INPUT_FILE             #
        GOTO ENDSWITCH; 
  
LABCHAOF: 
        FCSCCOF;                       # CHANGE_OUTPUT_FILE            #
        GOTO ENDSWITCH; 
  
LABCHAPCM:  
        FCSCCPC;                       # CHANGE_PORT_COMMAND_MODE      #
        GOTO ENDSWITCH; 
  
LABCHATT: 
        FCSCCTT;                       # CHANGE_TRANSFER_TYPE          #
        GOTO ENDSWITCH; 
  
LABCHAVM: 
        FCSCCVM;                       # CHANGE_VERBOSE_MODE           #
        GOTO ENDSWITCH; 
  
LABCHAWD: 
        FCSCCWD;                       # CHANGE_WORKING_DIRECTORY      #
        GOTO ENDSWITCH; 
  
LABCRED:  
        FCSCCRD;                       # CREATE_DIRECTORY              #
        GOTO ENDSWITCH; 
  
LABCREHC: 
        FCSCCHC;                       # CREATE_HOST_CONNECTION        #
        GOTO ENDSWITCH; 
  
LABDEFAL: 
        FCSCDAL;                       # DEFINE_AUTO_LOGIN             #
        GOTO ENDSWITCH; 
  
LABDELD:  
        FCSCDED;                       # DELETE_DIRECTORY              #
        GOTO ENDSWITCH; 
  
LABDELF:  
        FCSCDEF;                       # DELETE_FILE                   #
        GOTO ENDSWITCH; 
  
LABDELHC: 
        FCSCDHC;                       # DELETE_HOST_CONNECTION        #
        GOTO ENDSWITCH; 
  
LABDISCI: 
        FCSCDCI;                       # DISPLAY_COMMAND_INFORMATION   #
        GOTO ENDSWITCH; 
  
LABDISCLE:  
        FCSCDCL;                       # DISPLAY_COMMAND_LIST_ENTRY    #
        GOTO ENDSWITCH; 
  
LABDISD:  
        FCSCDID;                       # DISPLAY_DIRECTORY             #
        GOTO ENDSWITCH; 
  
LABDISFN: 
        FCSCDFN;                       # DISPLAY_FILE_NAMES            #
        GOTO ENDSWITCH; 
  
LABDISFO: 
        FCSCDFO;                       # DISPLAY_FTP_OPTIONS           #
        GOTO ENDSWITCH; 
  
LABDISLH: 
        FCSCDLH;                       # DISPLAY_LOCAL_HELP            #
        GOTO ENDSWITCH; 
  
LABDISRH: 
        FCSCDRH;                       # DISPLAY_REMOTE_HELP           #
        GOTO ENDSWITCH; 
  
LABDISWD: 
        FCSCDWD;                       # DISPLAY_WORKING_DIRECTORY     #
        GOTO ENDSWITCH; 
  
LABELEWD: 
        FCSCEWD;                       # ELEVATE_WORKING_DIRETORY      #
        GOTO ENDSWITCH; 
  
LABGETF:  
        FCSCGEF;                       # GET_FILE                      #
        GOTO ENDSWITCH; 
  
LABLOGU:  
        FCSCLOU;                       # LOGIN_USER                    #
        GOTO ENDSWITCH; 
  
LABQUIT:  
        FCSCQUI;                       # QUIT                          #
        GOTO ENDSWITCH; 
  
LABREPF:  
        FCSCREF;                       # REPLACE_FILE                  #
        GOTO ENDSWITCH; 
  
LABSENFC: 
        FCSCSFC;                       # SEND_FTP_COMMAND              #
        GOTO ENDSWITCH; 
# 
*     IF USER COMMAND FAILED, WRITE MESSAGE AND ERROR REPLIES TO
*     OUTPUT FILE.
# 
ENDSWITCH:  
  
        IF FTPFAIL
        THEN
          BEGIN                        # COMMAND FAILURE DETECTED      #
          FCSOWOF (FAILMSG, INTERNAL$);# WRITE MESSAGE TO OUTPUT FILE  #
          END 
  
        IF FTPERROR 
        THEN
          BEGIN                        # FTP PROTOCOL ERROR DETECTED   #
          FCSOWOF (FERRMSG, INTERNAL$);# WRITE MESSAGE TO OUTPUT FILE  #
          END 
  
        IF ERBLEN NQ 0
        THEN
          BEGIN                        # ERROR REPLY BUFFER NOT EMPTY  #
          FCSOWOF (ERB[0], ERBLEN);    # WRITE FTP ERROR REPLIES       #
          END 
        END 
# 
*     IN BATCH MODE IF THE COMMAND RESULTS IN AN ERROR THEN ABORT.
# 
      IF (NOT FTPINTER) AND 
         (FTPUSERE OR FTPFAIL OR FTPERROR)
      THEN
        BEGIN                          # NOT INTERACTIVE AND ERROR     #
        ABORT;                         # ABORT JOB                     #
        END 
  
      RETURN;                          # RETURN TO CALLER              #
  
      END                              # FCSCPES                       #
  
      TERM
