*DECK NP$RLOC 
*IF,DEF,XFR 
USETEXT NX$ACBF 
USETEXT AIPDEF
USETEXT HEADER
USETEXT NX$MSG
USETEXT NP$STAT 
USETEXT NP$DB 
USETEXT NP$NWL
USETEXT NP$MODE 
USETEXT NP$GETS 
USETEXT NX$ACBX 
      PROC NP$RLOC; 
      BEGIN 
# 
**
*     1.  PROC NAME          AUTHOR          DATE 
* 
*         NP$RLOC            Y. C. YIP       07/12/1984 
* 
*     2.  FUNCTIONAL DESCRIPTION. 
* 
*         NP$RLOC COMPUTES ADDITIONAL MEMORY NEEDED FOR A 
*         INTRAHOST BINARY FILE TRANSFER AND ALLOCATES THE
*         ADDITIONAL BUFFERS NEEDED.
* 
*     3.  METHOD USED.
* 
*         NP$RLOC CLOSES THE FILE AND RELEASES THE ALLOCATED
*         MEMORY FOR A PRU FILE TRANSFER. 
*         NEXT IT COMPUTES THE TOTAL MEMORY NEEDED INCLUDING
*         THE CMB BUFFER, THE NETBUF AND THE CHECKMARK BUFFER.
*         IT CALLS NP$CMAF TO ALLOCATES BUFFER SPACE. 
*         FINALLY, IT PERFORMS NETFET INITIALIZATION AND
*         ALSO SET THE FTTNOTRAN FLAG IN THE FTT. 
* 
*     4.  ENTRY CONDITIONS: 
* 
*         FTTINDEX MUST BE POINTING TO THE
*         VALID ENTRY IN THE FTT. 
* 
* 
*     5.  EXIT CONDITIONS:  
* 
*         ADDITIOAL BUFFER SIZE NEEDED FOR A INTRAHOST BINARY FILE
*         TRANSFER IS ALLOCATED.
*         NETWORK FET GET INITIALIZED.
*         LIMIT POINTER OF THE DISK FET RESET TO A BIGGER VALUE.
*         FLAG FTTNOTRAN SET TO TRUE
# 
# 
****
# 
      XREF
        BEGIN 
        PROC NP$MSG;                     # GENERATE DAYFILE MESSAGE    #
        PROC NP$ZWDS;                    # PROC TO ZERO OUT WORDS      #
        FUNC NP$CDD C(10);               # FUNCTION FOR CONVERTING     #
                                         # INTEGER TO DISPLAY CODE     #
        FUNC NP$CMAF U;                  # COMPASS ROUTINE TO ALLOCATE #
                                         # BUFFER SPACE                #
        PROC NP$CMFF;                    # PROC TO DEALLOCATE SPACE    #
        PROC NP$CIO;                     # CALL CIO MACRO              #
        PROC NP$ZRBK;                    # CONVERTS BLANKS TO ZERO     #
        END                              # BUFFER SPACE                #
# 
****
# 
      ITEM BUFLENGTH;                    # LENGTH OF BUFFER TO BE      #
                                         # ALLOCATED                   #
      ITEM BUFADR;                       # FIRST WORD ADDRESS OF NEWLY #
                                         # ALLOCATED SPACE             #
      ITEM NET$WORD;                     # SIZE OF NETBUF              #
      ITEM ITEMP;                        # INTEGER TEMPORARY           #
      ITEM SAVEN C(7);                   # CHARACTER TEMPORARY         #
      CONTROL EJECT;
# 
************************************************************************
*                                                                      *
*     CODE OF NP$RLOC BEGINS HERE                                      *
*                                                                      *
************************************************************************
# 
      NP$CIO(CIO$CLOSE);               # CLOSE THE FILE                #
      P<FET$CIO> = FTTFETADR[FTTINDEX];# SET DISK FET TEMPLATE         #
      SAVEN = FETLFNC[0];              # SAVE FILE NAME                #
      NP$CMFF(P<FET$CIO>);             # RELEASE OLD SPACE ALLOCATED   #
      NET$WORD = (FTTBSIZE[FTTINDEX]*2)/15; # ESTIMATE NETBUF SIZE     #
      BUFLENGTH = LEN$FET + LEN$CIOB + LEN$CMB +
                    LEN$FETW + NET$WORD + LEN$CHK;
      BUFADR = NP$CMAF(BUFLENGTH,0,GROUPNAME);  # ALLOCATE SPACE       #
      NP$ZWDS(BUFADR,BUFLENGTH);       # ZERO OUT ALLOCATED SPACE      #
      FTTFETADR[FTTINDEX] = BUFADR;    # SAVE NEW FET ADDRESS          #
      P<FET$CIO> =FTTFETADR[FTTINDEX]; # SET TEMPLATE TO FET ADDRESS   #
      FETLFNC[0] = SAVEN;              # SET FILENAME                  #
      FETCOMP = TRUE;                  # SET COMPLETION BIT            #
      NP$ZRBK(LOC(FETWD[0]),1);        # CONVERTS BLANK TO ZERO        #
      FETFETL[0] = LEN$FET - 5;        # BUILD DISK FET                #
      FETFIR = P<FET$CIO> + LEN$FET;   #   FIRST POINTER               #
      FETIN[0] = FETFIR[0]; 
      FETOUT[0] = FETFIR[0];
      FETLIM[0]  = FETFIR[0] + LEN$CIOB; # LIMIT POINTER               #
      FTTCMV$BLK[FTTINDEX] = BUFADR + LEN$FET + LEN$CIOB; 
                                         # CMB BUFFER ADDRESS          #
      FTTFETW[FTTINDEX] = FTTCMV$BLK[FTTINDEX] + LEN$CMB; 
                                         # NETWORK FET ADDRESS         #
      FTTCKTBL[FTTINDEX] = FTTFETW[FTTINDEX] + LEN$FETW + NET$WORD; 
                                         # CHECKMARK STATUS BUFFER     #
      P<FET$WORK> = FTTFETW[FTTINDEX];   # ADDRESS FOR NETFET          #
      FETNAME[0] = FETLFNC[0];           # SET FILE NAME               #
      FETWFIRST[0] = P<FET$WORK> + LEN$FETW;  # SET FIRST WORD ADR OF  #
                                         # BUFFER                      #
      FETWIN[0] = FETWFIRST[0];          # SET IN AND OUT PTR FOR      #
      FETWOUT[0] = FETWFIRST[0];         # NETBUF                      #
      FETWLIMIT[0] = FETWFIRST[0]+ NET$WORD;  # SET LIMIT PTR          #
      P<CMB> = FTTCMV$BLK[FTTINDEX];
      CMB$NBUF[0] = 0;                   # SET NETBUF FULL/EMPTY FLAG  #
      CMB$DBUF[0] = 0;                   # SET DISKBUF FULL/EMPTY FLAG #
      CMB$STEP[0] = 6;                   # TREAT IT AS C6              #
      IF FTTOPCODE[FTTINDEX] EQ SEND     # IF SENDER                   #
      THEN
        BEGIN 
        CMB$DBIT[0] = CMB$STEP[0];       # SET DBIT TO STEP            #
        NP$CIO(CIO$OPENR);               # OPEN FOR READ ACCESS        #
        END 
      ELSE
        BEGIN                            # RECEIVER                    #
        CMB$DBIT[0] = WORDLENGTH - CMB$STEP[0]; 
        NP$CIO(CIO$OPENW);               # OPEN FOR WRITE ACCESS       #
        END 
      FTTMFACIL[FTTINDEX] = FALSE;
      FTTRFACIL[FTTINDEX] = FALSE;
      FTTNRETRY[FTTINDEX] = 0;
      FTTNOTRAN[FTTINDEX] = TRUE;        # SET NO TRANSLATION FLAG     #
      IDFM$LFN[INTR$BIN] = FETNAME[0];   # GET FILE NAME CONCERNED     #
      NP$MSG(IDFM$MSG[INTR$BIN],XFRDTYPE);#GENERATE DAYFILE            #
      RETURN;                            # RETURN TO CALLER            #
      END                                # END OF PROC NP$RLOC         #
TERM
*ENDIF
  
