*DECK BCM00                        01SEP81
USETEXT COMCBEG 
USETEXT COMCAPR 
USETEXT COMCCAE 
USETEXT COMQCAF 
USETEXT COMQDEF 
USETEXT COMQFIL 
USETEXT COMQNET 
USETEXT COMQSCH 
    PROC BCM00; 
      BEGIN    # BCM00 #
# 
**    BCM00      BUILD AND SEND COMMAND 00 (RFT). 
* 
*     BCM00 BUILDS THE REQUEST FOR FILE TRANSFER COMMAND (USING 
*     INFORMATION IN THE FILE-S AFT ENTRY) AND SENDS THE COMMAND TO 
*     THE REMOTE SYSTEM.
* 
*     PR0C BCM00
* 
*     ENTRY      ACN = AFT ENTRY INDEX. 
*                FILEIDDC = INITIAL DD. 
* 
*     EXIT       RFT COMMAND SENT (NORMAL). 
*                AFT ENTRY UPDATED. 
*                  FILEABN = 0. 
*                  FILENAK = 0. 
*                  FILERBN = 0. 
*                  FILESTS = 0. 
*                  FILECMD = 0. 
*                  FILES0  = TRUE (RFT SENT). 
*                  FILEBNO = 0 (RFT). 
* 
*     PROCESS    IF COMMAND IN SEQUENCE:  
*                  BUILD REQUEST-FILE-TRANSFER (RFT) COMMAND
*                  CALL CMDPUT (SEND COMMAND) 
*                  UPDATE AFT ENTRY.
*                ELSE:  
*                  CALL ILLSEQ
# 
  
# 
****  XREF
# 
      XREF
        BEGIN 
        FUNC ACFETCH    I;
        PROC ACSTORE; 
        PROC APSTOR;
        PROC BCMTXT;               # ADD ROUTING TEXT TO RFT #
        FUNC CCOUNT     I;
        PROC CMDPUT;
        FUNC DDC        I;
        PROC FACCHK;               # CHECK FACILITIES # 
        PROC FREENTA; 
        PROC ILLSEQ;
        FUNC MBZ        I;         # MAXIMUM BLOCK SIZE # 
        PROC NAME;                 # DEBUG CODE # 
        FUNC YCDZ       C(10);
        END 
# 
****  XREF END
# 
  
  
      ITEM FACNXFR    U;
      ITEM FACQUAL    C(1); 
      ITEM FACTEXT    C(10);
      ITEM FACTXTL    I;
      ITEM J          I;
  
  
        $BEGIN
        NAME("BCM00");             # DEBUG CODE # 
        $END
  
      FREENTA;                     # RELEASE TEXT BUFFERS # 
  
      IF FILECMD NE 0              # IF IMPROPER COMMAND SEQUENCE # 
        AND (NOT FILER5            # NO STOP RESPONSE RECEIVED #
             OR FILES60)           # OR ETP SENT #
      THEN
        BEGIN 
        ILLSEQ;                      # ILLEGAL COMMAND SEQUENCE # 
        END 
  
      ELSE
        BEGIN 
        FILETOU = SCHTIMEOUT;      # SET TIMEOUT VALUE #
        FILEDDC = FILEIDDC;        # RESET TO INITIAL DD (IF RETRY) # 
        FILENAK = 0;               # RESET NAK COUNT #
        FILEABN = 0;               # RESET BLOCK COUNT #
        FILERBN = 0;               # RESET BLOCK COUNT #
        FILESTS = 0;               # RESET TRANSFER STATUS #
        ACSTORE (NTA$B, CM$RFT, NTLMAX);  # STORE RFT COMMAND # 
        FILESTX = STO$NORMAL;      # SET NORMAL STATE-OF-TRANSFER # 
        APSTOR(NTA$B,AT$PI,ATQ$S,AT$PIL,PROTOCL);  # PROTOCOL IDENT # 
        APSTOR(NTA$B,AT$MA,ATQ$S,AT$MAL,MA$MKO);  # MODE OF ACCESS #
        APSTOR(NTA$B,AT$PD,ATQ$S,AT$PDL,HID);  # HOST PID # 
        APSTOR(NTA$B,AT$FN,ATQ$S,CCOUNT(FILEQFNC),FILEQFNC);
        APSTOR(NTA$B,AT$TO,ATQ$S,AT$TOL,YCDZ(SCHTIMEOUT,AT$TOL)); 
        FACTXTL = -1;              # SET DEFAULT FACILITIES # 
        FACCHK (FACTEXT,FACTXTL,NAM,0,
                FACTEXT,FACTXTL,FACQUAL,FACNXFR,J); 
        FILEFCI = FACNXFR;         # SET NETXFR FACILITIES #
        IF FACTXTL GT 0            # IF FACILITIES REQUIRED # 
        THEN
          BEGIN 
          FILEACKW = ACKNW;        # ACKNOWLEDGEMENT WINDOW # 
          APSTOR(NTA$B,AT$AW,ATQ$S,AT$AWL,YCDZ(FILEACKW,AT$AWL)); 
          APSTOR(NTA$B,AT$FC,FACQUAL,FACTXTL,FACTEXT);
          END 
  
        ELSE
          BEGIN 
          FILEACKW = 0;            # INITIALIZE ACKW #
          END 
  
      CONTROL IFEQ OS$NOSBE;
        APSTOR(NTA$B,AT$HT,ATQ$S,AT$HTL,NBE);           # HOST TYPE # 
      CONTROL ENDIF;
  
      CONTROL IFEQ OS$NOS;
        APSTOR( NTA$B, AT$HT, ATQ$S, AT$HTL, NS2 ); # HOST TYPE # 
      CONTROL ENDIF;
  
        APSTOR(NTA$B,AT$LD,ATQ$S,AT$LDL,FILELIDC);
        APSTOR(NTA$B,AT$JN,ATQ$S,CCOUNT(FILEJBN),FILEJBN);
        J = FSFMAXDD; 
        FSF$DD[0] = FILEDDC;
        ASLONGAS FILEDDC NE FSF$DD[J] 
        DO
          BEGIN 
          J = J - 1;
          END 
  
        J = ((FILESIZ*FSF$CF[J])/1024) + 1; 
        APSTOR (NTA$B,AT$FS,ATQ$S,AT$FSL,YCDZ(J,AT$FSL));  # FILE SIZE #
        IF FILEDDC NE "  "         # IF WE SHOULD SEND RFT-DD # 
        THEN
          BEGIN 
          APSTOR( NTA$B, AT$DD, ATQ$S, AT$DDL, FILEDDC ); 
          FILEXDD = DDC(FILEDDC);  # SET NETXFR DD #
          END 
  
        ELSE
          BEGIN 
          FILEXDD = DDC(DD$C6);    # SET DEFAULT NETXFR DD #
          END 
  
        IF FILEDBZ LT NAMDBZ       # IF BLOCK LESS THAN MINIMUM # 
        THEN
          BEGIN 
          FILEDBZ = NAMDBZ;        # USE NAM MINIMUM #
          END 
  
        FILEMBZ = MBZ(FILEXDD,FILEDBZ,NAM); 
        APSTOR(NTA$B,AT$BZ,ATQ$S,AT$BZL,YCDZ(FILEMBZ,AT$BZL));
        APSTOR(NTA$B,AT$OD,ATQ$S,AT$ODL,FILEOTY); 
                                               # OUTPUT DEVICE TYPE # 
        IF FILESLD NE 0            # IF FILE HAS SOURCE LID # 
        THEN
          BEGIN 
          APSTOR(NTA$B, AT$SL, ATQ$S, AT$SLL, FILESLDC);
          END;
  
        BCMTXT(FILESRT, AT$SR);    # ADD SYSTEM ROUTING TEXT #
        BCMTXT(FILEERT, AT$UT);    # ADD EXPLICIT ROUTING TEXT #
        BCMTXT(FILEIRT, AT$RU);    # ADD IMPLICIT ROUTING TEXT #
        CMDPUT;                    # SEND NETWORK MESSAGE # 
        FILEBNO = CM$RFT;          # RFT IN PROGRESS #
        FILECMD = 0;               # CLEAR COMMAND FLAGS #
        FILES0 = TRUE;             # SET RFT-SENT FLAG #
        END 
  
      END      # BCM00 #
    TERM
