From af0c3edb9706e470b45a9c8dd6debcc9e2d543c2 Mon Sep 17 00:00:00 2001 From: Lorry Tar Creator Date: Wed, 9 Jan 2013 19:04:18 +0000 Subject: mtools-4.0.18 --- mtools.texi | 2638 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2638 insertions(+) create mode 100644 mtools.texi (limited to 'mtools.texi') diff --git a/mtools.texi b/mtools.texi new file mode 100644 index 0000000..1085789 --- /dev/null +++ b/mtools.texi @@ -0,0 +1,2638 @@ +\input texinfo @c -*-texinfo-*- +@comment %**start of header +@setfilename mtools.info +@include version.texi +@settitle Mtools @value{VERSION} +@syncodeindex pg cp +@comment %**end of header + +@comment MANskip 5 + +@copying +This manual is for Mtools (version @value{VERSION}, @value{UPDATED}), +which is a collection of tools to allow Unix systems to manipulate +MS-DOS files. + +Copyright @copyright{} 2007, 2009 Free Software Foundation, Inc. +Copyright @copyright{} 1996-2005,2007-2011,2013 Alain Knaff. + +@quotation +Permission is granted to copy, distribute and/or modify this document +under the terms of the GNU Free Documentation License, Version 1.3 or +any later version published by the Free Software Foundation; with no +Invariant Sections, with no Front-Cover Texts, and with no Back-Cover +Texts. A copy of the license is included in the section entitled +``GNU Free Documentation License''. +@end quotation +@end copying + +@ignore +@unnumbered Name +mtools - utilities to access DOS disks in Unix. +@end ignore + +@include sysconfdir.texi + +@iftex +@finalout +@end iftex + +@dircategory DOS +@direntry +* Mtools: (mtools). Mtools: utilities to access DOS disks in Unix. +@end direntry + + +@titlepage +@title Mtools + +@c The following two commands start the copyright page. +@page +@vskip 0pt plus 1filll +@insertcopying +@end titlepage + +@c Output the table contents at the beginning +@contents + +@ifnottex +@node Top, Location, (dir), (dir) +@top Mtools doc + +This is mtools' documentation. +@end ifnottex + +@comment MANstart 1 + +@unnumbered Introduction +Mtools is a collection of tools to allow Unix systems to manipulate +MS-DOS files: read, write, and move around files on an MS-DOS +file system (typically a floppy disk). Where reasonable, each program +attempts to emulate the MS-DOS equivalent command. However, +unnecessary restrictions and oddities of DOS are not emulated. For +instance, it is possible to move subdirectories from one subdirectory +to another. + +Mtools is sufficient to give access to MS-DOS file systems. For +instance, commands such as @code{mdir a:} work on the @code{a:} floppy +without any preliminary mounting or initialization (assuming the default +@file{@value{SYSCONFDIR}mtools.conf} works on your machine). With mtools, one can +change floppies too without unmounting and mounting. + +@insertcopying + +@menu +* Location:: Where to find mtools and early bug fixes +* Common features:: Common features of all mtools commands +* Configuration:: How to configure mtools for your environment +* Commands:: The available mtools commands +* Compiling mtools:: Architecture specific compilation flags +* Porting mtools:: Porting mtools to architectures which are not + yet supported + +* Command Index:: Command Index +* Variable Index:: Variable Index +* Concept Index:: Concept Index +@end menu + +@node Location, Common features, Top, Top +@chapter Where to get mtools +@cindex bugs +@cindex ALPHA patches +@cindex patches +@cindex diffs +@cindex mailing list + +Mtools can be found at the following places (and their mirrors): +@example +http://ftp.gnu.org/gnu/mtools/mtools-@value{VERSION}.tar.gz +http://mtools.linux.lu/mtools-@value{VERSION}.tar.gz +ftp://www.tux.org/pub/knaff/mtools/mtools-@value{VERSION}.tar.gz +ftp://ibiblio.unc.edu/pub/Linux/utils/disk-management/mtools-@value{VERSION}.tar.gz +@end example + +Before reporting a bug, make sure that it has not yet been fixed in the +Alpha patches which can be found at: +@example +http://ftp.gnu.org/gnu/mtools/ +http://mtools.linux.lu/ +ftp://www.tux.org/pub/knaff/mtools +@end example + +These patches are named +@code{mtools-}@var{version}@code{-}@var{ddmm}@code{.taz}, where version +stands for the base version, @var{dd} for the day and @var{mm} for the +month. Due to a lack of space, I usually leave only the most recent +patch. + +There is an mtools mailing list at mtools @@ tux.org . Please +send all bug reports to this list. You may subscribe to the list by +sending a message with 'subscribe mtools @@ tux.org' in its +body to majordomo @@ tux.org . (N.B. Please remove the spaces +around the "@@" both times. I left them there in order to fool +spambots.) Announcements of new mtools versions will also be sent to +the list, in addition to the Linux announce newsgroups. The mailing +list is archived at http://lists.gnu.org/pipermail/info-mtools/ + + +@node Common features, Configuration, Location, Top +@chapter Common features of all mtools commands + +@menu +* arguments:: What the command line parameters of mtools + mean +* drive letters:: Which drives are defined by default +* directory:: Current working directory +* long names:: VFAT-style long filenames +* name clashes:: Name clash handling, and associated command + line options +* case sensitivity:: Case sensitivity +* high capacity formats:: How to fit more data on your floppies +* exit codes:: Exit codes +* bugs:: Happens to everybody +@end menu + +@node arguments, drive letters, Common features, Common features +@section Options and filenames +@cindex Filenames +@cindex Options +MS-DOS filenames are composed of a drive letter followed by a colon, a +subdirectory, and a filename. Only the filename part is mandatory, the +drive letter and the subdirectory are optional. Filenames without a +drive letter refer to Unix files. Subdirectory names can use either the +'@code{/}' or '@code{\}' separator. The use of the '@code{\}' separator +or wildcards requires the names to be enclosed in quotes to protect them +from the shell. However, wildcards in Unix filenames should not be +enclosed in quotes, because here we @strong{want} the shell to expand +them. + +The regular expression "pattern matching" routines follow the Unix-style +rules. For example, `@code{*}' matches all MS-DOS files in lieu of +`@code{*.*}'. The archive, hidden, read-only and system attribute bits +are ignored during pattern matching. + +All options use the @code{-} (minus) as their first character, not +@code{/} as you'd expect in MS-DOS. + +Most mtools commands allow multiple filename parameters, which +doesn't follow MS-DOS conventions, but which is more user-friendly. + +Most mtools commands allow options that instruct them how to handle file +name clashes. @xref{name clashes}, for more details on these. All +commands accept the @code{-V} flags which prints the version, and most +accept the @code{-v} flag, which switches on verbose mode. In verbose +mode, these commands print out the name of the MS-DOS files upon which +they act, unless stated otherwise. @xref{Commands}, for a description of +the options which are specific to each command. + + +@node drive letters, directory, arguments, Common features +@section Drive letters + +The meaning of the drive letters depends on the target architectures. +However, on most target architectures, drive A is the first floppy +drive, drive B is the second floppy drive (if available), drive J is a +Jaz drive (if available), and drive Z is a Zip drive (if available). On +those systems where the device name is derived from the SCSI id, the Jaz +drive is assumed to be at SCSI target 4, and the Zip at SCSI target 5 +(factory default settings). On Linux, both drives are assumed to be the +second drive on the SCSI bus (/dev/sdb). The default settings can be +changes using a configuration file (@pxref{Configuration}). + +The drive letter : (colon) has a special meaning. It is used to access +image files which are directly specified on the command line using the +@code{-i} options. + +Example: +@example + mcopy -i my-image-file.bin ::file1 ::file2 . +@end example + +This copies @code{file1} and @code{file2} from the image file +(@code{my-image-file.bin}) to the @code{/tmp} directory. + +You can also supply an offset within the image file by including +@code{@@@@}@var{offset} into the file name. + +Example: +@example + mcopy -i my-image-file.bin@@@@1M ::file1 ::file2 . +@end example + +This looks for the image at the offset of 1M in the file, rather than +at its beginning. + +@node directory, long names, drive letters, Common features +@section Current working directory +@pindex mcd (introduction) +@cindex Directory +@cindex Working directory +@cindex Current working directory +@cindex Default directory + +The @code{mcd} command (@ref{mcd}) is used to establish the device and +the current working directory (relative to the MS-DOS file system), +otherwise the default is assumed to be @code{A:/}. However, unlike +MS-DOS, there is only one working directory for all drives, and not one +per drive. + +@node long names, name clashes, directory, Common features +@section VFAT-style long file names +@cindex Long file name +@cindex Windows 95-style file names +@cindex VFAT-style file names +@cindex Primary file name (long names) +@cindex Secondary file name (long names) + +This version of mtools supports VFAT style long filenames. If a Unix +filename is too long to fit in a short DOS name, it is stored as a +VFAT long name, and a companion short name is generated. This short +name is what you see when you examine the disk with a pre-7.0 version +of DOS. + The following table shows some examples of short names: + +@example +Long name MS-DOS name Reason for the change +--------- ---------- --------------------- +thisisatest THISIS~1 filename too long +alain.knaff ALAIN~1.KNA extension too long +prn.txt PRN~1.TXT PRN is a device name +.abc ABC~1 null filename +hot+cold HOT_CO~1 illegal character +@end example + + As you see, the following transformations happen to derive a short +name: +@itemize @bullet +@item +Illegal characters are replaced by underscores. The illegal characters +are @code{;+=[]',\"*\\<>/?:|}. +@item +Extra dots, which cannot be interpreted as a main name/extension +separator are removed +@item +A @code{~}@var{n} number is generated, +@item +The name is shortened so as to fit in the 8+3 limitation +@end itemize + + The initial Unix-style file name (whether long or short) is also called +the @dfn{primary} name, and the derived short name is also called the +@dfn{secondary} name. + + Example: +@example + mcopy /etc/motd a:Reallylongname +@end example + Mtools creates a VFAT entry for Reallylongname, and uses REALLYLO as +a short name. Reallylongname is the primary name, and REALLYLO is the +secondary name. +@example + mcopy /etc/motd a:motd +@end example + Motd fits into the DOS filename limits. Mtools doesn't need to +derivate another name. Motd is the primary name, and there is no +secondary name. + + In a nutshell: The primary name is the long name, if one exists, or +the short name if there is no long name. + + Although VFAT is much more flexible than FAT, there are still names +that are not acceptable, even in VFAT. There are still some illegal +characters left (@code{\"*\\<>/?:|}), and device names are still +reserved. + +@example +Unix name Long name Reason for the change +--------- ---------- --------------------- +prn prn-1 PRN is a device name +ab:c ab_c-1 illegal character +@end example + + As you see, the following transformations happen if a long name is +illegal: +@itemize @bullet +@item +Illegal characters are replaces by underscores, +@item +A @code{-}@var{n} number is generated, +@end itemize + +@node name clashes, case sensitivity, long names, Common features +@section Name clashes +@cindex Name clashes +@cindex Duplicate file names +@cindex Overwriting files +@cindex Primary file name (name clashes) +@cindex Secondary file name (name clashes) + +When writing a file to disk, its long name or short name may collide +with an already existing file or directory. This may happen for all +commands which create new directory entries, such as @code{mcopy}, +@code{mmd}, @code{mren}, @code{mmove}. When a name clash happens, mtools +asks you what it should do. It offers several choices: + +@table @code +@item overwrite +Overwrites the existing file. It is not possible to overwrite a +directory with a file. +@item rename +Renames the newly created file. Mtools prompts for the new filename +@item autorename +Renames the newly created file. Mtools chooses a name by itself, without +prompting +@item skip +Gives up on this file, and moves on to the next (if any) +@end table + +To chose one of these actions, type its first letter at the prompt. If +you use a lower case letter, the action only applies for this file only, +if you use an upper case letter, the action applies to all files, and +you won't be prompted again. + +You may also chose actions (for all files) on the command line, when +invoking mtools: + +@table @code +@item -D o +Overwrites primary names by default. +@item -D O +Overwrites secondary names by default. +@item -D r +Renames primary name by default. +@item -D R +Renames secondary name by default. +@item -D a +Autorenames primary name by default. +@item -D A +Autorenames secondary name by default. +@item -D s +Skip primary name by default. +@item -D S +Skip secondary name by default. +@item -D m +Ask user what to do with primary name. +@item -D M +Ask user what to do with secondary name. +@end table + +Note that for command line switches lower/upper differentiates between +primary/secondary name whereas for interactive choices, lower/upper +differentiates between just-this-time/always. + +The primary name is the name as displayed in Windows 95 or Windows NT: +i.e. the long name if it exists, and the short name otherwise. The +secondary name is the "hidden" name, i.e. the short name if a long name +exists. + +By default, the user is prompted if the primary name clashes, and the +secondary name is autorenamed. + +If a name clash occurs in a Unix directory, mtools only asks whether +to overwrite the file, or to skip it. + +@node case sensitivity, high capacity formats, name clashes, Common features +@section Case sensitivity of the VFAT file system +@cindex Case sensitivity + +The VFAT file system is able to remember the case of the +filenames. However, filenames which differ only in case are not allowed +to coexist in the same directory. For example if you store a file called +LongFileName on a VFAT file system, mdir shows this file as LongFileName, +and not as Longfilename. However, if you then try to add LongFilename to +the same directory, it is refused, because case is ignored for clash +checks. + +The VFAT file system allows to store the case of a filename in the +attribute byte, if all letters of the filename are the same case, and if +all letters of the extension are the same case too. Mtools uses this +information when displaying the files, and also to generate the Unix +filename when mcopying to a Unix directory. This may have unexpected +results when applied to files written using an pre-7.0 version of DOS: +Indeed, the old style filenames map to all upper case. This is different +from the behavior of the old version of mtools which used to generate +lower case Unix filenames. + +@node high capacity formats, exit codes, case sensitivity, Common features +@section high capacity formats +@cindex Special formats +@cindex High capacity formats +@cindex Odd formats +@cindex Weird formats +@cindex Formats, high capacity +@cindex Linux enhancements (High Capacity Formats) + +Mtools supports a number of formats which allow to store more data on +disk as usual. Due to different operating system abilities, these +formats are not supported on all operating systems. Mtools recognizes +these formats transparently where supported. + +In order to format these disks, you need to use an operating system +specific tool. For Linux, suitable floppy tools can be found in the +@code{fdutils} package at the following locations~: +@example +@code{ftp://www.tux.org/pub/knaff/fdutils/}. +@code{ftp://ibiblio.unc.edu/pub/Linux/utils/disk-management/fdutils-*} +@end example + +See the manual pages included in that package for further detail: Use +@code{superformat} to format all formats except XDF, and use +@code{xdfcopy} to format XDF. + +@menu +* more sectors:: Putting more sectors per track on the disk +* bigger sectors:: Use bigger sectors to save header space +* 2m:: Use a standard first track +* XDF:: OS/2's eXtended density format +@end menu + +@node more sectors, bigger sectors, high capacity formats, high capacity formats +@subsection More sectors +@cindex fdformat +@cindex vgacopy +@cindex DMF disks +@cindex Windows 95 (DMF disks) + +The oldest method of fitting more data on a disk is to use more sectors +and more cylinders. Although the standard format uses 80 cylinders and +18 sectors (on a 3 1/2 high density disk), it is possible to use up to +83 cylinders (on most drives) and up to 21 sectors. This method allows +to store up to 1743K on a 3 1/2 HD disk. However, 21 sector disks are +twice as slow as the standard 18 sector disks because the sectors are +packed so close together that we need to interleave them. This problem +doesn't exist for 20 sector formats. + +These formats are supported by numerous DOS shareware utilities such as +@code{fdformat} and @code{vgacopy}. In his infinite hubris, Bill Gate$ +believed that he invented this, and called it @samp{DMF disks}, or +@samp{Windows formatted disks}. But in reality, it has already existed +years before! Mtools supports these formats on Linux, on SunOS and on +the DELL Unix PC. + +@node bigger sectors, 2m, more sectors, high capacity formats +@subsection Bigger sectors +@cindex bigger sectors +By using bigger sectors it is possible to go beyond the capacity which +can be obtained by the standard 512-byte sectors. This is because of the +sector header. The sector header has the same size, regardless of how +many data bytes are in the sector. Thus, we save some space by using +@emph{fewer}, but bigger sectors. For example, 1 sector of 4K only takes +up header space once, whereas 8 sectors of 512 bytes have also 8 +headers, for the same amount of useful data. + +This method allows to store up to 1992K on a 3 1/2 HD disk. + +Mtools supports these formats only on Linux. + +@node 2m, XDF, bigger sectors, high capacity formats +@subsection 2m +@cindex 2m + +The 2m format was originally invented by Ciriaco Garcia de Celis. It +also uses bigger sectors than usual in order to fit more data on the +disk. However, it uses the standard format (18 sectors of 512 bytes +each) on the first cylinder, in order to make these disks easier to +handle by DOS. Indeed this method allows to have a standard sized +boot sector, which contains a description of how the rest of the disk +should be read. + +However, the drawback of this is that the first cylinder can hold less +data than the others. Unfortunately, DOS can only handle disks where +each track contains the same amount of data. Thus 2m hides the fact that +the first track contains less data by using a @dfn{shadow +FAT}. (Usually, DOS stores the FAT in two identical copies, for +additional safety. XDF stores only one copy, but tells DOS that it +stores two. Thus the space that would be taken up by the second FAT copy +is saved.) This also means that you should @strong{never use a 2m disk +to store anything else than a DOS file system}. + +Mtools supports these formats only on Linux. + +@node XDF, , 2m, high capacity formats +@subsection XDF +@cindex XDF disks +@cindex OS/2 (XDF disks) + +XDF is a high capacity format used by OS/2. It can hold 1840 K per +disk. That's lower than the best 2m formats, but its main advantage is +that it is fast: 600 milliseconds per track. That's faster than the 21 +sector format, and almost as fast as the standard 18 sector format. In +order to access these disks, make sure mtools has been compiled with XDF +support, and set the @code{use_xdf} variable for the drive in the +configuration file. @xref{Compiling mtools}, and @ref{miscellaneous variables}, +for details on how to do this. Fast XDF access is only available for +Linux kernels which are more recent than 1.1.34. + +Mtools supports this format only on Linux. + +@strong{Caution / Attention distributors}: If mtools is compiled on a +Linux kernel more recent than 1.3.34, it won't run on an older +kernel. However, if it has been compiled on an older kernel, it still +runs on a newer kernel, except that XDF access is slower. It is +recommended that distribution authors only include mtools binaries +compiled on kernels older than 1.3.34 until 2.0 comes out. When 2.0 will +be out, mtools binaries compiled on newer kernels may (and should) be +distributed. Mtools binaries compiled on kernels older than 1.3.34 won't +run on any 2.1 kernel or later. + +@node exit codes, bugs, high capacity formats, Common features +@section Exit codes +All the Mtools commands return 0 on success, 1 on utter failure, or 2 +on partial failure. All the Mtools commands perform a few sanity +checks before going ahead, to make sure that the disk is indeed an +MS-DOS disk (as opposed to, say an ext2 or MINIX disk). These checks +may reject partially corrupted disks, which might otherwise still be +readable. To avoid these checks, set the MTOOLS_SKIP_CHECK +environmental variable or the corresponding configuration file variable +(@pxref{global variables}) +@node bugs, , exit codes, Common features +@section Bugs +An unfortunate side effect of not guessing the proper device (when +multiple disk capacities are supported) is an occasional error message +from the device driver. These can be safely ignored. + +The fat checking code chokes on 1.72 Mb disks mformatted with pre-2.0.7 +mtools. Set the environmental variable MTOOLS_FAT_COMPATIBILITY (or the +corresponding configuration file variable, @ref{global variables}) to +bypass the fat checking. + +@comment MANskip 1 + +@ignore +@unnumbered Name +mtools.conf - mtools configuration files + +@comment MANend-skip 5 +@section Description + +This manual page describes the configuration files for mtools. They +@comment MANskip 5 +@end ignore + + +@node Configuration, Commands, Common features, Top + + +@chapter How to configure mtools for your environment +@section Description +@cindex Configuration files +@vindex MTOOLSRC + + This sections explains the syntax of the configurations files for +mtools. The configuration files +@comment MANend-skip 5 +are called @file{@value{SYSCONFDIR}mtools.conf} and @file{~/.mtoolsrc}. If +the environmental variable @code{MTOOLSRC} is set, its contents is used +as the filename for a third configuration file. These configuration +files describe the following items: + +@itemize @bullet +@item Global configuration flags and variables +@item Per drive flags and variables +@end itemize + + +@menu +* configuration file location:: Where mtools looks for its configuration files +* general syntax:: The layout of the configuration files +* default values:: Why you don't need a configuration file in most cases +* global variables:: Variables that are independent of the drive +* per drive variables:: Variables that are specific to a given drive +* parsing order:: Location of configuration files and parsing order +* old style configuration:: Backwards compatibility +@end menu + +@node configuration file location, general syntax, Configuration, Configuration +@section Location of the configuration files + +@cindex Configuration file name +@cindex Name of configuration files +@cindex Location of configuration files + +@file{@value{SYSCONFDIR}mtools.conf} is the system-wide configuration file, +and @file{~/.mtoolsrc} is the user's private configuration file. + +On some systems, the system-wide configuration file is called +@file{/etc/default/mtools.conf} instead. + + +@node general syntax, default values, configuration file location, Configuration +@subsection General configuration file syntax +@cindex Syntax of the configuration file +@cindex Configuration file syntax + +The configuration files is made up of sections. Each section starts +with a keyword identifying the section followed by a colon. +Then follow variable assignments and flags. Variable assignments take +the following form: +@display +name=value +@end display +Flags are lone keywords without an equal sign and value following +them. A section either ends at the end of the file or where the next +section begins. + +Lines starting with a hash (@code{#}) are comments. Newline characters +are equivalent to whitespace (except where ending a comment). The +configuration file is case insensitive, except for item enclosed in +quotes (such as filenames). + +@node default values, global variables, general syntax, Configuration +@section Default values +@cindex Default values +@cindex Default configuration +@cindex Configuration file +For most platforms, mtools contains reasonable compiled-in defaults for +physical floppy drives. Thus, you usually don't need to bother with the +configuration file, if all you want to do with mtools is to access your +floppy drives. On the other hand, the configuration file is needed if +you also want to use mtools to access your hard disk partitions and +DOSEMU image files. + +@node global variables, per drive variables, default values, Configuration +@section Global variables +@cindex Global configuration variables +@cindex Drive independent configuration variables +@cindex Environmental variables +@vindex MTOOLS_SKIP_CHECK +@vindex MTOOLS_FAT_COMPATIBILITY +@vindex MTOOLS_LOWER_CASE +@vindex MTOOLS_NO_VFAT +@cindex FreeDOS + +Global flags may be set to 1 or to 0. + +The following global flags are recognized: + +@table @code +@item MTOOLS_SKIP_CHECK +If this is set to 1, mtools skips most of its sanity checks. This is +needed to read some Atari disks which have been made with the earlier +ROMs, and which would not be recognized otherwise. +@item MTOOLS_FAT_COMPATIBILITY +If this is set to 1, mtools skips the fat size checks. Some disks have +a bigger FAT than they really need to. These are rejected if this +option is not set. +@item MTOOLS_LOWER_CASE +If this is set to 1, mtools displays all-upper-case short filenames as +lowercase. This has been done to allow a behavior which is consistent +with older versions of mtools which didn't know about the case bits. +@item MTOOLS_NO_VFAT +If this is set to 1, mtools won't generate VFAT entries for filenames +which are mixed-case, but otherwise legal dos filenames. This is useful +when working with DOS versions which can't grok VFAT long names, such as +FreeDOS. +@item MTOOLS_DOTTED_DIR +In a wide directory, prints the short name with a dot instead of spaces +separating the basename and the extension. +@item MTOOLS_NAME_NUMERIC_TAIL +If this is set to one (default), generate numeric tails for all long +names (~1). If set to zero, only generate numeric tails if otherwise a +clash would have happened. +@item MTOOLS_TWENTY_FOUR_HOUR_CLOCK +If 1, uses the European notation for times (twenty four hour clock), +else uses the UK/US notation (am/pm) +@end table + +Example: +Inserting the following line into your configuration file instructs +mtools to skip the sanity checks: +@example + MTOOLS_SKIP_CHECK=1 +@end example + +Global variables may also be set via the environment: +@example + export MTOOLS_SKIP_CHECK=1 +@end example + +Global string variables may be set to any value: +@table @code +@item MTOOLS_DATE_STRING +The format used for printing dates of files. By default, is dd-mm-yyyy. +@end table + +@node per drive variables, parsing order, global variables, Configuration +@section Per drive flags and variables +@cindex Drive description +@cindex Drive configuration + +@menu +* general information:: What a drive description looks like +* location information:: Where is the drive data physically stored +* geometry description:: Describes the physical characteristics of + the media +* open flags:: Flags passed to the open system call when the + device is opened +* miscellaneous variables:: Variables which don't fit in either category +* miscellaneous flags:: Switch variables, which can be enabled or disabled +* multiple descriptions:: How to supply several descriptions for a + drive, to be tried one after the other. +@end menu + +@node general information, location information, per drive variables, per drive variables +@subsection General information +@cindex Drive description, example +@cindex Drive configuration, example +@vindex drive + +Per drive flags and values may be described in a drive section. A +drive section starts with +@code{drive} "@var{driveletter}" : + +Then follow variable-value pairs and flags. + +This is a sample drive description: +@example + drive a: + file="/dev/fd0" use_xdf=1 +@end example + +@node location information, geometry description, general information, per drive variables +@subsection Location information +@cindex Hdimage + +For each drive, you need to describe where its data is physically +stored (image file, physical device, partition, offset). + +@table @code +@item file +@cindex Image file +@cindex Name of device node +@cindex File name of device node +@vindex file +The name of the file or device holding the disk image. This is +mandatory. The file name should be enclosed in quotes. + +@item partition +@cindex DOSEMU hard disk image +@cindex Zip disks (partitions) +@cindex Jaz disks (partitions) +@cindex Syquest disks +@cindex Magneto-optical disks +@cindex OS/2 (layout of removable media) +@cindex Windows NT (layout of removable media) +@cindex Removable media +@cindex Partitioned image file +Tells mtools to treat the drive as a partitioned device, and to use the +given partition. Only primary partitions are accessible using this +method, and they are numbered from 1 to 4. For logical partitions, use +the more general @code{offset} variable. The @code{partition} variable +is intended for removable media such as Syquest disks, ZIP drives, and +magneto-optical disks. Although traditional DOS sees Syquest disks and +magneto-optical disks as @samp{giant floppy disks} which are +unpartitioned, OS/2 and Windows NT treat them like hard disks, +i.e. partitioned devices. The @code{partition} flag is also useful DOSEMU +hdimages. It is not recommended for hard disks for which direct access +to partitions is available through mounting. + +@item offset +@cindex Ram disk +@cindex Atari Ram disk +Describes where in the file the MS-DOS file system starts. This is useful +for logical partitions in DOSEMU hdimages, and for ATARI ram disks. By +default, this is zero, meaning that the file system starts right at the +beginning of the device or file. +@end table + +@node geometry description, open flags, location information, per drive variables +@subsection Disk Geometry Configuration +@cindex Disk Geometry +@cindex Configuration of disk geometry +@cindex Description of disk geometry +@cindex Format of disk +@cindex High density disk +@cindex Low density disk +@pindex mformat (geometry used for) + +Geometry information describes the physical characteristics about the +disk. Its has three purposes: + +@table @asis +@item formatting +The geometry information is written into the boot sector of the newly +made disk. However, you may also describe the geometry information on +the command line. @xref{mformat}, for details. +@item filtering +On some Unixes there are device nodes which only support one physical +geometry. For instance, you might need a different node to access a disk +as high density or as low density. The geometry is compared to the +actual geometry stored on the boot sector to make sure that this device +node is able to correctly read the disk. If the geometry doesn't match, +this drive entry fails, and the next drive entry bearing the same drive +letter is tried. @xref{multiple descriptions}, for more details on +supplying several descriptions for one drive letter. + +If no geometry information is supplied in the configuration file, all +disks are accepted. On Linux (and on SPARC) there exist device nodes +with configurable geometry (@file{/dev/fd0}, @file{/dev/fd1} etc), +and thus filtering is not needed (and ignored) for disk drives. (Mtools +still does do filtering on plain files (disk images) in Linux: this is +mainly intended for test purposes, as I don't have access to a Unix +which would actually need filtering). + +If you do not need filtering, but want still a default geometry for +mformatting, you may switch off filtering using the @code{mformat_only} +flag. + +If you want filtering, you should supply the @code{filter} flag. If you +supply a geometry, you must supply one of both flags. + +@item initial geometry +On devices that support it (usually floppy devices), the geometry +information is also used to set the initial geometry. This initial +geometry is applied while reading the boot sector, which contains the +real geometry. If no geometry information is supplied in the +configuration file, or if the @code{mformat_only} flag is supplied, no +initial configuration is done. + +On Linux, initial geometry is not really needed, as the configurable +devices are able to auto-detect the disk type accurately enough (for +most common formats) to read the boot sector. +@end table + +Wrong geometry information may lead to very bizarre errors. That's why I +strongly recommend that you add the @code{mformat_only} flag to your +drive description, unless you really need filtering or initial geometry. + +The following geometry related variables are available: + +@table @code +@item cylinders +@itemx tracks +@vindex cylinders +@vindex tracks +The number of cylinders. (@code{cylinders} is the preferred form, +@code{tracks} is considered obsolete) +@item heads +@vindex heads +The number of heads (sides). +@item sectors +@vindex sectors +The number of sectors per track. +@end table + +Example: the following drive section describes a 1.44M drive: + +@example + drive a: + file="/dev/fd0H1440" + fat_bits=12 + cylinders=80 heads=2 sectors=18 + mformat_only +@end example + +The following shorthand geometry descriptions are available: + +@table @code +@item 1.44m +high density 3 1/2 disk. Equivalent to: +@code{fat_bits=12 cylinders=80 heads=2 sectors=18} +@item 1.2m +high density 5 1/4 disk. Equivalent to: +@code{fat_bits=12 cylinders=80 heads=2 sectors=15} +@item 720k +double density 3 1/2 disk. Equivalent to: +@code{fat_bits=12 cylinders=80 heads=2 sectors=9} +@item 360k +double density 5 1/4 disk. Equivalent to: +@code{fat_bits=12 cylinders=40 heads=2 sectors=9} +@end table + +The shorthand format descriptions may be amended. For example, +@code{360k sectors=8} +describes a 320k disk and is equivalent to: +@code{fat_bits=12 cylinders=40 heads=2 sectors=8} + +@node open flags, miscellaneous variables, geometry description, per drive variables +@subsection Open Flags +@vindex sync +@vindex nodelay +@vindex exclusive +@cindex open flags +@cindex synchronous writing +@cindex exclusive access to a drive + +Moreover, the following flags are available: + +@table @code +@item sync +All i/o operations are done synchronously +@item nodelay +The device or file is opened with the O_NDELAY flag. This is needed on +some non-Linux architectures. +@item exclusive +The device or file is opened with the O_EXCL flag. On Linux, this +ensures exclusive access to the floppy drive. On most other +architectures, and for plain files it has no effect at all. +@end table + + +@node miscellaneous variables, miscellaneous flags, open flags, per drive variables +@subsection General Purpose Drive Variables + +The following general purpose drive variables are available. Depending +to their type, these variables can be set to a string (precmd) or +an integer (all others) + +@table @code +@item fat_bits +@vindex fat_bits +The number of FAT bits. This may be 12 or 16. This is very rarely +needed, as it can almost always be deduced from information in the +boot sector. On the contrary, describing the number of fat bits may +actually be harmful if you get it wrong. You should only use it if +mtools gets the auto-detected number of fat bits wrong, or if you want +to mformat a disk with a weird number of fat bits. +@item codepage +Describes the DOS code page used for short filenames. This is a number +between 1 and 999. By default, code page 850 is used. The reason for +this is because this code page contains most of the characters that are +also available in ISO-Latin-1. You may also specify a global code page +for all drives by using the global @code{default_codepage} parameter +(outside of any drive description). This parameters exists starting at +version 4.0.0 +@item precmd +@cindex Solaris (volcheck) +@cindex Executing commands before opening the device +On some variants of Solaris, it is necessary to call 'volcheck -v' +before opening a floppy device, in order for the system to notice that +there is indeed a disk in the drive. @code{precmd="volcheck -v"} in the +drive clause establishes the desired behavior. + +@item blocksize +@cindex raw device +@cindex character devices +@cindex blocksize +This parameter represents a default block size to be always used on this +device. All I/O is done with multiples of this block size, +independently of the sector size registered in the file system's boot +sector. This is useful for character devices whose sector size is not +512, such as for example CD-ROM drives on Solaris. + +@end table + +Only the @code{file} variable is mandatory. The other parameters may +be left out. In that case a default value or an auto-detected value is +used. + + + +@node miscellaneous flags, multiple descriptions, miscellaneous variables, per drive variables +@subsection General Purpose Drive Flags + +A flag can either be set to 1 (enabled) or 0 (disabled). If the value is +omitted, it is enabled. For example, @code{scsi} is equivalent to +@code{scsi=1} + +@table @code +@item nolock +@cindex disable locking +@cindex locking (disabling it) +@cindex plain floppy: device xxx busy +Instruct mtools to not use locking on this drive. This is needed on +systems with buggy locking semantics. However, enabling this makes +operation less safe in cases where several users may access the same +drive at the same time. + +@item scsi +@cindex setuid installation (needed for raw SCSI I/O) +@cindex Solaris (Raw access to SCSI devices such as Zip & Jaz) +@cindex SunOS (Raw access to SCSI devices such as Zip & Jaz) +@cindex Zip disks (raw SCSI access) +@cindex Jaz disks (raw SCSI access) +@cindex Syquest disks (raw SCSI access) +@cindex SCSI devices +When set to 1, this option tells mtools to use raw SCSI I/O instead of +the standard read/write calls to access the device. Currently, this is +supported on HP-UX, Solaris and SunOS. This is needed because on some +architectures, such as SunOS or Solaris, PC media can't be accessed +using the @code{read} and @code{write} system calls, because the OS expects +them to contain a Sun specific "disk label". + +As raw SCSI access always uses the whole device, you need to specify the +"partition" flag in addition + +On some architectures, such as Solaris, mtools needs root privileges to +be able to use the @code{scsi} option. Thus mtools should be installed +setuid root on Solaris if you want to access Zip/Jaz drives. Thus, if +the @code{scsi} flag is given, @code{privileged} is automatically +implied, unless explicitly disabled by @code{privileged=0} + +Mtools uses its root privileges to open the device, and to issue the +actual SCSI I/O calls. Moreover, root privileges are only used for +drives described in a system-wide configuration file such as +@file{@value{SYSCONFDIR}mtools.conf}, and not for those described in +@file{~/.mtoolsrc} or @file{$MTOOLSRC}. + +@item privileged +@cindex setuid installation +@cindex setgid installation +When set to 1, this instructs mtools to use its setuid and setgid +privileges for opening the given drive. This option is only valid for +drives described in the system-wide configuration files (such as +@file{@value{SYSCONFDIR}mtools.conf}, not @file{~/.mtoolsrc} or +@file{$MTOOLSRC}). Obviously, this option is also a no op if mtools is +not installed setuid or setgid. This option is implied by 'scsi=1', but +again only for drives defined in system-wide configuration files. +Privileged may also be set explicitly to 0, in order to tell mtools not +to use its privileges for a given drive even if @code{scsi=1} is set. + +Mtools only needs to be installed setuid if you use the +@code{privileged} or @code{scsi} drive variables. If you do not use +these options, mtools works perfectly well even when not installed +setuid root. + +@item vold +@cindex Solaris (vold) +@cindex Vold (mediamgr) + +Instructs mtools to interpret the device name as a vold identifier +rather than as a filename. The vold identifier is translated into a +real filename using the @code{media_findname()} and +@code{media_oldaliases()} functions of the @code{volmgt} library. This +flag is only available if you configured mtools with the +@code{--enable-new-vold} option before compilation. + +@item swap +@cindex Atari +@cindex Wordswapped + +Consider the media as a word-swapped Atari disk. + +@item use_xdf +@cindex XDF disks (how to configure) +@vindex use_xdf +If this is set to a non-zero value, mtools also tries to access this +disk as an XDF disk. XDF is a high capacity format used by OS/2. This +is off by default. @xref{XDF}, for more details. +@item mformat_only +@vindex mformat_only +Tells mtools to use the geometry for this drive only for mformatting and +not for filtering. + +@item filter +@vindex filter +Tells mtools to use the geometry for this drive both for mformatting and +filtering. + +@item remote +Tells mtools to connect to floppyd (@pxref{floppyd}). +@end table + + +@node multiple descriptions, , miscellaneous flags, per drive variables +@subsection Supplying multiple descriptions for a drive + +It is possible to supply multiple descriptions for a drive. In that +case, the descriptions are tried in order until one is found that +fits. Descriptions may fail for several reasons: + +@enumerate +@item +because the geometry is not appropriate, +@item +because there is no disk in the drive, +@item +or because of other problems. +@end enumerate + +Multiple definitions are useful when using physical devices which are +only able to support one single disk geometry. +Example: +@example + drive a: file="/dev/fd0H1440" 1.44m + drive a: file="/dev/fd0H720" 720k +@end example + +This instructs mtools to use /dev/fd0H1440 for 1.44m (high density) +disks and /dev/fd0H720 for 720k (double density) disks. On Linux, this +feature is not really needed, as the /dev/fd0 device is able to handle +any geometry. + +You may also use multiple drive descriptions to access both of your +physical drives through one drive letter: + +@example + drive z: file="/dev/fd0" + drive z: file="/dev/fd1" +@end example + +With this description, @code{mdir z:} accesses your first physical +drive if it contains a disk. If the first drive doesn't contain a disk, +mtools checks the second drive. + +When using multiple configuration files, drive descriptions in the files +parsed last override descriptions for the same drive in earlier +files. In order to avoid this, use the @code{drive+} or @code{+drive} +keywords instead of @code{drive}. The first adds a description to the +end of the list (i.e. it will be tried last), and the first adds it to +the start of the list. + +@node parsing order, old style configuration, per drive variables, Configuration +@section Location of configuration files and parsing order +@cindex Parsing order +@cindex Configuration file parsing order +@cindex Configuration file name (parsing order) +@cindex Name of configuration files (parsing order) +@cindex Location of configuration files (parsing order) + +The configuration files are parsed in the following order: +@enumerate +@item +compiled-in defaults +@item +@file{@value{SYSCONFDIR}mtools.conf} +@item +@file{~/.mtoolsrc}. +@item +@file{$MTOOLSRC} (file pointed by the @code{MTOOLSRC} environmental +variable) +@end enumerate + +Options described in the later files override those described in the +earlier files. Drives defined in earlier files persist if they are not +overridden in the later files. For instance, drives A and B may be +defined in @file{@value{SYSCONFDIR}mtools.conf} and drives C and D may be +defined in @file{~/.mtoolsrc} However, if @file{~/.mtoolsrc} also +defines drive A, this new description would override the description of +drive A in @file{@value{SYSCONFDIR}mtools.conf} instead of adding to it. If +you want to add a new description to a drive already described in an +earlier file, you need to use either the @code{+drive} or @code{drive+} +keyword. + +@node old style configuration, , parsing order, Configuration +@section Backwards compatibility with old configuration file syntax +@cindex Backwards compatibility +@cindex Old configuration file syntax +@cindex Configuration file, old syntax + +The syntax described herein is new for version @code{mtools-3.0}. The +old line-oriented syntax is still supported. Each line beginning with a +single letter is considered to be a drive description using the old +syntax. Old style and new style drive sections may be mixed within the +same configuration file, in order to make upgrading easier. Support for +the old syntax will be phased out eventually, and in order to discourage +its use, I purposefully omit its description here. + +@comment MANskip 5 + +@node Commands, Compiling mtools, Configuration, Top +@chapter Command list +@cindex Command list +@cindex List of available commands + + This section describes the available mtools commands, and the command +line parameters that each of them accepts. Options which are common to +all mtools commands are not described here, @ref{arguments} for a +description of those. + +@menu +* floppyd:: floppy daemon to run on your X server box +* floppyd_installtest:: small utility to check for the presence of floppyd +* mattrib:: change MS-DOS file attribute flags +* mbadblocks:: tests a floppy disk, and marks the bad blocks in the FAT +* mcat:: same as cat. Only useful with floppyd. +* mcd:: change MS-DOS directory +* mclasserase:: erase memory card +* mcopy:: copy MS-DOS files to/from Unix +* mdel:: delete an MS-DOS file +* mdeltree:: recursively delete an MS-DOS directory +* mdir:: display an MS-DOS directory +* mdu:: list space occupied by directory and its contents +* mformat:: add an MS-DOS file system to a low-level formatted floppy disk +* minfo:: get information about an MS-DOS file system. +* mlabel:: make an MS-DOS volume label +* mkmanifest:: makes a list of short name equivalents +* mmd:: make an MS-DOS subdirectory +* mmount:: mount an MS-DOS disk +* mpartition:: create an MS-DOS as a partition +* mrd:: remove an MS-DOS subdirectory +* mmove:: move or rename an MS-DOS file or subdirectory +* mren:: rename an existing MS-DOS file +* mshortname:: shows the short name of a file +* mshowfat:: shows the FAT map of a file +* mtoolstest:: tests and displays the configuration +* mtype:: display contents of an MS-DOS file +* mzip:: zip disk specific commands +@end menu + +@node floppyd, floppyd_installtest, Commands, Commands +@section Floppyd +@pindex floppyd +@cindex X terminal +@cindex remote floppy access + +@code{Floppyd} is used as a server to grant access to the floppy drive +to clients running on a remote machine, just as an X server grants +access to the display to remote clients. It has the following syntax: + +@code{floppyd} [@code{-d}] [@code{-l}] [@code{-s} @var{port}] [@code{-r} +@var{user}] [@code{-b} @var{ipaddr}] [@code{-x} @var{display}] @var{devicenames} + + +@code{floppyd} is always associated with an X server. It runs on the +same machine as its X server, and listens on port 5703 and above. + +@subsection Authentication + +@code{floppyd} authenticates remote clients using the @code{Xauthority} +protocol. Xhost authentication is not supported. Each floppyd is +associated with an X server. When a remote client attempts to connect +to floppyd, it sends floppyd the X authority record corresponding to +floppyd's X server. Floppyd in turn then tries to open up a connection +to the X server in order to verify the authenticity of the xauth record. +If the connection to the X server succeeds, the client is granted +access. +@code{DISPLAY}. + +@strong{Caution}: In order to make authentication work correctly, the +local host should @strong{not} be listed in the @code{xhost} list of +allowed hosts. + Indeed, hosts listed in @code{xhost} do not need a correct +@code{Xauthority} cookie to connect to the X server. As @code{floppyd} +runs on the same host as the X server, all its probe connection would +succeed even for clients who supplied a bad cookie. This means that +your floppy drive would be open to the world, i.e. a huge security hole. + If your X server does not allow you to remove @code{localhost:0} and +@code{:0} from the @code{xhost} list, you can prevent floppyd from +probing those display names with the @code{-l} option. + +@subsection Command line options + +@table @code +@item d +Daemon mode. Floppyd runs its own server loop. Do not supply this if +you start floppyd from @code{inetd.conf} +@item s @var{port} +Port number for daemon mode. Default is 5703 + @var{displaynumber}. +This flag implies daemon mode. For example, for display +@code{hitchhiker:5}, the port would be 5708. +@item b @var{ipaddr} +Bind address (for multi homed hosts). This flag implies daemon mode +@item r @var{user} +Run the server under as the given user +@item x @var{display} +X display to use for authentication. By default, this is taken from the +@code{DISPLAY} variable. If neither the @code{x} attribute is present +nor @code{DISPLAY} is set, floppyd uses @code{:0.0}. +@end table + +@var{devicenames} is a list of device nodes to be opened. Default +is @code{/dev/fd0}. Multiple devices are only supported on mtools +versions newer than 3.9.11. + + +@subsection Connecting to floppyd + + In order to use floppyd, add the flag @code{remote} to the device +description in your @file{~/.mtoolsrc} file. If the flag @code{remote} +is given, the @code{file} parameter of the device description is taken +to be a remote address. It's format is the following: +@var{hostname}@code{:}@var{displaynumber}[@code{/}[@var{baseport}][@code{/}@var{drive}]]. When +using this entry, mtools connects to port +@var{baseport}+@var{displaynumber} at @var{hostname}. By default +@var{baseport} is 5703. The drive parameter is to distinguish among +multiple drives associated with a single display (only mtools versions +more recent than 3.9.11) + +@subsection Examples: + + The following starts a floppy daemon giving access to @file{/dev/fd0}, +listening on the default port 5703, tied to the default X servers: + +@example +floppyd -d /dev/fd0 +@end example + + Each of the following starts a floppy daemon giving access to +@file{/dev/fd1}, tied to the :1 local X servers, and listening on port +5704. We assume that the local host is named @code{hitchhiker}. + +@example +floppyd -d /dev/fd0 +floppyd -d -x :1 -p 5704 /dev/fd0 +@end example + + If you want to start floppyd by @code{inetd} instead of running it as a +daemon, insert the following lines into @file{/etc/services}: +@example +# floppy daemon +floppyd-0 5703/tcp # floppy daemon for X server :0 +floppyd-1 5704/tcp # floppy daemon for X server :1 +@end example + + And insert the following into @file{/etc/inetd.conf} (assuming that you +have defined a user named floppy in your @file{/etc/passwd}): + +@example +# floppy daemon +floppyd-0 stream tcp wait floppy /usr/sbin/floppyd floppyd /dev/fd0 +floppyd-1 stream tcp wait floppy /usr/sbin/floppyd floppyd -x :1 /dev/fd0 +@end example + + Note that you need to supply the X display names for the second +floppyd. This is because the port is opened by inetd.conf, and hence +floppyd cannot know its number to interfere the display number. + + +On the client side, insert the following into your @file{~/.mtoolsrc} +to define a drive letter accessing floppy drive in your X terminal: +@example +drive x: file="$DISPLAY" remote +@end example + +If your X terminal has more than one drive, you may access the +additional drives as follows: +@example +drive y: file="$DISPLAY//1" remote +drive z: file="$DISPLAY//2" remote +@end example + +@node floppyd_installtest, mattrib, floppyd, Commands +@section Floppyd_installtest +@pindex floppyd_installtest +@cindex X terminal +@cindex remote floppy access + +@code{Floppyd_installtest} is used to check for the presence of a running +floppyd daemon. This is useful, if you have a small front-end script to +mtools, which decides whether to use floppyd or not. + +@code{floppyd_installtest} [@code{-f}] Connect-String + +If the @code{-f} option is specified, @code{floppyd_installtest} does a +full X-Cookie authentication and complains if this does not work. + +The connect-String has the format described in the floppyd-section: +@var{hostname}@code{:}@var{displaynumber}[@code{/}@var{baseport}] + +@node mattrib, mbadblocks, floppyd_installtest, Commands +@section Mattrib +@pindex mattrib +@cindex Changing file attributes +@cindex Hidden files +@cindex Read-only files (changing the attribute) +@cindex System files +@cindex Archive bit + +@code{Mattrib} is used to change MS-DOS file attribute flags. It has the +following syntax: + +@code{mattrib} [@code{-a|+a}] [@code{-h|+h}] [@code{-r|+r}] +[@code{-s|+s}] [@code{-/}] [@code{-p}] [@code{-X}] @var{msdosfile} [ @var{msdosfiles} @dots{} ] + +@code{Mattrib} adds attribute flags to an MS-DOS file (with the +`@code{+}' operator) or remove attribute flags (with the `@code{-}' +operator). + +@code{Mattrib} supports the following attribute bits: + +@table @code +@item a +Archive bit. Used by some backup programs to indicate a new file. +@item r +Read-only bit. Used to indicate a read-only file. Files with this bit +set cannot be erased by @code{DEL} nor modified. +@item s +System bit. Used by MS-DOS to indicate a operating system file. +@item h +Hidden bit. Used to make files hidden from @code{DIR}. +@end table + +@code{Mattrib} supports the following command line flags: +@table @code +@item / +Recursive. Recursively list the attributes of the files in the subdirectories. +@item X +Concise. Prints the attributes without any whitespace padding. If +neither the "/" option is given, nor the @var{msdosfile} contains a +wildcard, and there is only one MS-DOS file parameter on the command +line, only the attribute is printed, and not the filename. This option +is convenient for scripts +@item p +Replay mode. Outputs a series of mformat commands that will reproduce +the current situation, starting from a situation as left by untarring +the MS-DOS file system. Commands are only output for attribute settings +that differ from the default (archive bit set for files, unset for +directories). This option is intended to be used in addition to +tar. The @code{readonly} attribute is not taken into account, as tar can +set that one itself. +@end table + +@node mbadblocks, mcat, mattrib, Commands +@section Mbadblocks +@pindex mbadblocks +@cindex Marking blocks as bad +@cindex Bad blocks +@cindex Read errors + +The @code{mbadblocks} command is used to mark some clusters on an +MS-DOS filesystem bad. It has the following syntax: + +@code{mbadblocks} [@code{-s} @var{sectorlist}|@code{-c} @var{clusterlist}|-w] @var{drive}@code{:} + +If no command line flags are supplied, @code{Mbadblocks} scans an +MS-DOS filesystem for bad blocks by simply trying to read them and +flag them if read fails. All blocks that are unused are scanned, and +if detected bad are marked as such in the FAT. + +This command is intended to be used right after @code{mformat}. It is +not intended to salvage data from bad disks. + + +@subsection Command line options + +@table @code +@item c @var{file} +Use a list of bad clusters, rather than scanning for bad clusters +itself. +@item s @var{file} +Use a list of bad sectors (counted from beginning of filesystem), +rather than trying for bad clusters itself. +@item w +Write a random pattern to each cluster, then read it back and flag +cluster as bad if mismatch. Only free clusters are tested in such a +way, so any file data is preserved. +@end table + +@subsection Bugs +@code{Mbadblocks} should (but doesn't yet :-( ) also try to salvage bad +blocks which are in use by reading them repeatedly, and then mark them +bad. + +@node mcat, mcd, mbadblocks, Commands +@section Mcat + +The @code{mcat} command is used to copy an entire disk image from or +to the floppy device. It uses the following syntax: + +@code{mcat} [@code{-w}] @var{drive}@code{:} +@pindex mcat +@cindex Copying an entire disk image +@cindex Disk image +@cindex Floppyd cat + +@code{Mcat} performs the same task as the Unix @code{cat} command. It +is included into the mtools package, since @code{cat} cannot access +remote floppy devices offered by the mtools floppy daemon. +Now it is possible to create boot floppies remotely. + +The default operation is reading. The output is written to stdout. + +If the @code{-w} option is specified, mcat reads a disk-image from +stdin and writes it to the given device. +@strong{Use this carefully!} Because of the low-level nature of this +command, it will happily destroy any data written before on the +disk without warning! + +@node mcd, mclasserase, mcat, Commands +@section Mcd +@pindex mcd +@cindex Directory (changing) +@cindex Working directory +@cindex Current working directory (changing the) +@cindex Default directory (changing the) +@cindex Mcwd file + +The @code{mcd} command is used to change the mtools working directory +on the MS-DOS disk. It uses the following syntax: + +@example +@code{mcd} [@var{msdosdirectory}] +@end example + +Without arguments, @code{mcd} reports the current device and working +directory. Otherwise, @code{mcd} changes the current device and current +working directory relative to an MS-DOS file system. + +The environmental variable @code{MCWD} may be used to locate the file +where the device and current working directory information is stored. +The default is @file{$HOME/.mcwd}. Information in this file is ignored +if the file is more than 6 hours old. + +@code{Mcd} returns 0 on success or 1 on failure. + +Unlike MS-DOS versions of @code{CD}, @code{mcd} can be used to change to +another device. It may be wise to remove old @file{.mcwd} files at logout. + +@node mclasserase, mcopy, mcd, Commands +@section Mclasserase +@pindex mclasserase +@cindex Memory Card +@cindex Physically erase + +The @code{mclasserase} command is used to wipe memory cards by +overwriting it three times: first with @code{0xff}, then with +@code{0x00}, then with @code{0xff} again. The command uses the following +syntax: + +@example +@code{mclasserase} [@code{-d}] @var{msdosdrive} +@end example + +MS-DOS drive is optional, if none is specified, use @code{A:}. If more than +one drive are specified, all but the last are ignored. + +@code{Mclasserase} accepts the following command line options: + +@table @code +@item d +Stop after each erase cycle, for testing purposes +@item p +Not yet implemented +@end table + + +@code{Mclasserase} returns 0 on success or -1 on failure. + + +@node mcopy, mdel, mclasserase, Commands +@section Mcopy +@pindex mcopy +@cindex Reading MS-DOS files +@cindex Writing MS-DOS files +@cindex Copying MS-DOS files +@cindex Concatenating MS-DOS files +@cindex Text files +@cindex CR/LF conversions + +The @code{mcopy} command is used to copy MS-DOS files to and from +Unix. It uses the following syntax: + +@example +@code{mcopy} [@code{-bspanvmQT}] [@code{-D} @var{clash_option}] @var{sourcefile} @var{targetfile} +@code{mcopy} [@code{-bspanvmQT}] [@code{-D} @var{clash_option}] @var{sourcefile} [ @var{sourcefiles}@dots{} ] @var{targetdirectory} +@code{mcopy} [@code{-tnvm}] @var{MSDOSsourcefile} +@end example + + + +@code{Mcopy} copies the specified file to the named file, or copies +multiple files to the named directory. The source and target can be +either MS-DOS or Unix files. + +The use of a drive letter designation on the MS-DOS files, 'a:' for +example, determines the direction of the transfer. A missing drive +designation implies a Unix file whose path starts in the current +directory. If a source drive letter is specified with no attached file +name (e.g. @code{mcopy a: .}), all files are copied from that drive. + +If only a single, MS-DOS source parameter is provided (e.g. "mcopy +a:foo.exe"), an implied destination of the current directory +(`@code{.}') is assumed. + +A filename of `@code{-}' means standard input or standard output, depending +on its position on the command line. + +@code{Mcopy} accepts the following command line options: + +@table @code +@item t +Text file transfer. Mcopy translates incoming carriage return/line +feeds to line feeds when copying from MS-DOS to Unix, and vice-versa when +copying from Unix to MS-DOS. +@item b +Batch mode. Optimized for huge recursive copies, but less secure if a +crash happens during the copy. +@item s +Recursive copy. Also copies directories and their contents +@item p +Preserves the attributes of the copied files +@item Q +When mcopying multiple files, quits as soon as one copy fails (for +example due to lacking storage space on the target disk) +@item a +Text (ASCII) file transfer. @code{ASCII} translates incoming carriage +return/line feeds to line feeds. +@item T +Text (ASCII) file transfer with character set conversion. Differs from +@code{-a} in the @code{ASCII} also translates incoming PC-8 characters +to ISO-8859-1 equivalents as far as possible. When reading DOS files, +untranslatable characters are replaced by '@code{#}'; when writing DOS files, +untranslatable characters are replaced by '@code{.}'. +@item n +No confirmation when overwriting Unix files. @code{ASCII} doesn't warn +the user when overwriting an existing Unix file. If the target file already exists, +and the @code{-n} option is not in effect, @code{mcopy} asks whether to +overwrite the file or to rename the new file (@ref{name clashes}) for +details). In order to switch off confirmation for DOS files, use @code{-o}. +@item m +Preserve the file modification time. +@item v +Verbose. Displays the name of each file as it is copied. +@end table + +@subsection Bugs +Unlike MS-DOS, the '+' operator (append) from MS-DOS is not +supported. However, you may use @code{mtype} to produce the same effect: +@example +mtype a:file1 a:file2 a:file3 >unixfile +mtype a:file1 a:file2 a:file3 | mcopy - a:msdosfile +@end example + +@node mdel, mdeltree, mcopy, Commands +@section Mdel +@pindex mdel +@cindex removing MS-DOS files +@cindex erasing MS-DOS files +@cindex deleting MS-DOS files + +The @code{mdel} command is used to delete an MS-DOS file. Its syntax +is: + +@display +@code{mdel} [@code{-v}] @var{msdosfile} [ @var{msdosfiles} @dots{} ] +@end display + +@code{Mdel} deletes files on an MS-DOS file system. + +@code{Mdel} asks for verification prior to removing a read-only file. + +@node mdeltree, mdir, mdel, Commands +@section Mdeltree +@pindex mdeltree +@cindex removing an MS-DOS directory recursively +@cindex erasing an MS-DOS directory recursively +@cindex deleting an MS-DOS directory recursively +@cindex recursively removing an MS-DOS directory + +The @code{mdeltree} command is used to delete an MS-DOS file. Its syntax +is: + +@display +@code{mdeltree} [@code{-v}] @var{msdosdirectory} [@var{msdosdirectories}@dots{}] +@end display + +@code{Mdeltree} removes a directory and all the files and subdirectories +it contains from an MS-DOS file system. An error occurs if the directory +to be removed does not exist. + +@node mdir, mdu, mdeltree, Commands +@section Mdir +@pindex mdir +@cindex Read-only files (listing them) +@cindex Listing a directory +@cindex Directory listing + +The @code{mdir} command is used to display an MS-DOS directory. Its +syntax is: + +@code{mdir} [@code{-/}] [@code{-f}] [@code{-w}] [@code{-a}] [@code{-b}] @var{msdosfile} [ @var{msdosfiles}@dots{}] + +@code{Mdir} +displays the contents of MS-DOS directories, or the entries for some +MS-DOS files. + +@code{Mdir} supports the following command line options: + +@table @code +@item / +Recursive output, just like MS-DOS' @code{-s} option +@item w +Wide output. With this option, @code{mdir} prints the filenames across +the page without displaying the file size or creation date. +@item a +Also list hidden files. +@item f +Fast. Do not try to find out free space. On larger disks, finding out +the amount of free space takes up some non trivial amount of time, as +the whole FAT must be read in and scanned. The @code{-f} flag bypasses +this step. This flag is not needed on FAT32 file systems, which store +the size explicitly. +@item b +Concise listing. Lists each directory name or filename, one per line +(including the filename extension). This switch displays no heading +information and no summary. Only a newline separated list of pathnames +is displayed. +@end table + +An error occurs if a component of the path is not a directory. + +@node mdu, mformat, mdir, Commands +@section Mdu +@pindex mdu +@cindex Space occupied by directories and files +@cindex du +@cindex Listing space occupied by directories and files +@cindex Occupation of space by directories and files + +@code{Mdu} is used to list the space occupied by a directory, its +subdirectories and its files. It is similar to the @code{du} command on +Unix. The unit used are clusters. Use the minfo command to find out +the cluster size. + +@code{mdu} [@code{-a}] [ @var{msdosfiles} @dots{} ] + + +@table @code +@item a +All files. List also the space occupied for individual files. +@item s +Only list the total space, don't give details for each subdirectory. +@end table + + + +@node mformat, mkmanifest, mdu, Commands +@section Mformat +@pindex mformat +@cindex Initializing disks +@cindex Formatting disks +@cindex File system creation + +The @code{mformat} command is used to add an MS-DOS file system to a +low-level formatted diskette. Its syntax is: + +@display +@code{mformat} [@code{-t} @var{cylinders}|@code{-T} @var{tot_sectors}] [@code{-h} @var{heads}] [@code{-s} @var{sectors}] + [@code{-f} @var{size}] [@code{-1}] [@code{-4}] [@code{-8}] + [@code{-v} @var{volume_label}] + [@code{-F}] [@code{-S} @var{sizecode}] + [@code{-M} @var{software_sector_size}] + [@code{-N} @var{serial_number}] [@code{-a}] + [@code{-C}] [@code{-H} @var{hidden_sectors}] [@code{-I} @var{fsVersion}] + [@code{-r} @var{root_sectors}] [@code{-L} @var{fat_len}] + [@code{-B} @var{boot_sector}] [@code{-k}] + [@code{-m} @var{media_descriptor}] + [@code{-K} @var{backup_boot}] + [@code{-c} @var{clusters_per_sector}] + [@code{-d} @var{fat_copies}] + [@code{-X}] [@code{-2} @var{sectors_on_track_0}] [@code{-3}] + [@code{-0} @var{rate_on_track_0}] [@code{-A} @var{rate_on_other_tracks}] + @var{drive:} +@end display + +@code{Mformat} adds a minimal MS-DOS file system (boot sector, FAT, and +root directory) to a diskette that has already been formatted by a Unix +low-level format. + + +The following options are supported: (The S, 2, 1 and M options may not +exist if this copy of mtools has been compiled without the USE_2M +option) + +The following options are the same as for MS-DOS's format command: + +@comment xMANoptions + +@table @code +@item v +Specifies the volume label. A volume label identifies the disk and can +be a maximum of 11 characters. If you omit the -v switch, mformat will +assign no label to the disk. +@item f +Specifies the size of the DOS file system to format. Only a certain +number of predefined sizes are supported by this flag; for others use +the -h/-t/-s flags. The following sizes are supported: +@table @asis +@item 160 +160K, single-sided, 8 sectors per track, 40 cylinders (for 5 1/4 DD) +@item 180 +160K, single-sided, 9 sectors per track, 40 cylinders (for 5 1/4 DD) +@item 320 +320K, double-sided, 8 sectors per track, 40 cylinders (for 5 1/4 DD) +@item 360 +360K, double-sided, 9 sectors per track, 40 cylinders (for 5 1/4 DD) +@item 720 +720K, double-sided, 9 sectors per track, 80 cylinders (for 3 1/2 DD) +@item 1200 +1200K, double-sided, 15 sectors per track, 80 cylinders (for 5 1/4 HD) +@item 1440 +1440K, double-sided, 18 sectors per track, 80 cylinders (for 3 1/2 HD) +@item 2880 +2880K, double-sided, 36 sectors per track, 80 cylinders (for 3 1/2 ED) +@end table + +@item t +Specifies the number of tracks on the disk. +@item T +Specifies the number of total sectors on the disk. Only one of these 2 +options may be specified (tracks or total sectors) +@item h +The number of heads (sides). +@item s +Specifies the number of sectors per track. If the 2m option is given, +number of 512-byte sector equivalents on generic tracks (i.e. not head 0 +track 0). If the 2m option is not given, number of physical sectors per +track (which may be bigger than 512 bytes). + +@item 1 +Formats a single side (equivalent to -h 1) + +@item 4 +Formats a 360K double-sided disk (equivalent to -f 360). When used +together with -the 1 switch, this switch formats a 180K disk + +@item 8 +Formats a disk with 8 sectors per track. + +@end table + +MS-DOS format's @code{q}, @code{u} and @code{b} options are not +supported, and @code{s} has a different meaning. + +The following options are specific to mtools: + +@table @code + +@item F +Format the partition as FAT32. + +@item S +The size code. The size of the sector is 2 ^ (sizecode + 7). +@item X +formats the disk as an XDF disk. @xref{XDF}, for more details. The disk +has first to be low-level formatted using the xdfcopy utility included +in the fdutils package. XDF disks are used for instance for OS/2 install +disks. +@item 2 +2m format. The parameter to this option describes the number of +sectors on track 0, head 0. This option is recommended for sectors +bigger than normal. +@item 3 +don't use a 2m format, even if the current geometry of the disk is a 2m +geometry. +@item 0 +Data transfer rate on track 0 +@item A +Data transfer rate on tracks other than 0 +@item M +software sector size. This parameter describes the sector size in bytes used +by the MS-DOS file system. By default it is the physical sector size. +@item N +Uses the requested serial number, instead of generating one +automatically +@item a +If this option is given, an Atari style serial number is generated. +Ataris store their serial number in the OEM label. +@item C +creates the disk image file to install the MS-DOS file system on +it. Obviously, this is useless on physical devices such as floppies +and hard disk partitions, but is interesting for image files. +@item H +number of hidden sectors. This parameter is useful for formatting hard +disk partition, which are not aligned on track boundaries (i.e. first +head of first track doesn't belong to the partition, but contains a +partition table). In that case the number of hidden sectors is in +general the number of sectors per cylinder. This is untested. +@item I +Sets the fsVersion id when formatting a FAT32 drive. In order to find +this out, run minfo on an existing FAT32 drive, and mail me about it, so +I can include the correct value in future versions of mtools. +@item c +Sets the size of a cluster (in sectors). If this cluster size would +generate a FAT that too big for its number of bits, mtools automatically +increases the cluster size, until the FAT is small enough. +@item d +Sets the number of FAT copies. Default is 2. This setting can also be +specified using the @code{MTOOLS_NFATS} environment variable. +@item r +Sets the size of the root directory (in sectors). Only applicable to 12 +and 16 bit FATs. This setting can also be specified using the +@code{MTOOLS_DIR_LEN} environment variable. +@item L +Sets the length of the FAT. +@item B +Use the boot sector stored in the given file or device, instead of using +its own. Only the geometry fields are updated to match the target disks +parameters. +@item k +Keep the existing boot sector as much as possible. Only the geometry +fields and other similar file system data are updated to match the target +disks parameters. +@item K +Sets the sector number where the backup of the boot sector should be +stored (only relevant on FAT32). + +@item m +Use a non-standard media descriptor byte for this disk. The media +descriptor is stored at position 21 of the boot sector, and as first +byte in each FAT copy. Using this option may confuse DOS or older mtools +version, and may make the disk unreadable. Only use if you know what you +are doing. + +@end table + +To format a diskette at a density other than the default, you must supply +(at least) those command line parameters that are different from the +default. + +@code{Mformat} returns 0 on success or 1 on failure. + +It doesn't record bad block information to the Fat, use +@code{mbadblocks} for that. + +@node mkmanifest, minfo, mformat, Commands +@section Mkmanifest +@pindex mkmanifest +@cindex packing list + +The @code{mkmanifest} command is used to create a shell script (packing +list) to restore Unix filenames. Its syntax is: + +@code{mkmanifest} [ @var{files} ] + +@code{Mkmanifest} creates a shell script that aids in the restoration of +Unix filenames that got clobbered by the MS-DOS filename restrictions. +MS-DOS filenames are restricted to 8 character names, 3 character +extensions, upper case only, no device names, and no illegal characters. + + +The mkmanifest program is compatible with the methods used in +@code{pcomm, arc,} and @code{mtools} to change perfectly good Unix +filenames to fit the MS-DOS restrictions. This command is only useful if +the target system which will read the diskette cannot handle VFAT long +names. + +@subsection Example +You want to copy the following Unix files to a MS-DOS diskette (using the +@code{mcopy} command). + +@example + very_long_name + 2.many.dots + illegal: + good.c + prn.dev + Capital +@end example + +@code{ASCII} +converts the names to: + +@example + very_lon + 2xmany.dot + illegalx + good.c + xprn.dev + capital +@end example + +The command: +@example +mkmanifest very_long_name 2.many.dots illegal: good.c prn.dev Capital >manifest +@end example +would produce the following: +@example + mv very_lon very_long_name + mv 2xmany.dot 2.many.dots + mv illegalx illegal: + mv xprn.dev prn.dev + mv capital Capital +@end example + +Notice that "good.c" did not require any conversion, so it did not +appear in the output. + +Suppose I've copied these files from the diskette to another Unix +system, and I now want the files back to their original names. If the +file "manifest" (the output captured above) was sent along with those +files, it could be used to convert the filenames. + +@subsection Bugs + +The short names generated by @code{mkmanifest} follow the old convention +(from mtools-2.0.7) and not the one from Windows 95 and mtools-3.0. + + +@node minfo, mlabel, mkmanifest, Commands +@section Minfo +@pindex minfo +@cindex mformat parameters +@cindex getting parameters of a MS-DOS file system + +The @code{minfo} command prints the parameters of a MS-DOS file system, such +as number of sectors, heads and cylinders. It also prints an mformat +command line which can be used to create a similar MS-DOS file system on +another media. However, this doesn't work with 2m or XDF media, and +with MS-DOS 1.0 file systems +@display +@code{minfo} @var{drive}: +@end display + +Minfo supports the following option: +@table @code +@item v +Prints a hexdump of the boot sector, in addition to the other information +@end table + + +@node mlabel, mmd, minfo, Commands +@section Mlabel +@pindex mlabel +@cindex Labeling a disk +@cindex Disk label + +The @code{mlabel} command adds a volume label to a disk. Its syntax is: +@display +@code{mlabel} [@code{-vcsn}] [@code{-N} @var{serial}] @var{drive}:[@var{new_label}] +@end display + +@code{Mlabel} displays the current volume label, if present. If +@var{new_label} is not given, and if neither the @code{c} nor the +@code{s} options are set, it prompts the user for a new volume label. +To delete an existing volume label, press return at the prompt. + +The label is limited to 11 single-byte characters, +e.g. @code{Name1234567}. + +Reasonable care is taken to create a valid MS-DOS volume label. If an +invalid label is specified, @code{mlabel} changes the label (and +displays the new label if the verbose mode is set). @code{Mlabel} +returns 0 on success or 1 on failure. + +Mlabel supports the following options: +@table @code +@item c +Clears an existing label, without prompting the user +@item s +Shows the existing label, without prompting the user. +@item n +Assigns a new (random) serial number to the disk +@item N @var{serial} +Sets the supplied serial number. The serial number should be supplied as +an 8 digit hexadecimal number, without spaces +@end table + + +@node mmd, mmount, mlabel, Commands +@section Mmd +@pindex mmd +@cindex Making a directory +@cindex Creating a directory +@cindex Directory creation +@cindex Subdirectory creation + +The @code{mmd} command is used to make an MS-DOS subdirectory. Its +syntax is: + +@code{mmd} [@code{-D} @var{clash_option}] @var{msdosdirectory} [ +@var{msdosdirectories}@dots{} ] + +@code{Mmd} makes a new directory on an MS-DOS file system. An error occurs +if the directory already exists. + + +@node mmount, mmove, mmd, Commands +@section Mmount +@pindex mmount +@cindex Linux enhancements (mmount) +@cindex Mounting a disk +@cindex High capacity formats, mounting + +The @code{mmount} command is used to mount an MS-DOS disk. It is only +available on Linux, as it is only useful if the OS kernel allows to +configure the disk geometry. Its syntax is: + +@code{mmount} @var{msdosdrive} [@var{mountargs}] + +@code{Mmount} +reads the boot sector of an MS-DOS disk, configures the drive geometry, +and finally mounts it passing +@code{mountargs} to @code{mount. } +If no mount arguments are specified, the name of the device is +used. If the disk is write protected, it is automatically mounted read +only. + + +@node mmove, mpartition, mmount, Commands +@section Mmove +@pindex mmove +@cindex Moving files (mmove) +@cindex Renaming files (mmove) + +The @code{mmove} command is used to moves or renames an existing MS-DOS +file or subdirectory. +@display +@code{mmove} [@code{-v}] [@code{-D} @var{clash_option}] @var{sourcefile} @var{targetfile} +@code{mmove} [@code{-v}] [@code{-D} @var{clash_option}] @var{sourcefile} [ @var{sourcefiles}@dots{} ] @var{targetdirectory} +@end display +@code{Mmove} moves or renames an existing MS-DOS file or +subdirectory. Unlike the MS-DOS version of @code{MOVE}, @code{mmove} is +able to move subdirectories. Files or directories can only be moved +within one file system. Data cannot be moved from MS-DOS to Unix or +vice-versa. If you omit the drive letter from the target file or +directory, the same letter as for the source is assumed. If you omit +the drive letter from all parameters, drive a: is assumed by default. + +@node mpartition, mrd, mmove, Commands +@section Mpartition +@pindex mpartition +@cindex partitions (creating) +@cindex Zip disks (partitioning them) +@cindex Jaz disks (partitioning them) + +The @code{mpartition} command is used to create MS-DOS file systems as +partitions. This is intended to be used on non-Linux systems, +i.e. systems where fdisk and easy access to SCSI devices are not +available. This command only works on drives whose partition variable +is set. + +@display +@code{mpartition} @code{-p} @var{drive} +@code{mpartition} @code{-r} @var{drive} +@code{mpartition} @code{-I} [@code{-B} @var{bootSector}] @var{drive} +@code{mpartition} @code{-a} @var{drive} +@code{mpartition} @code{-d} @var{drive} +@code{mpartition} @code{-c} [@code{-s} @var{sectors}] [@code{-h} @var{heads}] +[@code{-t} @var{cylinders}] [@code{-v} [@code{-T} @var{type}] [@code{-b} +@var{begin}] [@code{-l} length] [@code{-f}] + +@end display + +Mpartition supports the following operations: + +@table @code +@item p +Prints a command line to recreate the partition for the drive. Nothing +is printed if the partition for the drive is not defined, or an +inconsistency has been detected. If verbose (@code{-v}) is also set, +prints the current partition table. +@item r +Removes the partition described by @var{drive}. +@item I +Initializes the partition table, and removes all partitions. +@item c +Creates the partition described by @var{drive}. +@item a +"Activates" the partition, i.e. makes it bootable. Only one partition +can be bootable at a time. +@item d +"Deactivates" the partition, i.e. makes it unbootable. +@end table + +If no operation is given, the current settings are printed. + +For partition creations, the following options are available: +@table @code +@item s @var{sectors} +The number of sectors per track of the partition (which is also the +number of sectors per track for the whole drive). +@item h @var{heads} +The number of heads of the partition (which is also the number of heads +for the whole drive). By default, the geometry information (number of +sectors and heads) is figured out from neighboring partition table +entries, or guessed from the size. +@item t @var{cylinders} +The number of cylinders of the partition (not the number of cylinders of +the whole drive. +@item b @var{begin} +The starting offset of the partition, expressed in sectors. If begin is +not given, mpartition lets the partition begin at the start of the disk +(partition number 1), or immediately after the end of the previous +partition. +@item l @var{length} +The size (length) of the partition, expressed in sectors. If end is not +given, mpartition figures out the size from the number of sectors, heads +and cylinders. If these are not given either, it gives the partition +the biggest possible size, considering disk size and start of the next +partition. +@end table + +The following option is available for all operation which modify the +partition table: +@table @code +@item f +Usually, before writing back any changes to the partition, mpartition +performs certain consistency checks, such as checking for overlaps and +proper alignment of the partitions. If any of these checks fails, the +partition table is not changes. The @code{-f} allows you to override +these safeguards. +@end table + +The following options are available for all operations: +@table @code +@item v +Together with @code{-p} prints the partition table as it is now (no +change operation), or as it is after it is modified. +@item vv +If the verbosity flag is given twice, mpartition will print out a +hexdump of the partition table when reading it from and writing it to +the device. +@end table + +The following option is available for partition table initialization: +@table @code +@item B @var{bootSector} +Reads the template master boot record from file @var{bootSector}. +@end table + + +@node mrd, mren, mpartition, Commands +@section Mrd +@pindex mrd +@cindex Removing a directory +@cindex Erasing a directory +@cindex Deleting a directory +@cindex Directory removing +@cindex Subdirectory removing + +The @code{mrd} command is used to remove an MS-DOS subdirectory. Its +syntax is: + +@display +@code{mrd} [@code{-v}] @var{msdosdirectory} [ @var{msdosdirectories}@dots{} ] +@end display + +@code{Mrd} removes a directory from an MS-DOS file system. An error occurs +if the directory does not exist or is not empty. + +@node mren, mshortname, mrd, Commands +@section Mren +@pindex mren +@cindex Renaming files (mren) +@cindex Moving files (mren) + +The @code{mren} command is used to rename or move an existing MS-DOS +file or subdirectory. Its syntax is: + +@display +@code{mren} [@code{-voOsSrRA}] @var{sourcefile} @var{targetfile} +@end display + +@code{Mren} +renames an existing file on an MS-DOS file system. + +In verbose mode, @code{Mren} displays the new filename if the name +supplied is invalid. + +If the first syntax is used (only one source file), and if the target +name doesn't contain any slashes or colons, the file (or subdirectory) +is renamed in the same directory, instead of being moved to the current +@code{mcd} directory as would be the case with @code{mmove}. Unlike the +MS-DOS version of @code{REN}, @code{mren} can be used to rename +directories. + +@node mshortname, mshowfat, mren, Commands +@section Mshortname +@pindex mshortname + +The @code{mshortname} command is used to display the short name of a +file. Syntax: + +@display +@code{mshortname} @var{files} +@end display + +The shortname is displayed as it is stored in raw format on disk, +without any character set conversion. + +@node mshowfat, mtoolstest, mshortname, Commands +@section Mshowfat +@pindex mshowfat +@cindex Clusters of a file +@cindex Fat + +The @code{mshowfat} command is used to display the FAT entries for a +file. Syntax: + +@display +@code{mshowfat} [@code{-o} @var{offset}] @var{files} +@end display + +If no offset is given, a list of all clusters occupied by the file is +printed. If an offset is given, only the number of the cluster +containing that offset is printed. + +@node mtoolstest, mtype, mshowfat, Commands +@section Mtoolstest +@pindex mtoolstest +@cindex Testing configuration file for correctness +@cindex Checking configuration file +@cindex Verifying configuration file + +The @code{mtoolstest} command is used to tests the mtools configuration +files. To invoke it, just type @code{mtoolstest} without any arguments. +@code{Mtoolstest} reads the mtools configuration files, and prints the +cumulative configuration to @code{stdout}. The output can be used as a +configuration file itself (although you might want to remove redundant +clauses). You may use this program to convert old-style configuration +files into new style configuration files. + +@node mtype, mzip, mtoolstest, Commands +@section Mtype + +The @code{mtype} command is used to display contents of an MS-DOS +file. Its syntax is: + +@display +@code{mtype} [@code{-ts}] @var{msdosfile} [ @var{msdosfiles}@dots{} ] +@end display + +@code{Mtype} displays the specified MS-DOS file on the screen. + +In addition to the standard options, @code{Mtype} allows the following +command line options: + +@table @code +@item t +Text file viewing. @code{Mtype} translates incoming carriage +return/line feeds to line feeds. +@item s +@code{Mtype} strips the high bit from the data. +@end table + +The @code{mcd} command may be used to establish the device and the +current working directory (relative to MS-DOS), otherwise the default is +@code{A:/}. + +@code{Mtype} returns 0 on success, 1 on utter failure, or 2 on partial +failure. + +Unlike the MS-DOS version of @code{TYPE}, @code{mtype} allows multiple +arguments. + + +@node mzip, , mtype, Commands +@section Mzip +@cindex Zip disk (utilities) +@cindex Jaz disk (utilities) +@cindex Ejecting a Zip/Jaz disk +@cindex Write protecting a Zip/Jaz disk +@pindex mzip +@cindex ZipTools disk +@cindex Tools disk (Zip and Jaz drives) +@cindex APlaceForYourStuff +@cindex password protected Zip disks + +The @code{mzip} command is used to issue ZIP disk specific commands on +Linux, Solaris or HP-UX. Its syntax is: + +@display +@code{mzip} [@code{-epqrwx}] +@end display + +@code{Mzip} allows the following +command line options: + +@table @code +@item e +Ejects the disk. +@item f +Force eject even if the disk is mounted (must be given in addition to +@code{-e}). +@item r +Write protect the disk. +@item w +Remove write protection. +@item p +Password write protect. +@item x +Password protect +@item u +Temporarily unprotect the disk until it is ejected. The disk becomes +writable, and reverts back to its old state when ejected. +@item q +Queries the status +@end table + +To remove the password, set it to one of the password-less modes +@code{-r} or @code{-w}: mzip will then ask you for the password, and +unlock the disk. If you have forgotten the password, you can get rid of +it by low-level formatting the disk (using your SCSI adapter's BIOS +setup). + +The ZipTools disk shipped with the drive is also password protected. On +MS-DOS or on a Mac, this password is automatically removed once the +ZipTools have been installed. From various articles posted to Usenet, I +learned that the password for the tools disk is +@code{APlaceForYourStuff}@footnote{To see the articles, search for +@code{APlaceForYourStuff} using Google Groups}. Mzip knows about this +password, and tries it first, before prompting you for a password. Thus +@code{mzip -w z:} unlocks the tools disk@footnote{I didn't know about +this yet when I bought my own Zip drive. Thus I ended up reformatting +my tools disk, and hence I haven't had the opportunity to test the +password yet. If anybody still has their tools disk with the original +password, could you try it out? Thanks in advance}. The tools disk is +formatted in a special way so as to be usable both in a PC and in a Mac. +On a PC, the Mac file system appears as a hidden file named +@file{partishn.mac}. You may erase it to reclaim the 50 Megs of space +taken up by the Mac file system. + + +@subsection Bugs + +This command is a big kludge. A proper implementation would take a +rework of significant parts of mtools, but unfortunately I don't have +the time for this right now. The main downside of this implementation is +that it is inefficient on some architectures (several successive calls +to mtools, which defeats mtools' caching). + +@node Compiling mtools, Porting mtools, Commands, Top +@chapter Architecture specific compilation flags +@cindex XDF disks (compile time configuration) +@cindex Solaris (compile time configuration of vold) +@cindex Vold (compile time configuration) +@cindex Compile time configuration + +To compile mtools, first invoke @code{./configure} before +@code{make}. In addition to the standard @code{autoconfigure} flags, +there are two architecture specific flags available. + +@table @code +@item ./configure --enable-xdf +@itemx ./configure --disable-xdf +Enables support for XDF disks. This is on by default. @xref{XDF}, +for details. +@item ./configure --enable-vold +@itemx ./configure --disable-vold +Enables support for vold on Solaris. When used in conjunction with vold, +mtools should use different device nodes than for direct access. + +@item ./configure --enable-new-vold +@itemx ./configure --disable-new-vold +Enables new support for vold on Solaris. This is supposed to work more +smoothly than the old support. + +@item ./configure --enable-floppyd +@itemx ./configure --disable-floppyd +Enables support for floppyd. By default, floppyd support is enabled as +long as the necessary X includes and libraries are available. +@end table + +@node Porting mtools, Command Index, Compiling mtools, Top +@chapter Porting mtools to architectures which are not supported yet +@cindex Porting +@cindex Compiled-in defaults + + This chapter is only interesting for those who want to port mtools to +an architecture which is not yet supported. For most common systems, +default drives are already defined. If you want to add default drives +for a still unsupported system, run configuration.guess, to see which +identification autoconf uses for that system. This identification is +of the form cpu-vendor-os (for example sparc-sun-sunos). The cpu and +the OS parts are passed to the compiler as preprocessor flags. + The OS part is passed to the compiler in three forms. +@enumerate +@item +The complete OS name, with dots replaced by underscores. SCO3.2v2 would +yield sco3_2v2 +@item +The base OS name. SCO3.2v2 would yield Sco +@item +The base OS name plus its major version. SCO3.2v2 would yield Sco3 +@end enumerate + + All three versions are passed, if they are different. + + To define the devices, use the entries for the systems that are already +present as templates. In general, they have the following form: + +@example +#if (defined (my_cpu) && defined(my_os)) +#define predefined_devices +struct device devices[] = @{ + @{ "/dev/first_drive", 'drive_letter', drive_description@}, + @dots{} + @{ "/dev/last_drive", 'drive_letter', drive_description@} +@} +#define INIT_NOOP +#endif +@end example + + "/dev/first_drive" is the name of the device or image file +representing the drive. Drive_letter is a letter ranging from a to z +giving access to the drive. Drive_description describes the type of the +drive: +@table @code +@item ED312 +extra density (2.88M) 3 1/2 disk +@item HD312 +high density 3 1/2 disk +@item DD312 +double density 3 1/2 disk +@item HD514 +high density 5 1/4 disk +@item DD514 +double density 5 1/4 disk +@item DDsmall +8 sector double density 5 1/4 disk +@item SS514 +single sided double density 5 1/4 disk +@item SSsmall +single sided 8 sector double density 5 1/4 disk +@item GENFD +generic floppy drive (12 bit FAT) +@item GENHD +generic hard disk (16 bit FAT) +@item GEN +generic device (all parameters match) +@item ZIPJAZ(flags) +generic ZIP drive using normal access. This uses partition 4. +@code{Flags} are any special flags to be passed to open. +@item RZIPJAZ(flags) +generic ZIP drive using raw SCSI access. This uses partition 4. +@code{Flags} are any special flags to be passed to open. +@item REMOTE +the remote drive used for floppyd. Unlike the other items, this macro +also includes the file name ($DISPLAY) and the drive letter (X) +@end table + + Entries may be described in more detail: +@example + fat_bits,open_flags,cylinders,heads,sectors,DEF_ARG +@end example + or, if you need to describe an offset (file system doesn't start at +beginning of file system) +@example + fat_bits, open_flags, cylinders, heads, sectors, offset, DEF_ARG0 +@end example + +@table @code +@item fat_bits +is either 12, 16 or 0. 0 means that the device accepts both types of +FAT. +@item open_flags +may include flags such as O_NDELAY, or O_RDONLY, which might be +necessary to open the device. 0 means no special flags are needed. +@item cylinders,heads,sectors +describe the geometry of the disk. If cylinders is 0, the heads and sectors +parameters are ignored, and the drive accepts any geometry. +@item offset +is used if the DOS file system doesn't begin at the start of the device +or image file. This is mostly useful for Atari Ram disks (which contain +their device driver at the beginning of the file) or for DOS emulator +images (which may represent a partitioned device. +@end table + + Definition of defaults in the devices file should only be done if these +same devices are found on a large number of hosts of this type. In that +case, could you also let me know about your new definitions, so that I +can include them into the next release. For purely local file, I +recommend that you use the @code{@value{SYSCONFDIR}mtools.conf} and +@code{~/.mtoolsrc} configuration files. + + However, the devices files also allows to supply geometry setting +routines. These are necessary if you want to access high capacity +disks. + + Two routines should be supplied: + +@enumerate +@item +Reading the current parameters +@example +static inline int get_parameters(int fd, struct generic_floppy_struct *floppy) +@end example + + This probes the current configured geometry, and return it in +the structure generic_floppy_struct (which must also be declared). + Fd is an open file descriptor for the device, and buf is an already +filled in stat structure, which may be useful. + This routine should return 1 if the probing fails, and 0 otherwise. + +@item +Setting new parameters +@example +static inline int set_parameters(int fd, struct generic_floppy_struct *floppy) + struct stat *buf) +@end example + This configures the geometry contained in floppy on the file descriptor +fd. Buf is the result of a stat call (already filled in). This should +return 1 if the new geometry cannot be configured, and 0 otherwise. +@end enumerate + + A certain number of preprocessor macros should also be supplied: + +@table @code +@item TRACKS(floppy) +refers to the track field in the floppy structure +@item HEADS(floppy) +refers to the heads field in the floppy structure +@item SECTORS(floppy) +refers to the sectors per track field in the floppy structure +@item SECTORS_PER_DISK(floppy) +refers to the sectors per disk field in the floppy structure (if +applicable, otherwise leave undefined) + +@item BLOCK_MAJOR +major number of the floppy device, when viewed as a block device + +@item CHAR_MAJOR +major number of the floppy device, when viewed as a character device +(a.k.a. "raw" device, used for fsck) (leave this undefined, if your OS +doesn't have raw devices) +@end table + + For the truly high capacity formats (XDF, 2m, etc), there is no clean +and documented interface yet. + +@comment MANskip 1 + +@node Command Index, Variable Index, Porting mtools, Top +@unnumbered Command Index +@printindex pg + +@node Variable Index, Concept Index, Command Index, Top +@unnumbered Variable index +@printindex vr + +@node Concept Index, , Variable Index, Top +@unnumbered Concept index +@printindex cp + +@comment MANend-skip 1 +@comment MANend-skip 5 +@bye -- cgit v1.2.1