============================================================================

                    Fill V1.2.  Smart Multi-file Mover.
           Copyright ©1993-1994 Barry Wills.  All rights reserved.


============================================================================


DISTRIBUTION AND USE.
~~~~~~~~~~~~~~~~~~~~~
This product is Giftware, and may be freely distributed and/or used under
the following restrictions:

1.  This product may be modified for private use only.  Modifications may
    not be distributed in any fashion.
2.  This product may not be distributed for profit.  A nominal copying fee
    is authorized (for cost of materials and shipping and handling
    comparable to that charged by Fred Fish.)  Explicit permission to
    distribute this archive is hereby granted to Fred Fish.
3.  Shareware, Giftware, Freeware, and Public Domain products are free to
    include this original unmodified distribution archive.  Honorable
    mention of the author and product would be appreciated.  Distribution
    of this product in a commercial package without written permission
    from the author is strictly forbidden.
4.  This product may not be used for malicious intent.

If you honour the Giftware concept, please consider sending some money
(like $1 in cash) to Fred Fish for the awesome support he has provided us
all these years.



DISCLAIMER.
~~~~~~~~~~
This product is provided without any warranty, express or implied.  The user
of this product assumes full responsibility for any damage resulting from
the use and/or misuse of this product, ESPECIALLY if you make your own
modifications. :-)


CONTENTS.
~~~~~~~~
This archive should contain the following files:

  .Product-Info - KingFisher record for this archive.
  bin/cf        - Executable, creates a file of any given size.
  bin/Fill      - Executable, V1.2.
  docs/Fill.doc - Copyright notice and product information (this file).
  source/cf.e   - Dummy-file creation utility source.
  source/Fill.e - Fill program source.
  pmodules/     - Directory containing the following EPP source modules:
                  commandLineArgs.e, skipNonWhite.e, skipWhite.e,
                  upperChar.e.


============================================================================


REQUIREMENTS.
~~~~~~~~~~~~
· An Amiga with the minimum configuration.  Should operate under KickStart
  V1.3 or higher.

· Requires arp.library V39+.

· You will need EPP (an E Preprocessor), Wouter van Oortmerssen's Amiga E,
  and at least 1Meg of RAM if you want to compile the sources.



WHAT IS IT?
~~~~~~~~~~
FILL copies or moves all files from the directory specified on the command-
line to a destination (normally a floppy drive) in such a fashion as to waste
as little storage as possible on the destination.  Fill supports wildcard
pattern matching of filenames.



WHY IS IT?
~~~~~~~~~
I was suitably impressed by a program I saw on IBM/clone machines (can you
believe it?) called FILL.  I hunted for an equivalent for Amiga (or the
source so I could port it).  But it was unavailable, so I wrote it.

This was not just an exercise.  I need this program.  I often download a lot
of files to my hard drive and then peruse through them and classify them
later.  But sometimes I can't get to them until MUCH later (school gets in
the way, etc.)  In the meantime if I need space on my drive then I have to
manually copy these files to floppy for temporary storage.

Both time and floppy diskettes are at a premium.  Manually copying takes a
lot of time, and diskettes aren't a dime a dozen ($6 - $10 a dozen,
actually.)  That's where FILL comes to the rescue.



INSTALLATION.
~~~~~~~~~~~~
1.  Place Fill somewhere in your path for convenience.
2.  Copy arp.library from the Fill archive subdirectory for your
corresponding OS version (Libs/OS13 for AmigaDOS v1.3, Libs/OS20 for
AmigaDOS v2.0).



USAGE.
~~~~~
1.  Typing FILL without any parameters (or with invalid parameters) will
produce the following message:

   Usage:  Fill [<options>] <source> <dest>
     <source>  Any valid DOS "dev:dir", ARP wildcards supported
     <dest>    Any valid DOS "dev:dir"
     [<options>]
      -c    Copy files only, don't delete source (default MOVE FILES)
      -e##  Error margin, add blocks to storage estimate (1-20; default 0)
      -n    No DOS overhead considerations (use on MS-DOS floppies)
      -p    Don't transfer protection bits (use standard rwed)
      -x    Don't clone protection bits, date, and time

2.  Typing "Fill * DF0:" will MOVE all files in the current directory to the
floppy in DF0:.  The source directory may be any valid DOS file specification
(i.e., any [dev:][path/]filepattern.)  Arp wildcards are supported, so if you
type "Fill temp/*.l* DF0:" then all files in the temp directory that have a
".lzh", ".lha", ".l#?" extension will be moved to the floppy in DF0:.

3. All files moved or copied retain their protection bits and datestamps by
default.  If the diskette in DF0: becomes full the number of unused bytes is
displayed for your edification and you will be prompted to insert the next
diskette.  Entering "Q" or "q" at the prompt will abort the program.  Typing
Ctrl-C at any time will abort the copy/move and remove from destination the
partially copied file in progress at the time of interrupt.

4.  Program mode is MOVE by default.  The option '-c' disables deletion of
files from the source medium.  If an error occurs while writing to
destination, the destination file is removed (but the source file is not), a
message is displayed and a smaller file will be attempted.

5.  Error margin is 0 blocks by default.  This option was supplied in the
event that storage requirements are incorrectly calculated by the program.
(*****  DOES ANYBODY USE THIS???  *****)

6.  Since MS-DOS reserves a fixed number of blocks for the file system, so it
doesn't require any fancy calculations, i.e., the "overhead" is predetermined.
The "-n" option is provided to allow you to completely fill an MS-DOS floppy.

7.  To assign the default protection bits to destination files, supply the
"-p" option on the command-line.

8.  To assign the current date and time stamp to destination files, supply
the "-x" option on the command-line.



OTHER CONSIDERATIONS.
~~~~~~~~~~~~~~~~~~~~
FILL does not check for files on destination that have the same name, they
are simply over-written.  For this reason, and the probability of file
fragmentation, using partially-full disks with this program is discouraged.

The storage requirements formula used in this program is not sanctioned (as
far as I am aware) by anyone but me.  I formulated it by experimentation
with DOS.  Therefore, it is possible that the calculations may occasionally
be inaccurate.  If this occurs I would appreciate a bug report and as much
information about the circumstances as possible.  Redirecting the output of
the DOS List command to a text file(s) would be very helpful, as would error
messages generated by DOS and the program.

Since FILL was written with 880k OFS floppies in mind as the standard
destination device, the storage requirements calculation may be inaccurate
if you are trying to fill hard/floptical drives or high density drives.  I
have no need (and no means) to test other media types at this time.  If this
causes you severe heartburn please let me know and I'll consider researching
it.  I intentionally did not play with FFS since I don't use it on my
floppies.  FILL may act a little flakey if used with FFS floppies.  I don't
know for sure.


============================================================================


LIMITATIONS.
~~~~~~~~~~~
  · Doesn't do subdirectories.

  · Any other features not included that you think would be worthwhile...



TO DO.
~~~~~
  · Optimized copying.  Comparing combined size of two or three smaller
    files instead of just using the largest file that will fit.  (Not sure
    if this is feasible.)

  · Allow specification of an alternate destination drive (for those of us
    with more than one floppy.)

  · There was one request for sub-directories.  What should one do with a
    a sub-directory???



HISTORY.
~~~~~~~
   V0.10b - First release, May 1993.
   ~~~~~~
   1.  Locks destination.  Doesn't care if it's a floppy.
   2.  Locks source.  Source is always current directory.
   3.  Examines contents of source directory, stores filenames and sizes in
       a list in descending order.
   4.  Checks free space on destination.  Gets from list largest file that
       will fit on destination.  Moves file to destination.  Continues
       until list is emptied or files remaining in list won't fit on an
       empty volume.
   5.  Prompts for disk-change when volume becomes full.  Allows user
       interruption.
   6.  Displays number of unused bytes on a finished volume.
   7.  Supports options:
       -b##  Copy buffer size (1-100k; default 20)
       -c    Copy only.  Don't move files. (default MOVE FILES)
       -e##  Error Margin for storage estimate (1-20 blocks; default 0)
   8.  Preserves file attributes.
   9.  Recovers from full disk error (untested.)

   V0.11b - Released (oops, I don't remember).
   ~~~~~~
   1.  Corrected erroneous check for file too big to fit on empty volume.
       V0.10b would keep asking for another disk, even though a file would
       not fit on an empty volume.  User had to enter 'Q' or 'q' to quit at
       the prompt.
   2.  Corrected to get the destination infodata before displaying free
       space when exiting the program.  Previously, the free space shown
       upon exiting was the free space on the destination BEFORE the last
       file was copied/moved.  (oops)

   V0.12b - Released 22 May 93.
   ~~~~~~
   1.  Added Ctrl-C interrupt capability.

   V1.0 - Released 13 Jun 93.
   ~~~~
   1.  Removed from beta status.
   2.  New command-line argument for source dev:directory.
   3.  Now using arp.library to select filenames by pattern.

   V1.1 - Released 24 Jul 93.
   ~~~~
   1.  Added -n switch for "no overhead consideration", intended for use
       with MS-DOS floppies.
   2.  Cosmetic adjustment of status messages.
   3.  If a destination directory is specified, the file name was prepended
       with the directory name instead of being placed in the destination
       directory.

   V1.2 - Released 13 Feb 94.
   ~~~~
   1.  Added -x (NOCLONE) switch, clone datestamp by default.
   2.  Added -p (NOPRO) switch, preserve protection bits by default.
   3.  Condensed source format a little.  Optimized a few statements.


============================================================================


MISCELLANEOUS.
~~~~~~~~~~~~~
This product was developed and tested on a Commodore Amiga 500 with the
following configuration:

   KickStart V34, WorkBench V1.3, ©Commodore-Amiga, Inc.
   KickStart V37, WorkBench V2.1, ©Commodore-Amiga, Inc.
   Amiga E V2.1, ©Wouter van Oortmerssen
   ARP V39 and V40, Amiga Resource Project, ©ARP Authors.

   DataFlyer 500 SCSI controller
   Quantum 52M HD
   Dual 880K floppy drive
   1M 16-bit Chip RAM
   CSA Derringer 030 accellerator:
      68030 CPU @25MHz
      68881 FPU @27MHz
      4M 32-bit Fast RAM


============================================================================


CREDITS.
~~~~~~~
Special thanks go to:

  · Wouter van Oortmerssen for making Amiga E awesome and available!

  · Arp Authors, those Amiga monoliths, saviors of the dying Amiga OS
    v1.3, most (all?) of whom are still lurking somewhere!

============================================================================


CONTACTING THE AUTHOR.
~~~~~~~~~~~~~~~~~~~~~
I can be reached by the following means:

  Internet:  el269@cleveland.freenet.edu

  USnail:    Barry Wills
             5528D Pryor Dr.
             Scott AFB, IL 62225 (USA)
             (618)-744-1096

I wrote this for my own use, but I hope you get as much enjoyment out of it
as I do.  I am very interested in feedback!


============================================================================
