{
{   The purpose of this request is to retrieve data from the "next"
{ physical position of a file opened with amp$physical access_level.}
{ The operation of this request is device dependent, as follows:}
{}
{ MASS STORAGE:}
{}
{   The intended use of this request is to transfer a full allocation_unit}
{ worth of data. The maximum amount of data which can be transferred}
{ in a single request is constrained by the number of bytes in the}
{ allocation_unit specified for the file.}
{}
{ MAGNETIC TAPE - AMC$SYSTEM_SPECIFIED BLOCK_TYPE:}
{}
{ The transfer will begin and end on a tape block boundary. One or more}
{ consecutive tape blocks may be transferred with a single request. The}
{ buffer_length must be at least the size of one system_specified block}
{ (4096 bytes in length). The number of system_specified blocks which}
{ could fit in the buffer_area is the maximum number of blocks which will}
{ be transferred in a single request. All blocks are the same length, except}
{ the last block is permitted to be shorter than the system_specified}
{ block length.}
{}
{ MAGNETIC TAPE - AMC$USER_SPECIFIED BLOCK_TYPE:}
{}
{ The transfer will begin and end on a tape block boundary. One or more}
{ consecutive tape blocks may be transferred with a single request. Each}
{ block in the buffer will be prefixed by a block header which describes}
{ the block content. This block header is provided by the access method}
{ on a read and provided by the caller on a write. The amp$pack_block_header}
{ and amp$unpack_block_header requests are provided to access the header.}
{ The buffer_length must be at least the size of one user_specified block.}
{ The maximum length of a user_specified block is the sum of the two file}
{ attributes MAX_BLOCK_LENGTH and BLOCK_HEADER_LENGTH.}
{ The result of the division of buffer_length by the maximum length}
{ of the user_specified block is the maximum number of blocks which will}
{ be transferred by this request.}
{ A block header will prefix each block moved into the buffer_area.}
{}
{       AMP$READ (FILE_IDENTIFIER, BUFFER_AREA, BUFFER_LENGTH,
{         BYTE_ADDRESS, TRANSFER_COUNT, WAIT, STATUS)
{
{ FILE_IDENTIFIER: (input) This parameter specifies the file access
{       identifier established when the file was opened.
{
{ BUFFER_AREA: (input) This parameter specifies the users buffer area into
{       which the data is transferred.
{
{ BUFFER_LENGTH: (input) This parameter specifies the maximum number
{       of bytes to be moved into the buffer.  The buffer length must
{       be a multiple of the MAU size for a mass storage file.  For a
{       tape file the buffer_length must exceed the maximum block_length
{       for the file.
{
{ BYTE_ADDRESS: (output) This parameter indicates the file byte address
{       associated with the beginning of the transfer.  This value is
{       only returned for mass storage devices.
{
{ TRANSFER_COUNT: (output) This parameter specifies the number of
{       bytes actually transferred to the buffer. This parameter is not}
{       modified by BAM if the WAIT parameter is amc$nowait. The}
{       amp$check_buffer request may be used to determine the transfer_count}
{       of a completed amc$nowait request.}
{
{ WAIT: (input) This parameter specifies the action to be taken following
{       initiation of the transfer.  Options include:
{         wait: Don't return control until the operation is complete.
{         nowait: Return control to the user even though the operation
{                 may not be complete.  The AMP$CHECK_BUFFER request
{                 must be used to determine completion.
{
{ STATUS: (output) This parameter specifies the request status.
{       CONDITION:  ame$ring_validation_error,
{       IDENTIFIER: amc$access_method_id.
{

