*DECK DB$ATWR 
USETEXT CUGDFTX 
      PROC DB$ATWR(LFN,PFINFO,ATTACHSTATUS);
      BEGIN 
 #
* *   DB$ATWR--NOS/BE ATTACH PROCESSOR           PAGE  1
* *   C O GIMBER                                 3/1/76 
* 
* DC  PURPOSE 
* 
*     ATTACH PERMANENT FILES FOR NOS/BE (WITH RECALL) 
* 
* DC  ENTRY CONDITIONS
* 
*     PARAMETERS
# 
      ITEM LFN;              #LFN FOR FILE# 
      ARRAY PFINFO; 
        BEGIN 
        ITEM PFN (0,0,60);   #PERMANENT FILE NAME (MAX OF 7 CHARS)# 
        ITEM PFID (1,0,60);  #PERMANENT FILE ID (MAX OF 7 CHARS)# 
        ITEM PFPW (2,0,60);  #PASSWORD (MAX OF 7 CHARS)#
        ITEM PFDS (7,0,60);  #DEVICE SET NAME#
        ITEM PFVSN (8,0,60); #DEVICE VSN# 
        END 
      ITEM ATTACHSTATUS;           #STATUS OF ATTACH# 
# 
* DC  EXIT CONDITIONS 
* 
*     PARAMETER ATTACHSTATUS
*       = 0 IF PERMANENT FILE ATTACHED
*       OTHERWISE PF ERROR CODE.
* 
* DC  CALLED ROUTINES 
# 
      XREF PROC DB$ATCR;     #ISSUE ATTACH MACRO FOR NOS/BE#
      XREF FUNC DB$COCT C(10);     #CONVERT INTEGER TO DISPLAY OCTAL# 
      XREF PROC DB$MSG;            #ISSUE DAYFILE MESSAGE#
# 
* DC  NON-LOCAL VARIABLES 
* 
*     CUGDFDCLS 
# 
  
       XDEF ITEM DB$NOSU  B = FALSE;  # ON NOS/BE, DB$NOS IS FALSE     #
 #
*     LOCAL VARIABLES.
# 
      ARRAY FDB [DFFDBSIZE] S(1);      #FDB FOR ATTACH# 
        ITEM FDWORD;
      ITEM FDX;              #INDEX INTO FDB# 
      ITEM INDEX; 
      ITEM BADATCHMSG C(32) = " PFM ERROR XXX ATTACHING FILENAM:";
      CONTROL EJECT;
 #
* 
* DC  INTERNAL FUNCTIONS
* 
*     PFPARM((PARM))--FORMS PARAMETER FOR PF FDB. 
 #
      FUNC PFPARM((PARM));
        BEGIN 
        ITEM PARM;
  
        B<42,18>PARM = 0; 
        FOR PARM = PARM WHILE B<0,6>PARM NQ 0 DO
          PARM = PARM*2**6; 
        PFPARM = PARM*2**6; 
        RETURN; 
        END 
      CONTROL EJECT;
 #
* 
* DC  DESCRIPTION 
* 
      GENERATE PF FDB ENTRY.
*       PFN IN WORDS 0-3 ZERO FILLED
*       LFN IN WORD 4 
*       ID IN WORD 5
*       1 TO 5 PASSWORDS
*       PACK DEVICE SET NAME
*       PACK VSN
*       TERMINATOR (WORD OF ZEROES) 
 #
      FDWORD[0] = PFN[0]; 
      FDWORD[1] = 0;
      FDWORD[2] = 0;
      FDWORD[3] = 0;
      FDWORD[4] = LFN*2**18;
      FDX = 5;
      IF PFID[0] NQ 0 THEN
        BEGIN 
        FDWORD[FDX] = PFPARM(PFID[0])+O"14";
        FDX = FDX+1;
        END 
      FOR INDEX=0 STEP 1 UNTIL 4 DO 
        IF PFPW[INDEX] NQ 0 THEN
          BEGIN 
          FDWORD[FDX] = PFPARM(PFPW[INDEX])+O"20"+INDEX;
          FDX = FDX+1;
          END 
      IF PFDS[0] NQ 0 THEN
        BEGIN 
        FDWORD[FDX] = (PFDS[0] LAN LNO O"777777")+O"40";
        FDX = FDX+1;
        END 
      IF PFVSN[0] NQ 0 THEN 
        BEGIN 
        FDWORD[FDX] = (PFVSN[0] LAN LNO O"777777")+O"41"; 
        FDX = FDX+1;
        END 
      FDWORD[FDX] = 0;
 #
*     ISSUE ATTACH MACRO. 
 #
      DB$ATCR(LOC(FDB[4])); 
      ATTACHSTATUS = B<42,9>FDWORD[4];
      IF ATTACHSTATUS NQ 0 THEN        #PFM ERROR#
        BEGIN 
        C<11,3>BADATCHMSG = DB$COCT(ATTACHSTATUS,3);
        C<25,7>BADATCHMSG = C<0,7>PFN[0]; 
        DB$MSG(BADATCHMSG); 
        END 
      RETURN; 
      END 
      TERM; 
