*DECK RTNFIL                       23JUL81
USETEXT COMCBEG 
USETEXT COMCAPR 
USETEXT COMCCAE 
USETEXT COMQCIO 
USETEXT COMQDEF 
USETEXT COMQDSP 
USETEXT COMQFIL 
    PROC RTNFIL (LFN, EVICT); 
      BEGIN  # RTNFIL # 
# 
**    RTNFIL     RETURN FILE. 
* 
*     RTNFIL RETURNS A LOCAL FILE (LFN).  IF LFN IS A QUEUE FILE, AND 
*     PARAMETER (EVICT) IS TRUE, THE FILE IS EVICTED. 
* 
*     PROC       RTNFIL 
* 
*     ENTRY      LFN = FILE NAME. 
*                EVICT = TRUE (FILE TO BE EVICTED). 
*                      = FALSE (FILE TO BE RETURNED). 
* 
*     EXIT       FILE RETURNED OR EVICTED.
* 
*     PROCESS    SET UP FET FOR CIO 
*                IF EVICT = TRUE: 
*                  CIO CODE = CLOSE, UNLOAD.
*                  CALL CALLSYS  (CIO, WITH AUTO-RECALL). 
*                ELSE:  
*                  CALL DSP TO RETURN ACQUIRED FILE TO QUEUE. 
# 
      ITEM LFN        C(7); 
      ITEM EVICT      B;           # EVICT/RETURN FLAG #
# 
****  XREF
# 
      XREF
        BEGIN 
        PROC CALLSYS; 
        PROC NAME;                 # DEBUG CODE # 
        END 
# 
****  XREF END
# 
  
  
      ITEM TMPFET     U;           # TEMPORARY STORAGE FOR FET #
  
      ARRAY[0:DSPBLEN] S(1);       # CIO FET OR DSP BLOCK # 
        BEGIN 
        ITEM CIOBUFFW   U(00,00,60) = [4(0),129]; 
        END 
  
  
      $BEGIN
      NAME ("RTNFIL");                  # DEBUG CODE #
      $END
  
      TMPFET = P<FET>;             # SAVE CURRENT FET POINTER # 
      P<FET> = LOC(CIOBUFFW[0]);   # SET FET ADDR # 
      FETWD[0] = 0;                # CLEAR FIRST WORD # 
      CIOBUFFW[1]= 0;              # AND SECOND # 
      FETLFNC[0] = LFN;            # SET FILE NAME #
      IF FETLFN[0] NE 0 
      THEN
        BEGIN 
        CIOADR[0] = P<FET>;             # FET ADDR #
        CIORCL[0] = TRUE;               # AUTO RECALL # 
        IF EVICT OR QRCV
        THEN
          BEGIN 
          FETCIOF[0] = CIOCLU;          # EVICT - CLOSE,UNLOAD #
          CALLSYS  (CIO);          # EVICT FILE # 
          END 
  
        ELSE
          BEGIN 
          DSPADR = P<FET>;         # USE FET AS DSP BLOCK # 
          P<DSPB> = P<FET>;        # SET BASED ARRAY ADDR # 
          DSPF12 = TRUE;           # RETURN ERROR CODE #
  
        CONTROL IFEQ OS$NOS;
          DSPF6 = TRUE;            # EXTENDED DSP BLOCK # 
          DSPEF8 = TRUE;           # SPECIAL REQUEUE #
        CONTROL ENDIF;
  
          CALLSYS(DSP);            # CALL DSP TO REQUEUE FILE # 
          END 
  
        END 
  
      P<FET> = TMPFET;             # RESTORE PREVIOUS FET POINTER # 
  
      END 
    TERM
