.help zfiomt May84 "System Interface"
.ih
NAME
zfiomt -- magtape driver primitives
.ih
SYNOPSIS
.nf
zzopmt (drive, density, mode, oldrec, oldfile, newfile, chan)
zzclmt (chan, mode, nrecords, nfiles, status)
zzrdmt (chan, buf, maxbytes)
zzwrmt (chan, buf, nbytes)
zzwtmt (chan, nrecords, nfiles, status)
zzrwmt (chan, status)

int	drive, density, mode, oldrec, oldfile, newfile, chan
int	nfiles, maxbytes, nbytes, nrecords, nfiles, status
char	buf[]
.fi
.ih
DESCRIPTION
Magnetic tape is interfaced to FIO as a streaming binary file.
The conventional set of six binary file driver routines (suffix "mt") are
used, but due to the complexity of the driver the machine dependence has
been further concentrated into the six primitives shown above.  The standard
driver routines are machine independent and are included in the standard
distribution.

Since the magtape primitives are unique, separate manual pages are provided
for each primitive.  The most complex primitive is \fBzzopmt\fR, which opens
a single file on a magtape device.  To maximize the machine and device
independence of magtape i/o, only a single file may be accessed per open.
Aside from the rewind primitive \fBzzrwmt\fR there are no explicit tape
positioning commands.  The tape is positioned ready to read or write the
first record of a file by \fBzzopmt\fR, and thereafter the tape moves only
when it is read or written.  All magtape i/o is sequential, and a file may
be opened for reading or for writing but not for both.
.ih
RETURN VALUES
The \fIchan\fR and \fIstatus\fR parameters are identical to those for any
other streaming binary file.  Magtape i/o is unique in that the high level
code is charged with keeping track of the position of the tape at all times.
The \fInrecords\fR and \fInfiles\fR return values tell the high level code
how much the tape was moved each time a primitive is called.
.ih
NOTES
To IRAF programs a magtape is a sequence of zero or more files separated
by end of file marks (filemarks, EOF) with an end of tape mark (tapemark, EOT)
following the last file on the tape.  Each file consists of one or more
data blocks.  Successive data blocks may vary in size; very short blocks
and odd size blocks (block size not commensurate with the size of an SPP char)
can cause problems.  The high level code tries hard to deal with odd size
blocks and such but success is not guaranteed.  A tapemark is a double end
of file mark.  As far as the i/o system is concerned tapes are unlabeled
and files do not have headers; everything but filemarks and tapemarks is data.

There is no explicit provision for multivolume sets.  It is assumed that either
the host system or the kernel will provide the necessary functionality to deal
with multivolume sets.  We assume that if physical end of tape is encountered
while reading or writing a tape block the process of informing the operator to
mount the new volume, rereading or rewriting the block, etc., will be performed
transparently to the high level code.
.ih
SEE ALSO
zfiobf, mtopen
.endhelp
