fm_read(_c)

	status.i4.v = fm_read(vun.i2.r, io_buffer.g.v, num_bytes.i4.r
			      [,record_number.i4.r] [,ext_status.i4.r]
			      [,bytes_returnd.i4.r] [,no_lock.i4.r]
			      [,asynchronous.i4.r])

	status.i4.v = fm_read_c(vun.i2.v, io_buffer.g.v, num_bytes.i4.v
				[,record_number.i4.v] [,ext_status.i4.r]
				[,bytes_returnd.i4.r] [,no_lock.i4.v]
				[,asynchronous.i4.v])

	This routine reads a record from a Filesharing file opened on the
	virtual unit number.  The file may have either sequential or
	relative organization and fixed or variable length records.  The
	record is written into the user's buffer according to either the
	number of bytes requested or the actual length of the record
	(whichever is shorter).  If the file was opened with direct
	access, then the logical record number defines the record to be
	read.  If the file was opened with sequential access, then the
	next record in sequence is read.  If "asynchronous" is specified
	and has a value of TRUE, the read will be asynchronous with control
	being returned to the caller without waiting for the read to complete.

	vun		virtual unit number on which the file was opened
	io_buffer	user's record buffer into which the record will
			be returned (Note: This must be the address of a
			byte array.)
	num_bytes	number of bytes requested from the record
			(the size of the "io_buffer" array)
	[record_number]	specifies the logical record number for files
			opened for direct access (A value of FMNGR_NEXT_RECORD
			will access the next record sequentially in the file.)
			(default is 0)
	[ext_status]	returned extended status from VMS/RMS (default is NULL)
	[bytes_returnd]	returned number of bytes actually read
			(actual length of the record) (default is NULL)
	[no_lock]	record locking flag (only for relative or indexed file
			organizations opened for write access)
			(TRUE -> don't lock the record being read,
			 FALSE -> leave the record locked (default))
	[asynchronous]	asynchronous flag
			(TRUE -> read will be done asynchronously,
			 FALSE -> synchronous read (default))

	This function returns status values as follows:

	OK			success
	FSHARE_xxx		error reading file
	CBS_INVARG		number of bytes <= 0
	event number		if successful asynchronous request

	This function requires the following include files:

	cnsparam_h, cbslib_h, acnet_errors_h

	Related functions:

	fm_open(_c), fm_close(_c), fm_io(_c), fm_open_read(_c)

	C/C++ usage:

	char	io_buffer[NUM_BYTES];
	short	vun;
	int	status;
	int	num_bytes = NUM_BYTES;
	int	record_number = RECORD_NUMBER;
	int	ext_status;
	int	bytes_returned;
	int	no_lock = FALSE;
	int	asynchronous = FALSE;

	status = fm_read_c(vun,(void *) io_buffer,num_bytes,record_number,
			   &ext_status,&bytes_returned,no_lock,asynchronous);