That last post of mine came across pretty ugly - let me try that again
(same info, less wrapping hopefully)
I came across this while researching my ftp problem. It seems that the
extra header info could easily be put to good use - just have to do a
pretty low level RMS open. Not that I'm volunteering or anything ;)
/*
* 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 <[EMAIL PROTECTED]>, 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 */
};