                         SPLIT & UNSPLIT
                                
          Big File SPLITting and UNSPLITting Utilities

                               By

                        Joseph M. Morgan
                         SPLIT & UNSPLIT
                        Table of Contents

Copyright and User Information . . . . . . . . . . . . . . . .  1

Disclaimer . . . . . . . . . . . . . . . . . . . . . . . . . .  2

SPLIT - Large File Splitting Utility . . . . . . . . . . . . .  3
     Purpose . . . . . . . . . . . . . . . . . . . . . . . . .  3
     Requirements. . . . . . . . . . . . . . . . . . . . . . .  3
     SPLIT - How To Do It. . . . . . . . . . . . . . . . . . .  4
     What SPLIT Does . . . . . . . . . . . . . . . . . . . . .  4

UNSPLIT - Large File UnSplitting Utility . . . . . . . . . . .  5
     Purpose . . . . . . . . . . . . . . . . . . . . . . . . .  5
     Requirements. . . . . . . . . . . . . . . . . . . . . . .  5
     UNSPLIT - How To Do It. . . . . . . . . . . . . . . . . .  5
     What UNSPLIT Does . . . . . . . . . . . . . . . . . . . .  5

INFO On Both Programs. . . . . . . . . . . . . . . . . . . . .  6
     Installing. . . . . . . . . . . . . . . . . . . . . . . .  6
     History & Direction . . . . . . . . . . . . . . . . . . .  6
     Future Support. . . . . . . . . . . . . . . . . . . . . .  7
     Cost & Registration . . . . . . . . . . . . . . . . . . .  8
                 Copyright and User Information

     These programs and this documentation is the property of
Joseph M. Morgan.  You may freely copy and distribute this software
and its documentation for non-commercial and non-governmental use
as long as for any given program, the program and it's
documentation are copied and distributed together.  You may not
distribute the software without the documentation or the
documentation without the software.
     Please send all suggestions, inquiries, and other
correspondence to:

                    Joseph M. Morgan
                    9045 Kingston Rd. #1804
                    Shreveport, LA 71118
                           Disclaimer

     These utilities, their associated documentation and the media
on which they are distributed are distributed as is, with no
warranty either explicit or implied.  Even though every attempt has
been made to provide high-quality, accurate information, this
documentation may contain omissions or errors.  There is no
guarantee, either explicit or implied, that this program will work
properly on any given computer.
     In no event shall Joseph M. Morgan be held liable in any way
for any damages of any kind to include lost profits of any amount,
lost savings of any amount, or other incidental or consequential
damages of any kind arising, for any reason, from the use, misuse,
or inability to use these utility programs and/or their associated
documentation even if Joseph M. Morgan has been advised of the
possibility or occurrence of such damages.
     If the program is defective in any way, you, the user, assume
all responsibility and costs of all necessary repairs and/or
adjustments and/or servicing of any kind.  The distribution rights
and, if applicable, registration cost are all subject to change or
withdrawal without prior notification of any kind.  The contents of
the program documentation may be in error or inaccurate and,
therefore, is subject to change at all times without prior
notification of any kind.
     If you, the user, reside in an area where local laws of any
kind including city, county or parish, state or other local laws
that either explicitly or implicitly require Joseph M. Morgan to
bear responsibility or liability of any kind resulting from the
use, misuse, or inability to use these programs and their
associated documentation, you, the user, are hereby not allowed to
use these programs or their associated documentation, or any other
program and/or its associated documentation produced by Joseph M.
Morgan for any reason or purpose on any computer or equipment
either owned or not owned by you, the user.
     Use of any one of these programs constitutes full agreement
with the conditions of this disclaimer by you, the user, and you
hereby accept all responsibility for use of these programs and
their associated documentation.
              SPLIT - Large File Splitting Utility

     Purpose

     The reason I wrote SPLIT was because we despise using the DOS
BACKUP utility to copy a single large file from one computer to
another.  Typically, we will use a compression utility to compress
an entire directory, or entire directory tree, into one file.
Usually, however, this file is too large to fit on one 1.44MB or
1.2MB floppy.
     Plus, have you ever tried using BACKUP on a DOS version 5.0
system and restoring on a DOS version 2.11 system?  It can't be
done folks!
     Also, have you ever been in the middle of a backup and run out
of 1.44MB disks, and had a stack of 1.22's just sitting around
waiting to be used?  But, you also knew that the 1.22s alone
wouldn't be enough?  Try changing drives in mid-stream?  It can't
be done!
     You ever run out of blank disks and tried to continue your
backup onto a good disk that contained needed files?  OOPS!

     Well, SPLIT is the answer.  SPLIT will take any single file,
and write it to multiple diskettes (or even multiple hard-drives if
you want, though you'd probably never want), even if the diskettes
are being used by other files.
     No control files are written.  No version formatting
requirements.  And SPLIT doesn't care which version (or
manufacturer) of DOS you might be using.  SPLIT will also allow you
to change diskette drives and sizes on the fly!  So you can start
with a 1.44MB and then go to a 1.22MB, then a 720K or 360K, and
back to a 1.44.
     Note that during testing, I couldn't find a 320K, 180K or 160K
diskette, so I don't know for an absolute fact that these will
work.  But if your computer and version of DOS will read and write
to one of these kinds, I see no reason why SPLIT wouldn't work with
them.

     Requirements

     SPLIT requires DOS 2.11 or higher to work.  SPLIT doesn't
check the version, and I don't know if it will work on a version
earlier than that, but I trust my compiler's technical
documentation, and I couldn't find a computer running anything less
than 2.11 on which to test it!
     If you're using some version earlier than that, try it.  If it
works, the first thing to do is to let me know.  At the very least,
I can correct my documentation.  The next thing you need to do if
you're using a DOS version less than 2.11 is to UPGRADE!!!
     Hopefully, you have a hard drive and need to copy a file
larger than your largest diskette capacity from one computer to
another.  But there is no reason that you couldn't use a floppy-
only system to SPLIT a 400K file on a 720K diskette across multiple
360K diskettes.

     SPLIT - How To Do It

     With all utilities I write, you get help by entering the
program with no arguments on the command line.  What you see is a
Reader's Digest version of this documentation.
     SPLIT requires at least two command line arguments:

     split [/r] parent_file_name target_drive

The "parent_file_name" is any valid DOS file name.  "target_drive"
is the drive to which you wish to begin SPLITting.  SPLIT allows
you to change drives in process, but it wants to know where to
begin.
     The optional switch "/r" tells SPLIT to automatically replace
any existing child files on your target diskette(s).  This function
is basically for re-SPLITting a file to the same diskette(s) as a
previous SPLIT.  Normally, SPLIT finds one of it's children and
tells you it's there.  Then it asks permission before writing over
it.

     What SPLIT Does

     SPLIT begins by locating your parent file.  Then it looks at
your target drive and crams as much of the parent as it can onto
that disk or diskette.  Then it tells you it is time to continue. 
This is where you can change drives.  To stay on the same drive,
change diskettes and press [ENTER].  Otherwise, enter the letter of
the drive you want to go to next.
     SPLIT continues this process until the entire parent file has
been written.  SPLIT also enters some code into each child file to
let UNSPLIT know how to UNSPLIT it.  See "What UNSPLIT Does" below
for more information on UNSPLIT.
     Please note that you DO NOT have to have a fresh diskette in
the drive.  SPLIT WILL NOT overwrite existing files on your
diskette UNLESS it is an older child of the existing parent file. 
Also note, however, that you DO have to have your diskette pre-
formatted, as SPLIT WILL NOT format your diskette(s) for you.  (See
"History & Direction" below for possible changes to this rule.)
     While SPLIT is doing it's job, it gives you two percentages. 
The first percentage is the percent of completion of the current
child being written.  The second percentage is the percent of the
completion of the entire process.

            UNSPLIT - Large File UnSplitting Utility

     Purpose

     Obviously, the purpose of UNSPLIT was to get back what SPLIT
created (or un-created, whichever way you want to look at it!).  If
you haven't already, read about the purpose of SPLIT above.

     Requirements

     UNSPLIT requirements are the same as SPLIT.  See
"Requirements" above under SPLIT's stuff.

     UNSPLIT - How To Do It

     With all utilities I write, you get help by entering the
program with no arguments on the command line.  What you see is a
Reader's Digest version of this documentation.
     UNSPLIT requires at least one command line argument:

     unsplit [/r] [drive:]child [target_drive:[path]]

The "child" file name only actually needs to be the root file name
of the name of the original parent file.  When SPLIT does it's job,
it names the first child "`parent_file_name'.0".  All you really
have to give UNSPLIT is "parent_file_name".  You don't have to, but
you should include the drive on which the first child exists.  You
will be able to swap drives and diskettes during the process, but
UNSPLIT needs to know where to begin.
     Now, it is my recommendation that you get into the directory
on your hard drive where you want the UNSPLIT version of your
parent file to be.  Then, enter the UNSPLIT command with a
drive:child combination.  Since it is possible to swap drives
during the SPLIT, you wouldn't want to execute UNSPLIT with a
floppy as your default drive.  (Not that it should hurt, mind you.)
     The optional "target_drive:[path]]" tells UNSPLIT where to put
the original parent file if it is not the current drive and
directory.  Otherwise, UNSPLIT writes the parent file to where you
are when you execute it.
     The optional switch "/r" tells UNSPLIT to automatically
overwrite the existing parent if it exists.  By default, UNSPLIT
asks your permission before overwriting an existing parent.

     What UNSPLIT Does

     UNSPLIT looks for your first child file.  Once found, it looks
for a file with the same name as the parent file name contained
within special code in the first child file.  If that parent
exists, UNSPLIT asks permission to overwrite it unless you give it
the /r switch.
     UNSPLIT then reads the child file from the diskette, and, when
that's done, UNSPLIT knows to tell you to insert the next diskette
if there is another to insert.  Please note that, though UNSPLIT
can tell which is the next child to read, it cannot tell you which
drive that child needs to come from.  Therefore, if you swapped
drives during the SPLIT operation, number those diskettes so you
can reinsert them in the proper order and change drives when
necessary.
     (During coding for this latest version, I was going to have
SPLIT record the next drive to accommodate UNSPLIT.  But, this
would have meant lots of diskette swapping.  That was so unfriendly
to the user, that I dropped the idea and put a little bit of the
responsibility back on the user.)
     UNSPLIT continues UNSPLITting until all children have been
read and then entire parent has been recreated.
     While UNSPLITting, UNSPLIT looks at the date and time stamp on
each child for the date and time stamp of the original parent. 
This prevents you from accidentally sticking a child of a previous
SPLIT in the place of the child you actually need.  UNSPLIT warns
you if it finds a child that doesn't belong to the proper parent,
and prompts you either to continue, or replace the diskette with
the one containing the proper child.
     Like SPLIT, while UNSPLIT is doing it's job, it gives you
percentages telling you the relative completion of the stages of
it's work.  The first percentage is relative to the reading of the
child.  The second percentage is relative to the completion of the
creation of the parent.

                      INFO On Both Programs

     Installing

     When you get these programs, there is no installation utility. 
In fact, SPLIT and UNSPLIT are ready to run (unless, of course, you
haven't un-archived them from the BBS or service from which you
downloaded them).  Just copy them into a directory that your PATH
command includes.  Look in your DOS manual(s) for more information
on what PATH does.

     History & Direction

     Like all other utilities I write, I first wrote SPLIT and
UNSPLIT because we needed something like it where I work.  We would
compress a file with vise-grips, but couldn't seem to get some of
them small enough to copy from one computer to another.
     The first version of SPLIT and UNSPLIT wouldn't even copy the
child files to the diskette for you.  You had to SPLIT them to your
hard drive, then copy them, one at a time, to a floppy.  The same
with UNSPLIT.   You had to copy from the floppies one file at a
time, then UNSPLIT them.
     The next version offered the enhancement of copying the files
for you, but there was still the limitation of having to tell SPLIT
what kind of floppies you were using.  And, inevitably, someone
around here ran out of their 1.2MB floppies SPLITting a file one
day, and we scrambled for disks, realizing if we could just tell it
to swap drives and go to the 1.44MB drive, we'd be OK.
     Now, SPLIT figures it out for you.  You can switch drives and
diskette sizes until you are blue in the face.  We've even SPLIT
files as large as a couple hundred megabytes to 40MB Bernoulli
cartridges!
     At the time I finished programming SPLIT and UNSPLIT for this
latest version, I thought that I might expand it to include
compression and all the little goodies those utilities offer.  But,
that would be reinventing the wheel.  So, since the
Shareware/Freeware market offers the best in compression utilities,
I wont attempt to compete with their products.
     I still plan to expand SPLIT to include multiple file
specifications and recursive directory searches across multiple
drives.  A colleague of mine even made the brilliant suggestion of
providing a command file so that you could provide a list of file
specifications and multiple drives and media to SPLIT.
     Another enhancement might be to format unformatted floppies,
but I haven't decided whether to actually format the diskette
myself or to drop out and let your DOS do it for me (and you!).  I
have all of the stuff in SPLIT to do it, as SPLIT grabs INT 24h
(for you technical people!), letting me know the diskette drive
status.  But I just don't know if I want to actually do the
formatting myself.
     The next version of SPLIT will verify that, if you are re-
SPLITting, the parent file you are splitting was last written at a
date and time LATER than the date and time it was written during
the last SPLIT.  This will save you time and trouble if you either
forgot that you had already SPLIT the latest version of a file, or,
if you somehow attempt to SPLIT and OLDER version of a file to a
newer SPLIT version of the same file.
     Any other suggestions would be appreciated.  This is one of my
pet projects.  Every time I get a useful suggestion, I attempt to
employ it.

     Future Support

     Future support of enhancement requests for SPLIT and UNSPLIT
will depend upon the number of people who respond to me regarding
their use of these programs.  YOU DO NOT HAVE TO REGISTER OR PAY ME
A DIME TO USE THIS SOFTWARE (Of course, if you feel generous ...). 
But, please, let me know how you are using the software, what you'd
like to see it do, etc., etc.  You can write to me at the address
above or below.
     Basically, the more people who actually use it, the more
demand I will see, and I will continue to support it.  If enough
people think my stuff is useable, I might just go ahead and shrink-
wrap it!  But, for right now, I want to be able to deliver the kind
of stuff we have found we have needed to the rest of the world.

     Cost & Registration

     There is no cost or registration for SPLIT and UNSPLIT.  I am
distributing the programs and this documentation as FREEWARE!!! 
This is how I want to make my mark.
     Now, THIS is how I want to make my money.  I will sell the
COMPLETE C SOURCE CODE for BOTH programs for $25.00.  Just send a
request and $25.00 to me at:

               Joseph M. Morgan
               9045 Kingston Rd. #1804
               Shreveport, LA 71118

     Checks and cash and things that can be turned into cash will
be accepted.  No credit cards please.  (Of course, if you'd like to
send my kids to college or buy me a new house, I'll accept that
too!)
     Be sure to include your return address and the kind of
diskettes you want.  I will send it the day I receive payment.  You
will receive a package with the latest executable versions of SPLIT
and UNSPLIT, the latest C source code both printed AND on the
diskette type and size you request.
     I'll hang on to your address so that if we discover a small
bug or some other kind of cosmetic problem, I'll send you the
corrected source FREE, up to but not including the next major
version of SPLIT and UNSPLIT!  (Sounds like registration, doesn't
it???)
     I'll probably even be nice enough to give you the next
version's source for half-price or something if you order.<g> 
Whatever the case, I won't let you regret it.  I'm not doing this
to get rich, I just think that the programs don't offer enough for
sale, but the source does!
