The mrd_move(3mrd) function is an interface to the SCSI Move
Medium command. For the robot specified by robot_name, the
routine will attempt to move the cartridge in the element
specified by the source address and type to that specified by
the destination address and type.
Element addresses are zero based. On subsystems that support
inverting a cartridge during a move, the cartridge_side argument
can be used to indicate that the cartridge should be inverted.
The robot will be opened and the arguments to the function
verified that they are appropriate. Element addresses and types
will be checked that they are within the valid range of elements
on the robot. The cartridge_side argument will be verified that
it is either the value one (1) or two (2). All pointer arguments,
except cartridge_name, are checked to verify they are not NULL
pointers.
The cartridge_name argument can be used to perform cartridge
volume tag verification before the move. If the cartridge volume
tag at the source doesn't match that specified by this argument,
then mrd_move(3mrd) will fail with the status MRD_STATUS_CART_
INVALID. If the cartridge_name argument is a NULL pointer, an
empty string or used on a robot without vision support this
argument is silently ignored and the volume tag check will not
be made.
On the TL820 family of libraries, the tape will be moved to the
pass-through read station if the source is a Port. If this move
fails the status will be appropriate to that of a failed Move
Medium. Likely error codes are documented in the Return Values
section.
After the volume tag check, the destination address is checked
in the same way the source was. The same error codes are returned
if the destination address is out of range. With the range checks
completed the Move Medium command is issued. If successful MRD_
STATUS_SUCCESS is returned. If the command failed, the SCSI error
will be mapped to the appropriate MRD_STATUS message.
The DLT libraries (TL820 and TL810 families) require the host
issue a SCSI Unload command before a cartridge may be removed
from the drive. The function mrd_move(3mrd), does not offer
this feature. Thus, the calling program must do this itself. On
Digital UNIX this may done with the MTOFFL opcode of the MTIOCTOP
I/O control.