/* DEC/CMS REPLACEMENT HISTORY, Element VMSIO.H*/
/* *1    15-JUN-1994 11:43:29 PIPER "initial CMS population"*/
/* DEC/CMS REPLACEMENT HISTORY, Element VMSIO.H*/
/*
 *  This defines the STRU O VMS extension to the FTP protocol. A VMS client
 *  is expected to send a "STRU O VMS" command to the server at startup.
 *  Normally it receives a 500 series reply, which indicates that the
 *  server does not support VMS structure files.
 *
 *  There are two other legal replies:
 *
 *  200     - Server is a VMS machine supporting STRU O VMS transfers and
 *	      wishes the client to use it by default.
 *
 *  201     - Server is a non-VMS machine supporting STRU O VMS but as it is
 *	      not a native file type, the server does not with the client
 *	      to use it by default. The client, by default, should send
 *	      another STRU command to take the server out of structure VMS.
 *
 *
 *	When transfering VMS files, the network byte stream consists of a
 *  struct FILEATTR as defined below, followed by the bytes as read from
 *  the file using SYS$READ block i/o. The Version field of the structure
 *  should be set to FILEATTR_VERSION and checked against FILEATTR version
 *  when receiving the file. A mismatch is a fatal error. The Length field
 *  of the structure should be set to sizeof(struct FILEATTR) when
 *  transmitting a file. When receiving a file, the receiver should parse
 *  only as much of the structure as is available and as it knows how to,
 *  but skip Length bytes to find the start of the file data. This allows
 *  for both upward and downward compatibility.
 *
 *	Any changes to this structure must be coordinated with
 *	Kenneth Adelman <Adelman@TGV.COM>, to assure that all
 *	implementations are compatible.
 */

#define FILEATTR_VERSION 1

struct FILEATTR {
       unsigned int	Version;		/* Of this structure	     */
       unsigned int	Length;			/* sizeof this structure     */
       unsigned int	fab_l_alq;		/* allocation quantity	     */
       unsigned int	fab_l_fop;		/* file options		     */
       unsigned int	fab_l_mrn;		/* maximum record number     */
       unsigned short	fab_w_deq;		/* default allocation quantity */
       unsigned short	fab_w_mrs;		/* maximum record size	     */
       unsigned char	fab_b_org;		/* file organization	     */
       unsigned char	fab_b_rat;		/* record attributes	     */
       unsigned char	fab_b_rfm;		/* record format	     */
       unsigned char	fab_b_bks;		/* bucket size		     */
       unsigned char	fab_b_fsz;		/* fixed header size	     */

       unsigned char	xab_b_rfo;		/* record format and file organization */
       unsigned short	xab_w_lrl;		/* longest record's length   */
       unsigned char	xab_b_bkz;		/* bucket size		     */
       unsigned char	xab_b_hsz;		/* fixed length control header size */
       unsigned short	xab_w_mrz;		/* maximun record size	     */
       unsigned short	xab_w_dxq;		/* default file extension quantity */
       unsigned short	xab_w_gbc;		/* default global buffer count */
       unsigned char	xab_b_atr;		/* record attributes	     */

       unsigned char	fab_b_rtv;		/* Retrieval window size     */
       unsigned short	fab_w_bls;		/* block size for tape */
       unsigned short	Semantics_Length;	/* sizeof(xab_stored_semantics) */
       unsigned short	XFill;			/* Preserve QUAD alignment   */
       unsigned char	xab_stored_semantics[XAB$C_SEMANTICS_MAX_LEN]; /* Stored semantics */
       /* Encoder at this point MUST fill to quadword boundry */
};

