*DECK ATTFIL
          IDENT  ATTFIL 
          TITLE  ATTFIL - ATTACH PERMANENT FILE.
          ENTRY  ATTFIL,REQFIL,RTNFIL 
          ENTRY  FETADR 
  
**        ATTFIL - ATTACH PERMANENT FILE. 
* 
*         ENTRY  FETADR = 42/PFNAME,18/.
* 
*         EXIT   FETADR = 42/PFNAME,8/STATUS,8/.
*                            PFNAME = LOCAL FILE NAME.
*                            STATUS = 0, FILE ASSIGNED. 
*                                   = ATTACH ERROR CODE 
  
*CALL COMCMAC 
  
 ID       MICRO  1,,*RHF* 
 CN       MICRO  1,,*RHFPERM* 
 ID       MICRO  1,,*RHF* 
 CN       MICRO  1,,*RHFPERM* 
 RD       MICRO  1,,*RHFREAD* 
 TK       MICRO  1,,*RHFTURN* 
  
 ATTFIL   SUBR
  
          RJ     SETUP             SET UP FET FOR ATTACH
          NZ     X1,ATTFILX        IF FILE PRESENT
  
 NOS      IFEQ   OS$NOS 
  
          ATTACH FETADR,PF,,,W,,,,,RT 
  
 NOS      ELSE
  
          ATTACH FDBADR,RT         ATTACH FILE
  
          SA1    FDBADR            MOVE ATTACH STATUS TO FETADR 
          RJ     SETPFER
          SA6    FETADR 
  
 NOS      ENDIF 
  
          EQ     ATTFILX           RETURN 
  
          TITLE  REQFIL - REQUEST PERMANENT FILE (NOS/BE).
**        REQFIL - REQUEST/DEFINE PERMANENT FILE (NOS/BE OR NOS). 
* 
*         ENTRY  FETADR = 42/PERM-FILE-NAME,18/.
* 
*         EXIT   FETADR, BITS 17-10 = 0, PERMANENT FILE REQUESTED 
*                                   = REQUEST/DEFINE ERROR CODE 
  
 REQFIL   SUBR
  
          RJ     SETUP             SET UP FET FOR REQUEST/DEFINE
          ZR     X1,REQFIL1        IF FILE NOT PRESENT
  
 NOS      IFEQ   OS$NOS 
  
          SA1    FETADR            SET ERROR
          MX6    -18
          BX6    -X6+X1 
          SA6    A1 
          EQ     REQFILX           RETURN 
  
 REQFIL1  DEFINE FETADR,PF
  
 NOS      ELSE
  
          SA1    FETADR            SET ERROR
          MX6    -18
          BX6    -X6+X1 
          EQ     REQFIL2           RETURN 
  
 REQFIL1  REQUEST REQLFN
  
          SA1    REQLFN            MOVE REQUEST STATUS TO FETADR
          MX6    -18
          BX6    -X6*X1 
          AX6    1
          SA1    FETADR 
          LX6    10 
  
 REQFIL2  BX6    X6+X1
          SA6    A1                SET IN FET, BITS 10-17 
  
 NOS      ENDIF 
  
          EQ     REQFILX           RETURN 
          TITLE  RTNFIL - RETURN FILE (CATALOG OR EXTEND NOS/BE). 
**        RTNFIL - RETURN FILE (CATALOG OR EXTEND NOS/BE).
* 
*         ENTRY  FETADR = 42/PFNAME,18/.
* 
*         EXIT   FETADR = 42/PFNAME,8/STATUS,8/.
*                            PFNAME = LOCAL FILE NAME.
*                            STATUS = 0, FILE RETURNED (CATALOGED OR
*                                        EXTENDED, NOS/BE). 
*                                   = 777B, FILE NOT PRESENT. 
*                                   = CATALOG/EXTEND ERROR CODE.
  
 RTNFIL   SUBR
  
          RJ     SETUP             SET UP FOR RETURN (CATALOG/EXTEND) 
          MX6    18 
          LX6    18                ERROR CODE 
          ZR     X1,RTNFIL3        IF FILE NOT PRESENT
  
 NOSBE    IFEQ   OS$NOSBE 
  
          MX6    -6                CHECK FILINFO STATUS 
          BX6    -X6*X1 
          SX6    X6-4 
          ZR     X6,RTNFIL1        IF FILE ALREADY PERMANENT
  
          CATALOG FDBADR,RT 
          EQ     RTNFIL2
  
 RTNFIL1  EXTEND FDBADR,RT
  
 RTNFIL2  BSS    0
  
 NOSBE    ENDIF 
  
          CLOSE  FETADR,UNLOAD,RCL RETURN FILE
  
 NOSBE    IFEQ   OS$NOSBE 
  
          SA1    FDBADR            GET CATALOG/EXTEND STATUS
          RJ     SETPFER
          SA6    FETADR 
          EQ     RTNFILX           RETURN 
  
 NOSBE    ELSE
  
          MX6    0                 NO ERROR 
  
 NOSBE    ENDIF 
  
 RTNFIL3  SA1    FETADR            SET ERROR CODE IN FET
          MX0    -18
          BX1    X0*X1
          BX6    X6+X1
          SA6    A1 
  
          EQ     RTNFILX           RETURN 
 CHKLFN   TITLE  ATTFIL - COMMON SUBROUTINES
**        CHKLFN - CHECK FOR LOCAL FILE 
* 
*         ENTRY  FETADR = FILE NAME 
* 
*         EXIT   RTNWD1 = X1 = 0, IF FILE NOT FOUND.
*                              NON-ZERO, IF FILE FOUND. 
* 
*         USES   A1/X1,A6/X6. 
* 
*         MACROS FILINFO. 
  
 CHKLFN   SUBR                     ENTRY/EXIT 
          SA1    FETADR 
          MX6    42 
          BX6    X6*X1             FILE NAME
          SA1    RTNBLK 
          BX6    X6+X1             FILINFO WORD 0 
          SA6    RTNWD0 
          MX6    0
          SA6    RTNWD1 
          FILINFO  RTNWD0 
          SA1    RTNWD1 
          EQ     CHKLFNX           RETURN 
  
 NOS      IFEQ   OS$NOS 
 RTNBLK   VFD    42/0,6/5,12/1
 NOS      ELSE
 RTNBLK   VFD    42/0,6/5,12/0
 NOS      ENDIF 
  
*         FILINFO PARAMETER BLOCK 
  
 RTNWD0   BSS    1
 RTNWD1   BSS    1
          BSSZ   3
NOSBE     IFEQ   OS$NOSBE 
 SETPFER  SPACE  4,10 
**        SETPFER - SET PERMANENT FILE ERROR CODE.
* 
*         ENTRY  A1/X1 = FDBADR = 42/LFN,9/PFERR,8/,1/C.
* 
*         EXIT   X6 = 42/LFN,8/ERR,9/,1/C.
*                              ERR = 1 IF PFERR = 12B.
*                              ERR = 2 IF PFERR = 37B.
*                              ERR = PFERR. 
* 
*         USES   X1, X2, X3, X6.
  
  
 SETPFER  SUBR
          MX6    -9 
          LX1    -9 
          BX2    -X6*X1            PF STATUS
          BX1    X1*X6
          MX6    -8 
          BX2    -X6*X2            CLEAR UPPER BIT
          SX3    X2-37B 
          NZ     X3,SETPFER1       IF NOT IN USE
          SX2    1
 SETPFER1 SX3    X2-12B 
          LX1    -1 
          NZ     X3,SETPFER2       IF NOT UNKNOWN 
          SX2    2
 SETPFER2 BX6    X1+X2
          LX6    9+1               RESTORE POSITION 
          EQ     SETPFERX          RETURN 
 NOSBE    ENDIF 
 SETUP    SPACE  4,10 
**        SETUP - SET UP FET AND FDB FOR PERMANENT FILE FUNCTION. 
* 
*         ENTRY  FETADR = 42/0LPFNAME,18/.
* 
*         EXIT   FETADR - FETADR+9 = LFILE - LFILE+9. 
*                FDBADR = REQLFN = 42/0LPFNAME,18/0. (NOS/BE) 
*                X1 = RTNWD1 = FILINFO RESPONSE --
*                            = 0, IF NO LOCAL FILE ASSIGNED 
*                            .NE. 0, IF LOCAL FILE *PFNAME* PRESENT.
* 
*         CALLS  CHKLFN 
* 
*         USES   A - 1, 6, 7. 
*                B - 1, 2.
*                X - 1, 6, 7. 
  
  
 SETUP    SUBR
          SA1    FETADR            GET FILE NAME
          SB1    1
          MX0    42 
          BX7    X0*X1             CLEAR BITS 17-0
          SA2    LFILE             FET LFN WORD 
          BX6    -X0*X2            SAVE BITS 17-0 
          BX6    X6+X7
          SA6    A2                SAVE FET LFN 
          SA7    PF                SAVE PFN 
  
 NOSBE    IFEQ   OS$NOSBE 
          SA7    FDBADR            SAVE LFN (ATTACH/CATALOG)
          SA7    REQLFN            SAVE LFN (REQUEST) 
 NOSBE    ENDIF 
  
          SB2    FETADR-LFILE 
 SETUP1   SB2    B2-B1
          SA1    LFILE+B2          SET UP FET FOR ATTACH/DEFINE 
          BX6    X1 
          SA6    FETADR+B2
          NZ     B2,SETUP1
  
          RJ     CHKLFN            CHECK LOCAL FILES
  
          EQ     SETUPX            RETURN 
 FET      SPACE  4,10 
*         FET AND FDB BLOCKS
  
 NOS      IFEQ   OS$NOS 
  
 PF       CON    0
  
 NOS      ELSE
  
 FDBADR   FDB    LFILE,PFILE,ID="ID",PW="CN","RD","TK",MR=0,CN="CN",RD="
,RD",TK="TK"
 PF       EQU    FDBADR-4 
  
 REQLFN   BSS   1              REQUEST PARAMETER BLOCK
          VFD   24/0,6/2,30/0  PERM FILE DEVICE 
  
 NOS      ENDIF 
  
 LFILE    FILEB  BUF,1,(FET=10D),EPR
  
 FETADR   BSS    *-LFILE
  
 BUF      EQU    FETADR 
  
          END 
