*DECK FFSRSDT 
USETEXT TEXTFFS                        # FS SYSTEM TEXT                #
PROC FFSRSDT(EVENT, RETSTAT, RSPCN);
*CALL COPYRITE
# TITLE FFSRSDT - SETUP FOR DATA TRANSFER.                             #
  
      BEGIN                            # FFSRSDT                       #
  
# 
**    FFSRSDT - SETUP FOR DATA TRANSFER.
* 
*     CMP                              02/02/88 
* 
*     PROC FFSRPDT(EVENT, RETSTAT, RSPCN) 
* 
*     ENTRY     (EVENT) = TRTYPE
*                           RETR, 
*                           STOR, 
*                           APPE, 
*                           LIST. 
*               (RSPCN)   = RESPONSE CONNECTION ENTRY TO USE. 
*               (TPTTYPE) = CURRENT REPRESENTATION TYPE.
*               (SITECS)  = CURRENT CHARACTER SET.
* 
*     EXIT      (RETSTAT) = 0 IF NO ERRORS, 
*                           ELSE FILE ERRORS OCCURRED.
* 
*     DESCRIPTION 
*     RETURN. 
# 
  
      ITEM EVENT       S:TRTYPE;       # EVENT SET IN FFSLFLH          #
      ITEM RETSTAT     U;              # STATUS RETURNED BY FFSCPRS    #
      ITEM RSPCN       U;              # RESPONSE CONNECTION ENTRY NO. #
  
# 
***   PROC FFSRSDT - XREF LIST BEGIN. 
# 
  
      XREF
        BEGIN 
        PROC ABORT;                    # NOS ABORT MACRO               #
        PROC FFSCPRS;                  # FILE I-O PRESET ROUTINE       #
        PROC FFSLCRP;                  # CM REQUEST PROCESSOR          #
        PROC FFSUCDA;                  # CONVERT DISPLAY MSG TO ASCII  #
        PROC FILINFO;                  # NOS FILINFO MACRO             #
        PROC RETERN;                   # RETURN A FILE                 #
        END 
  
# 
***   PROC FFSRSDT - XREF LIST END. 
# 
  
      ITEM BINARY    B;                # TRUE IN BINARY TRANSFER       #
      ITEM CSIN      U;                # INPUT CHARACTER SET           #
      ITEM CSOUT     U;                # OUTPUT CHARACTER SET          #
      ITEM LENCHAR   U;                # BYTES IN CONVERTED MSG        #
  
      ARRAY ERR$MSG [00:00] S(09);
        BEGIN 
        ITEM ERR$C1  C(00, 00, 30) =
          ["550-REQUESTED ACTION NOT TAKEN"]; 
        ITEM ERR$ZB1 U(03, 00, 60) = [0]; 
        ITEM ERR$C   C(04, 00, 40) =
          ["550 FILE DISK ERRORS HAVE OCCURRED      "]; 
        ITEM ERR$ZB2 U(08, 00, 60) = [0]; 
        END 
  
      CONTROL EJECT;
  
# 
*     CASE TYPE 
*     OF
*       A:  
*         IF EVENT INDICATES SENDING DATA 
*         THEN
*           SET CSIN TO THE SITECS. 
*           SET CSOUT TO CS88.
*         ELSE
*           SET CSIN TO CS88. 
*           SET CSOUT TO SITECS.
# 
  
      IF TPTTYPE[0] EQ TYPE$A 
      THEN                             # ASCII DATA BYTES              #
        BEGIN 
        BINARY = FALSE; 
        IF EVENT EQ S"RETR" 
        THEN                           # SENDING DATA                  #
          BEGIN 
          CSIN = SITECS;
          CSOUT = 0;
          C<0, 2>CSOUT = CS88;
          END 
  
        ELSE                           # RECEIVING DATA                #
  
          BEGIN 
          CSIN = 0; 
          C<0, 2>CSIN = CS88; 
          CSOUT = SITECS; 
          END 
  
        END 
  
# 
*       I:  
*         SET CSIN TO CS88. 
*         SET CSOUT TO CS88.
# 
  
      IF TPTTYPE[0] EQ TYPE$I 
      THEN                           # IMAGE DATA BYTES # 
        BEGIN 
        BINARY = TRUE;
        CSIN = 0; 
        C<0, 2>CSIN = CS88; 
        CSOUT = CSIN; 
        END 
  
#     IF APPE OR STOR, SWITCH OFF NO OUTSTANDING DATA RESPONSES        #
  
      IF    (EVENT EQ S"STOR")
         OR (EVENT EQ S"APPE")
      THEN
        BEGIN 
        ACN$SNODR[CTYPE"CTDATA"] = FALSE; 
        END 
  
      IF EVENT EQ S"LIST" 
      THEN
        BEGIN 
        BINARY = FALSE; 
        CSIN = 0; 
        CSOUT = 0;
        C<0, 1>CSIN = CSA;
        C<0, 2>CSOUT = CS88;
        IF MBT$LFNU[0] EQ 0 
        THEN
          BEGIN 
          MBT$LFN[0] = "FETCATR"; 
          END 
        END 
  
                                       CONTROL FTNCALL; 
      FFSCPRS(MBT, CSIN, CSOUT, EVENT, BINARY, SITEFSC, SITERDEOI,
              SITETRUNC, RETSTAT);
  
  
      IF RETSTAT NQ 0 
      THEN
        BEGIN                          # ERRORS - SEND 550 MSG         #
        FFSUCDA(ERR$MSG, 09, SENDBUF, LENCHAR); 
        REQ$RCODE[RFTPCM$] = RCM"RCSENDAT"; 
        REQ$CTYPE[RFTPCM$] = RSPCN;    # SET APPROPRIATE RESPONSE CN   #
        REQ$ADDR[RFTPCM$]  = LOC(SENDBUF);
        REQ$LEN[RFTPCM$]   = LENCHAR; 
        FFSLCRP;                       # EXIT TO SEND MESSAGE          #
        IF EPTFLAG EQ FTPS$ 
        THEN
          BEGIN                        # SERVER MODE - RETURN FILE     #
          RETERN(MBT);
          END 
        END 
  
      REQ$RCODE[RFTPCM$] = 0; 
      REQ$LEN  [RFTPCM$] = 0; 
      RETURN; 
      END                              # FFSRSDT                       #
  
      TERM
