------------------------------------------------------------------------------
COPY
 $ Copy <File> <File>           # Simple copy
 $ Copy <File> <Directory>      # Simple copy
 $ Copy <FileList> <File>       # ConCat
 $ Copy <FileList> <Directory>  # Multiple-copy
 $ Copy <FileList> <Device:>    # Type, Print
 $ Copy <FileList>              # Defaults to VDU:
 $ Copy <Directory> <Directory> # Tree-copy
 $ Copy <Wild> <Wild>           # Multiple copies, one by one to named files
   QUALIFIERS
     -header                      # When copying to a device, insert headers
     -noheader                    # Suppress headers (default)
     -new                         # Fails if target exists
     -confirm                     # Asks for confirmation if target exists
     -noconfirm                   # Override previous "-confirm" flag
     -verbose                     # Over-ride verbosity level
                                  # (Report files copied) Default 
                                  # for "-verbose" when issued without
                                  # a number is 1 [On].
     -stop                        # Stops on first error
     -nostop                      # Continues on error
     -exact (or -backup)          # Preserve datestamp or load/exec addresses
   DEFAULTS
     -confirm -stop ; default TO parameter is "VDU:"
     If target is a file, then "-noheader"
     Else if Device: then "-header"
   NOTES
      For "Copy <anything> <Directory>", the Directory may be of the
      form "NFS:" etc., i.e. the current directory of that filing system.
      -new, -confirm, and -noconfirm are mutually exclusive.
      "Copy file1,file2 printer:" puts a header before EACH file.
      "Copy file1,file2 -header file3" does actually put the headers in.
      "Copy Fred-* OldFred-*" is possible, but recursive loops should be
      checked for.
      New directories will be created if necessary, irrespective of the
      -new flag.
      ALSO See the comments in MOVE applying to the flattening of directory
      hierarchies - the same comments apply here.
------------------------------------------------------------------------------
MOVE
 $ Move <File> <File>          # Simple rename. Deletes old if exists
 $ Move <FileList> <Directory> # Ditto
 $ Move <File> <File> -new     # Fails if target exists.
 $ Move <File> <Directory>     # Ditto
 $ Move <Wild> <Wild>          # Multiple rename - Wilds must match in form.
   QUALIFIERS
     -new                          # Fails if target exists
     -confirm                      # Asks for confirmation if target exists
     -noconfirm                    # Override previous "-confirm" flag
     -stop                         # Stops on first error
     -nostop                       # Continues on error
     -verbose                      # Over-ride verbosity (Report files moved)
   DEFAULTS
     -new -stop
   NOTES
     For "Move <anything> <Directory>", the Directory may be of the
     form "NFS:" etc., i.e. the current directory of that filing system.
     "Move Dir1.&& Dir2" will flatten the directory hierarchy of dir1
     into Dir2.  You probably want "Move Dir1.&& Dir2.&&". This particular
     case is probably worth a warning/confirmation message.

     If there were a -delete flag in the COPY command above, which caused
     the source file to be deleted after a successful copy, MOVE could
     be defined as being equivalent to COPY -delete <from> <to>.
     Having a seperate MOVE command helps optimise the operation when
     the filing system supports a 'Rename' operation.  MOVE must, however,
     be willing to do the work of COPY (Or call COPY itself) because
     many filing systems make arbitrary restrictions on what may be
     renamed to what & where.
------------------------------------------------------------------------------
DELETE
 $ Delete <FileOrDirList>      # Simple deletion for files,
 $ Delete <Directory>          # but directory deletion is "-confirm"
   QUALIFIERS
     -confirm                      # Asks for confirmation for each file
     -noconfirm                    # Wipes without asking
     -stop                         # Stops on first error
     -nostop                       # Continues on error
     -verbose                      # Report files deleted or not.
   DEFAULTS
     -confirm -stop
   NOTES
     "Delete Dir.&&" is not the same as "Delete Dir" - the former
     leaves an empty directory around.

     In the spirit of the clarification of MOVE above, DELETE could
     be defined in terms of COPY -delete <from> NULL:
     - This is the definition to be used when trying to interpret
     the file-spec of the parameter
------------------------------------------------------------------------------
CREATE
 $ Create Fred                  # Create a file of default extent,
                                #  initially empty
 $ Create Fred -size=64K        # Create a large file, possibly for a database
 $ Create Jim -dir              # Create a directory
 $ Create Jim -dir -size=256    # In case a filing system supports directories
                                #  of a pre-determined size.
   QUALIFIERS
      -new                          # fails if file exists
      -dir                          # Create a directory
      ...                           # Usual obligatory parameters apply
   DEFAULTS
      -size is filing system dependent.
   NOTES
     Creating a file of fixed size works by saving a file of that size,
     then saving an empty file.  This ensures that there is space in which
     the file can grow - BUT only if it is opened for output and written
     before any other files are created on that filing system.

     It might be stretching an analogy too far, but...
     create could be implemented as COPY NULL: <to>
     and create -dir as COPY NULL:$ <to>
------------------------------------------------------------------------------
FILES
 $ Files                       # List all files of Current working directory
 $ Files <FileOrDirList>       # File info on named files only
                               # Directories have their contents listed
   QUALIFIERS
     -dirinfo                      # Give info on directories as if they
                                   # were files
     -nodirinfo                    # List contents of directories
     -expand                       # Normally, directory name is given
                                   # first, on a line by itself,
                                   # followed by the files in
                                   # that directory.  The expand option lists
                                   # the file names with the paths attached.
     -noexpand                     # Over-rides above
     -depth <number>               # depth of recursive directory listing
                                   # (default 0, i.e. no recursion)
   DEFAULTS
     -nodirinfo -noexpand ; default file parameter is "" (current directory)
   NOTES
     For "Files <Directory>", the Directory may be of the
     form "NFS:" etc., i.e. the current directory of that filing system.
     "Files &&" will give a complete hierarchical directory listing
     (almost as will "Files -depth 99") - but the former will list out
     the files as a flat list of full path-named files, whereas the
     latter will list each directory fully, followed by its sub-directories
     ad infinitum. Each group will be preceded by its directory name.
------------------------------------------------------------------------------
PROTECT/PERMIT  --- haven't thought about these yet, but meta-thoughts are:
only specify protection bits which change, only need give
one parameter if only want to change other peoples permissions
PERMIT Fred rw  means permit fred to others in read/write mode
PERMIT Fred rwd/r means permit fred in read mode to others, but in
                        read & write mode, and deleteable to self.
PROTECT Fred means ''Access Fred <unchanged>/<None>''
------------------------------------------------------------------------------
PRINT
special options for header lines/banner - users COPY internally.
Knows about local configuration (either by being compiled locally
or by having a configuration file somewhere)
Distinction between date/time file created & date/time queued &
date/time printed; file name vs. explicit header
headers on every page/banner header only/no header at all.
------------------------------------------------------------------------------


******************************************************************************

The following is a meta-command which can be used to extend a simple command
either during development of new utilities, or for imported utilities.

APPLY <Command> <From> <To> <Options>

   Takes the command and calls it on one pair of parameters at a time,
treating the <from> and <to> as wild cards in the style of MOVE and COPY
if both are given.

e.g.   APPLY "compare" adfs:*-def To nfs:*-def Options -noblanks

will generate
   compare adfs:fred-def nfs:fred-def -noblanks
   compare adfs:jim-def nfs:jim-def -noblanks
   compare adfs:sheila-def nfs:sheila-def -noblanks

The options field if given will be appended to the simple command.
Simple commands should be written in a form to take advantage
of APPLY; aliasing can be used a method of creating compound commands
in this way.

The exact treatment of parameters may be modified in light of experience.

Also, a version which takes a list of <From> <To> pairs from a file
might be useful.
  (for <From> <To> pairs, read ''<From>, or <From> <To> pairs'')

******************************************************************************
