*
* $Id$
*
* $Log$
* Revision 1.1  1996/03/08 15:44:29  mclareni
* Initial revision
*
*
#include "cspack/pilot.h"
#if defined(CERNLIB_VAXVMS)
      integer function xzfinf(fab,rab,lun)
*-- Author :    Jamie Shiers   02/08/91
#include "cspack/vmsinf.inc"
      character*30 spaces
      include '($fabdef)'
      include '($rabdef)'
      include '($xabdef)'
      include '($xabdatdef)'
      include '($xabprodef)'
 
      record /fabdef/ fab
      record /rabdef/ rab
 
      structure /xabdat/
         byte       xab$b_cod
         byte       xab$b_bln
         integer*2  %fill
         integer*4  xab$l_nxt
         integer*2  xab$w_rvn
         integer*2  %fill
         integer*4  xab$q_rdt(2)
         integer*4  xab$q_cdt(2)
         integer*4  xab$q_edt(2)
         integer*4  xab$q_bdt(2)
      end structure
 
      structure /xabpro/
         byte       xab$b_cod
         byte       xab$b_bln
         integer*2  %fill
         integer*4  %fill
         integer*2  xab$w_pro
         byte       xab$b_mtacc
         byte       xab$b_prot_opt
         union
             map
                integer*4 xab$l_uic                 !  UIC CODE
             end map
             map
                integer*2 xab$w_mbm                 !  MEMBER CODE
                integer*2 xab$w_grp                 !  GROUP CODE
             end map
         end union
         union
            map
               integer*4 xab$q_prot_mode(2)
            end map
            map
               byte      xab$b_prot_mode
            end map
         end union
         integer*4 xab$l_aclbuf
         integer*2 xab$w_aclsiz
         integer*2 xab$w_acllen
         integer*4 xab$l_aclctx
         integer*4 xab$l_aclsts
         integer*4 %fill
         integer*4 %fill
         integer*4 %fill
         integer*4 %fill
         integer*4 %fill
         integer*4 %fill
         integer*4 %fill
         integer*4 %fill
         integer*4 %fill
         integer*4 %fill
         integer*4 %fill
         integer*4 %fill
      end structure
 
      record /xabdat/ xab
      record /xabpro/ xab1
      integer status,lun,sys$open,sys$close,recfm
 
      xab.xab$b_cod = xab$c_dat
      xab.xab$b_bln = xab$c_datlen
      fab.fab$l_xab = %loc(xab.xab$b_cod)
      xab.xab$l_nxt = %loc(xab1.xab$b_cod)
      xab1.xab$b_cod = xab$c_pro
      xab1.xab$b_bln = xab$c_prolen
 
      status = sys$open(fab)
*
*     Blocks allocated
*
      iblk = fab.fab$l_alq
*
*     Dates & times
*
      status = sys$asctim(,revdat,xab.xab$q_rdt,)
      status = sys$asctim(,credat,xab.xab$q_cdt,)
      status = sys$asctim(,bacdat,xab.xab$q_bdt,)
      status = sys$asctim(,expdat,xab.xab$q_edt,)
*
*     File format
*
      chtype  = ' '
      recfm = fab.fab$b_rfm
      if(recfm.eq.fab$c_fix)   chtype = 'FIXED'
      if(recfm.eq.fab$c_var)   chtype = 'VARIABLE'
      if(recfm.eq.fab$c_stm)   chtype = 'STREAM'
      if(recfm.eq.fab$c_stmcr) chtype = 'STREAM_CR'
      if(recfm.eq.fab$c_stmlf) chtype = 'STREAM_LF'
      if(recfm.eq.fab$c_udf)   chtype = 'UNDEFINED'
      if(recfm.eq.fab$c_vfc)   chtype = 'VFC'
*
*     Check file protection mask
*     Bit is set to deny access of specified type
*
      chprot = '('
      lprot  = 1
      do 10 j=0,12,4
 
      if(.not.btest(xab1.xab$w_pro,j+xab$v_noread)) then
         lprot = lprot + 1
         chprot(lprot:lprot) = 'R'
      endif
 
      if(.not.btest(xab1.xab$w_pro,j+xab$v_nowrite)) then
         lprot = lprot + 1
         chprot(lprot:lprot) = 'W'
      endif
 
      if(.not.btest(xab1.xab$w_pro,j+xab$v_noexe)) then
         lprot = lprot + 1
         chprot(lprot:lprot) = 'E'
      endif
 
      if(.not.btest(xab1.xab$w_pro,j+xab$v_nodel)) then
         lprot = lprot + 1
         chprot(lprot:lprot) = 'D'
      endif
 
      lprot = lprot + 1
      chprot(lprot:lprot) = ','
 
10    continue
      chprot(lprot:lprot) = ')'
*
*     UIC
*
      write (chuic,9001) xab1.xab$w_grp,xab1.xab$w_mbm
9001  format('[',O5,',',O5,']')
 
      chuic = spaces(chuic,0)
 
      status = sys$close(fab)
 
      xzfinf = 1
 
      end
 
#endif
