*DECK FCSCCOF 
USETEXT TEXTFCS;
      PROC FCSCCOF; 
*CALL COPYRITE
# TITLE FCSCCOF - PROCESS CHANGE_OUTPUT_FILE COMMAND.                  #
  
      BEGIN                            # FCSCCOF                       #
  
# 
**    FCSCCOF - PROCESS CHANGE_OUTPUT_FILE COMMAND. 
* 
*     C. J. RAMSAY                     87/11/03 
* 
*     THIS PROCEDURE PROCESSES THE CHANGE_OUTPUT_FILE COMMAND.
* 
*     PROC FCSCCOF
* 
*     ENTRY   PARMS[1]   = NEW OUTPUT FILE NAME.
*             PARMS[2]   = STATUS VARIABLE (IGNORED). 
*             FTPOUTPUT  = FTP OUTPUT FILE NAME.
*             MBOX       = INDEX OF MBT ENTRY FOR OUTPUT FILE.
* 
*     EXIT    FTPERROR   = TRUE IF PROTOCOL ERROR DETECTED. 
*             FTPFAIL    = TRUE IF COMMAND FAILURE DETECTED.
*             FTPUSERE   = TRUE IF USER ERROR DETECTED. 
*             FTPOUTPUT  = FTP OUTPUT FILE NAME.
*             MBOX       = INDEX OF MBT ENTRY FOR OUTPUT FILE.
* 
*     METHOD  VALIDATE LOCAL FILE NAME AND CHARACTERISTICS. 
*             FLUSH ANY PREVIOUS OUTPUT FILE. 
*             INITIALIZE THE OUTPUT FILE FET. 
*             UPDATE THE OUTPUT FILE NAME.
*             DETERMINE THE DEVICE TYPE OUTPUT FILE IS ASSIGNED TO. 
* 
# 
  
# 
****  PROC FCSCCOF - XREF LIST
# 
      XREF
        BEGIN 
        PROC FCSOWOF;                  # WRITE TO OUTPUT FILE          #
        FUNC FCSUIMB B;                # INITIALIZE AN MBT ENTRY       #
        FUNC FCSUVFC B;                # VALIDATE FILE CHARACTERISTICS #
        PROC FPSTAT;                   # GET FILE POSITION AND STATUS  #
        END 
# 
****
# 
      ARRAY EOUTMSG [00:00] S(6); 
        BEGIN 
        ITEM EOUT$TEXT   C(00,00,55) =
       ["--ERROR--  OUTPUT FILE DOES NOT SUPPORT ANY PARAMETERS."]; 
        ITEM EOUT$ZBYTE2 U(05,30,30) = [0]; 
        END 
      CONTROL EJECT;
# 
*     START MAIN PROCEDURE
# 
      IF PARAMLZ[1] NQ PARAMSZ[1] 
      THEN
        BEGIN                          # LOCAL FILE NAME + PARAMETERS  #
        FCSOWOF (EOUTMSG, INTERNAL$);  # WRITE ERROR MESSAGE           #
        FTPUSERE = TRUE;               # SET USER ERROR FLAG           #
        RETURN;                        # GET OUT OF HERE QICKLY        #
        END 
# 
*     CHECK IF CHANGING TO SAME FILE NAME.
# 
      IF PARAMNB[1] EQ FTPOUTPUT
      THEN
        BEGIN                          # CHANGING TO SAME FILE NAME    #
        RETURN;                        # GET OUT OF HERE QICKLY        #
        END 
# 
*     VALIDATE FILE CHARACTERISTICS.
# 
      IF PARAMNB[1] NQ "0"
      THEN
        BEGIN                          # OUTPUT FILE DESIRED           #
        IF NOT FCSUVFC (PARAMNZ[1], FALSE, FALSE, TRUE) 
        THEN
          BEGIN                        # INVALID FILE CHARACTERISTICS  #
          RETURN;                      # GET OUT OF HERE QUICKLY       #
          END 
        END 
# 
*     INITIALIZE MBT ENTRY FOR OUTPUT FILE. 
# 
      IF FCSUIMB (FTOUTPUT, PARAMNZ[1]) 
      THEN
        BEGIN                          # MBT ENTRY INITIALIZED         #
        MBOX      = MBTX;              # OUTPUT FILE MBT ENTRY INDEX   #
        FTPOUTPUT = PARAMNB[1];        # SAVE OUTPUT FILE NAME         #
        IF FTPOUTPUT EQ "0" 
        THEN
          BEGIN                        # NO OUTPUT FILE DESIRED        #
          MBT$LFNU[MBOX] = 0;          # CLEAR LOCAL FILE NAME         #
          RETURN;                      # GET OUT OF HERE QUICKLY       #
          END 
# 
*     DETERMINE DEVICE TYPE OUTPUT FILE IS ASSIGNED TO. 
# 
        FPSTAT (MBT[MBOX]);            # DETERMINE DEVICE TYPE         #
        IF (FTPINTER) AND 
           (FTPOUTPUT EQ "INPUT" OR FTPOUTPUT EQ "OUTPUT") AND
           (MBT$DT[MBOX] EQ 0)
        THEN
          BEGIN                        # *INPUT* / *OUTPUT* NOT THERE  #
          MBT$DT[MBOX] = "TT";         # ASSIGN IT TO THE TERMINAL     #
          END 
        END 
  
      RETURN;                          # RETURN TO CALLER              #
  
      END                              # FCSCCOF                       #
  
      TERM
