
    *** DSKDUP 2.1 - Diskette Duplication and Verification ***

The Willow Creek Diskette Duplicator (DSKDUP) duplicates and checks
floppy diskettes.  It allows multiple copies to be made without
rereading the master, and multiple drives to be used if they are of
the same type.  DSKDUP formats, writes, and verifies at the physical
level using BIOS functions.  It can additionally verify diskettes by
reading all files in all directories via MS-DOS functions and
calculating a modified checksum from their contents that must match an
expected value.

The MS-DOS level verification is important because empirical testing
has shown that diskettes which are verifiable track by track by the
BIOS can nevertheless be unreadable to MS-DOS (though rarely).  I have
no idea why this is true, but my returns of unreadable diskettes by
customers have gone way down since I started doing this.

DSKDUP documentation consists of this message and context sensitive
help inside the program.  Just push F1 inside the program to get a
help message, and F1 again to get a general program introduction.

$
Usage: DSKDUP controlfile device device ...

DSKDUP duplicates and checks diskettes defined in a "controlfile",
using one or more floppy disk "devices".  If there are several
"devices" they must all be used to create the same type of diskette.
The "controlfile" is an ASCII text file containing the diskette names
for prompts, and other information used to create diskettes.

DSKDUP can make diskettes, check diskettes, or both.  The program will
ask which you wish to do when it starts.  DSKDUP also prompts for the
number of copies to make of each diskette, and how many retries to
attempt when errors occur.

All copies of each diskette will be duped and checked before moving on
to the next diskette.  If there are multiple "devices" then each will
be used to make as many copies as requested of each diskette.  So if
you give 2 devices and ask for 4 copies you will end up with 8 copies
of each diskette.  You will be able to load and unload multiple
"devices" at the same time, instead of one at a time as each device is
ready to be used.

$
DSKDUP can duplicate from a master diskette, or can save the master
data on the hard disk so it doesn't have to be reloaded all the time.

The "controlfile" specifies diskette names, where the master data will
be read from, checksums to verify against, etc.  The first line in the
"controlfile" is text describing the software contained on the
diskettes.  The second line is the drive type this "controlfile"
should be used with: "360KB", "1.2MB", "720KB", or "1.44MB".  This is
the physical diskette type that this file tells how to create.  Each
subsequent line describes a diskette, and looks like this:

  "<disktitle>" <checkfile> <dupefile> <chksum>

<disktitle> will be used to build a prompt to load a diskette.
<checkfile> is a file which DSKDUP should look for on the diskette
before checking it, to verify that the correct diskette is in the
drive.  <dupefile> is the file containing the master copy of the data
to write to the diskette, and <chksum> is a modified checksum that is
used to validate the diskette while checking it for readability.

$
If <dupefile> does not exist then DSKDUP will ask you to load the
master copy of the diskette into the drive so it can create the
<dupefile> for you.  If <dupefile> is "TEMP" (without quotes) then a
temporary file is used instead, and the master diskette must be loaded
each time diskettes are made.

Here is a sample control file:

  Test Software Version 1.0 - DS/DD 5.25
  360KB
  "Program Diskette" main.exe dupe1.dup 10a4f94
  "Data Diskette" master.dat dupe2.dup e0568bb
  "Help Diskette" help.dat dupe3.dup 893cd84

To determine the checksum values to put in the control file set up a
control file with checksums of zero, and then duplicate a batch of
diskettes with it.  Since DSKDUP always displays both values when
checksums don't match you will be able to determine the correct values
by doing an initial run this way.

After all diskettes are finished DSKDUP asks if you want to do it all
over again.

$
DSKDUP knows all the funny tricks about using the BIOS to format
different media sizes in drives that take multiple media sizes, i.e.
720KB/1.44MB drives.  It uses the "undocumented" Int 13h function 18h
to retrieve the correct disk base table, and it protects against DMA
overruns by coercing buffer addresses to avoid 64KB page boundaries.
